java -- 容易放错的误区
1.按值传递 和 引用传递
(基本类型包括基本类型的包装类 或者 字符串类型 传递的是 副本 并不会改变原来的值)|| 如果是引用类型 传递的是地址,会改变原来的值。
public class T {
public static void main(String[] args) {
String str = "logo";
change(str);//传递
System.out.println(str);//结果:logo
Integer i = new Integer(10);
changeInteger(i);//传递
System.out.println(i);//结果:10
}
private static void change(String str){
str = "change";
}
private static void changeInteger(Integer i){
i=100;
}
}
public static void main(String[] args){
String str = new String("str");
char [] c = {'1','2','3'};
char c1 = '0';
change(str,c,c1);
System.out.println(str);//str 没变
System.out.println(c);//{'1','c','3'} 数组 改变
System.out.println(c1);//'0' 没变
}
public static void change(String str,char[]c,char c1){
str = "change";
c[1]='c';
c1 = 'P';
}
2.子类继承父类。 方法的重写。 方法和返回值类型必须相同
class A {
protected int method1(int a, int b) throws Exception { return 0; }
}
class B extends A{// 重写 1.子类的 访问修饰符大于服类 2.抛出的异常小于父类
public int method1(int a, int b)throws RemoteException { return 0; }
}
3.类 中有 静态块 块 构造方法 时 初始化的顺序如下:
不管是 T t = new T1(); 还是 T1 t = new T1();
都是先调用 父类的静态块,然后 子类的静态块,然后 才是 父类的 块 和构造方法,最后子类 的块 和构造方法
结果如下:
t static {}
t1 static{}
T {}
T()
t1 {}
t1()
import java.lang.reflect.Array;
import java.util.Scanner; public class T {
static{
System.out.println("t static {}");
}
{
System.out.println("T {}");
} T(){
System.out.println("T()");
}
public static void main(String[] args) {
T1 t = new T1();
} } class T1 extends T{
static{
System.out.println("t1 static{}");
} {
System.out.println("t1 {}");
} T1(){
System.out.println(" t1()");
}
}
4.基本类型的包装类 的 == 比较
Integer a = new Integer(100);// new出来的已分配内存对象
Integer b = new Integer(100);
Double c = new Double(10.1);
Double d = new Double(10.1);
System.out.println(a==b);//false
System.out.println(c==d);//false Integer e = 20; //自动装配
Integer f = 20;
System.out.println(e==f);//true;
5.Object 的 equals 和普通的 equals的区别
如下:
public class Test extends Object{
public static void main(String[] args) {
Test o = new Test();
Test o1 = new Test();
if(o.equals(o1)){
System.out.println("aaa");
}//输出:hello
// aaa
//-------------------
Object o2 = new Test();
Object o3 = new Test();
if(o2.equals(o3)){//false 会调用Object的 equals方法
System.out.println("bbb");
}
}
public boolean equals(Test other){//此方法的 方法参数类型不一样 没有重写Object的equals方法
System.out.println("hello");
return true;
}
public boolean equals(Object obj) {//此为Object的 equals方法重写
return (this == obj);
}
}
6.Thread 的start()和run()的区别一个线程对象只能调用一次start方法.从new到等待运行是单行道,所以如果你对一个已经启动的线程对象再调用一次start方法的话,会产生:IllegalThreadStateException异常.
可以被重复调用的是run()方法。
Thread类中run()和start()方法的区别如下:
run()方法:在本线程内调用该Runnable对象的run()方法,可以重复多次调用;
start()方法:启动一个线程,调用该Runnable对象的run()方法,不能多次启动一个线程; 7.Http 和 Https 的区别
在URL前加https://前缀表明是用SSL加密的。 你的电脑与服务器之间收发的信息传输将更加安全。 Web服务器启用SSL需要获得一个服务器证书并将该证书与要使用SSL的服务器绑定。
http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。http的连接很简单,是无状态的,... HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议
要比http协议安全
8.Mybatis 中 ${参数} 和 #{参数}的区别
默认情况下,使用#{}语法,MyBatis会产生PreparedStatement语句中,并且安全的设置PreparedStatement参数,这个过程中MyBatis会进行必要的安全检查和转义。
示例1:
执行SQL:Select * from emp where name = #{employeeName}
参数:employeeName=>Smith
解析后执行的SQL:Select * from emp where name = ?
执行SQL:Select * from emp where name = ${employeeName}
参数:employeeName传入值为:Smith
解析后执行的SQL:Select * from emp where name =Smith
综上所述、${}方式会引发SQL注入的问题、同时也会影响SQL语句的预编译,所以从安全性和性能的角度出发,能使用#{}的情况下就不要使用${}
9.字符串操作 比较 ==
String s = "abc";
String s1 = s+"";
System.out.println(s==s1);//false
String s2 = "abc";
System.out.println(s==s2);//true;
String s3 = "ab"+"c";
System.out.println(s==s3);//true;
String s4 = '1'+'2'+'3'+"abc";
System.out.println((int)'1');//49
System.out.println((int)'2');//50
System.out.println((int)'3');//51
System.out.println(s4);//150abc
10. null的强转换后 调用static 和非 static方法
public class Test{
public static void main(String[] args){
((Test)null).tess();// test 类加载后 可直接调用static方法
((t5)null).te();// tttt 类加载后 可直接调用static方法
((t5)null).te1();// NullPointerException 非静态方法报错
}
public static void tess(){
System.out.println("tess");
}
}
class t5{
t5(){
System.out.println("t");
}
public static void te(){
System.out.println("tttt");
}
public void te1(){
System.out.println("t111");
}
}
11.基本数据类型 和 它的包装类型 == 和 equals 比较都是true
public static void main(String[] args){
Integer b = new Integer(5);
int a = 5;
System.out.println(a==b);//true
System.out.println(b.equals(a));//true
}
12.继承关系中,成员变量 是 调用方法获得的值,的执行顺序:
public class Su {
String str = get("1 string");//
static String ss = get("1 static string");//
static String get(String string) {
System.out.println(string);
return string;
}
public static void main(String[] args) {
new s();
}
}
class s extends Su{
String s = get("2 string");//
static String s2 = get("2 static string");//
}
java -- 容易放错的误区的更多相关文章
- Oracle EBS Java Applet报错:找不到类
Oracle EBS Home Page可以打开,但是无法打开EBS的Form,查看Java控制台,有错误报出. java控制台报错,如下: Java Plug-in 1.6.0_07 使用 JRE ...
- Android Studio 首次安装报错 Java.lang.RuntimeException:java.lang.NullPointerException...错
下次安装报:Java.lang.RuntimeException: java.lang.NullPointerException......错 只需在文件..\Android Studio\bin\i ...
- 使用 Gradle 编译 Java 项目时报错: Could not find Tools.jar
在使用Android studio进行编译成jar的时候,遇到Gradle 编译错误,听前辈们说是jdk的版本不对,于是乎就更新了一下jdk, 然而可能是我重新安装jdk的时候改变了安装路径, 在pr ...
- java常见报错及解决
Java常见报错信息: Java 常见异常种类 Java Exception: 1.Error 2.Runtime Exception 运行时异常 3.Exception 4.throw 用户自定 ...
- android studio java工程 报错
作者:韩梦飞沙 Author:han_meng_fei_sha 邮箱:313134555@qq.com E-mail: 313134555 @qq.com android studio java工程 ...
- Centos7 JDK安装过程中 解决java -version 报错: bash: /home/jdk1.8.0_161/bin/java: Permission denied
1.执行Linux命令 -----vim /etc/profile 编辑profile 文件,在里面添加: #set java enviroment JAVA_HOME=/opt/JavaHome ...
- debug运行java程序报错
debug运行java程序报错 ERROR: transport error 202: connect failed: Connection timed out ERROR: JDWP Transpo ...
- Java字符串易错方法总结
Java字符串易错方法总结 public String[] split(String regex) 和 public String[] split(String regex,int limit) li ...
- java @override 报错处理
转载自:http://blog.sina.com.cn/s/blog_9c7605530101kl9r.html 一.java @override 报错处理 做项目的时候,同事那边电脑上编译通过的ja ...
随机推荐
- safari 浏览器window.history.go(-1)运行无效解决办法
这几天做了几个手机端app的wap页面,做完之后发现一个问题,那就是ios系统下的safari浏览器不支持window.history.go(-1)..无语... 解决方法很简单!加上return f ...
- Android中的自定义控件(二)
案例四: 自定义开关 功能介绍:本案例实现的功能是创建一个自定义的开关,可以自行决定开关的背景.当滑动开关时,开关的滑块可跟随手指移动.当手指松开后,滑块根据开关的状态,滑到最右边或者滑到 ...
- button自适应宽度 并根据屏幕宽自动换行排列
这是一个封装好的类TagListView, 1. 只需要调用两个方法 设置宽度,间距,边距 并赋给它需要显示的字符串数组; 2. 遵循tagListView的协议, 并实现返回buttonView的方 ...
- An App ID with Identifier 'com.XXX.XXX’ is not available. Please enter a different string.报错
昨天刚刚升的Xcode7.3和iOS9.3,然后没怎么使用这两样就下班了,但是今天早上来了之后,就发现突然之间不能真机测试和运行代码了,一看才发现xcode报错: An App ID with Ide ...
- iOS项目相关@AFN&SDWeb的二次封装
一,AFNetworking跟SDWebImge是功能强大且常用的第三方,然而在实际应用中需要封装用来复用今天就跟大家分享一下AFN&SDWeb的二次封装 1. HttpClient.h及.m ...
- 由用友NC刷新功能得到启示
在做NC刷新界面数据的功能,就是 点刷新按钮然后刷新当前 list 中的数据,犯了一个错误. 我之前的做法是记录每次查询数据的sql条件语句,然后在点刷新的时候去调用这个条件语句,哈哈,错误就在这个逻 ...
- SQL Server 2008 R2——当前日期下,一年前数据的统计值
=================================版权声明================================= 版权声明:原创文章 谢绝转载 请通过右侧公告中的“联系邮 ...
- python3: error while loading shared libraries: libpython3.5m.so.1.0: cannot open shared object file: No such file or directory
安装python3遇到报错: wget https://www.python.org/ftp/python/3.5.2/Python-3.5.2.tgz ./configure --prefix=/u ...
- <编程珠玑>笔记 (一) 问题-算法-数据结构
1 精确描述问题 第一章强调的重点在于”精确的描述问题“,这是程序开发的第一步 -- "Problem definition" 1.1 Precise problem stat ...
- PHP的GD库
GD库 PHP通过GD库,可以对JPG.PNG.GIF.SWF等图片进行处理.GD库常用在图片加水印,验证码生成等方面. 绘制线条 要对图形进行操作,首先要新建一个画布,通过imagecreatetr ...