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 ...
随机推荐
- RunLoop 总结:RunLoop的应用场景(二)
上一篇讲了使用RunLoop保证子线程的长时间存活,而不是执行完任务后就立刻销毁的应用场景.这一篇就讲述一下RunLoop如何保证NSTimer在视图滑动时,依然能正常运转. 参考资料 好的书籍都是值 ...
- Express 4 handlebars 不使用layout写法
Express 4 handlebars 不使用layout写法 Express node nodejs handlebars layout 最近刚开始学习使用nodejs. 使用express搭建了 ...
- 如何在 Evernote 中支持代码高亮
Evernote 本身不支持代码高亮,在 Apple App-Store 上有一个建立在 Evernote 上的 EverCode,可以支持代码高亮,需要付费.虽然只有¥5,但是这个 App 似乎只能 ...
- SQL Server 如何通过SQL语句定位SSRS中的具体报表
在一些IT技术人员的推广.简单培训后,公司很多部门都有一些非IT技术人员参与开发各自需求的Reporting Service报表.原因很简单,罗列出来的原因大概有这样一些: IT部门的考量: 1:IT ...
- 浅谈Linux内存管理机制
经常遇到一些刚接触Linux的新手会问内存占用怎么那么多?在Linux中经常发现空闲内存很少,似乎所有的内存都被系统占用了,表面感觉是内存不够用了,其实不然.这是Linux内存管理的一个优秀特性,在这 ...
- 萌新笔记——git的问题(error: object file .git/objects/* is empty...)的解决方案及对git版本库文件的了解
由于操作不当,导致git版本库出了大问题,如下所示: error: object file .git/objects/8b/61d0135d3195966b443f6c73fb68466264c68e ...
- 项目游戏开发日记 No.0x000003
14软二杨近星(2014551622) 刚刚过去清明节, 意味着离交项目的时间, 还有三个星期, 有点着急了, 可是, 还是觉得无所适从... 项目进展: 刚刚过去的一周, 事非常多, 以至于, 进展 ...
- [LeetCode] Remove K Digits 去掉K位数字
Given a non-negative integer num represented as a string, remove k digits from the number so that th ...
- EntityFramework、Dapper vs 草根框架性能大比拼,数据库访问哪家强?
扯淡 当前市面上 ORM 很多,有跑车型的,如 Dapper,有中规中矩型的,如 Mybatis.Net,也有重量型的,如 EntityFramework 和 NHibernate,还有一些出自草根之 ...
- Cookie的应用
作用:在浏览器当中用cookie来保存参数,比如实现登录功能时用来保存账号 <%@ page language="java" import="java.util.* ...