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 -- 容易放错的误区的更多相关文章

  1. Oracle EBS Java Applet报错:找不到类

    Oracle EBS Home Page可以打开,但是无法打开EBS的Form,查看Java控制台,有错误报出. java控制台报错,如下: Java Plug-in 1.6.0_07 使用 JRE ...

  2. Android Studio 首次安装报错 Java.lang.RuntimeException:java.lang.NullPointerException...错

    下次安装报:Java.lang.RuntimeException: java.lang.NullPointerException......错 只需在文件..\Android Studio\bin\i ...

  3. 使用 Gradle 编译 Java 项目时报错: Could not find Tools.jar

    在使用Android studio进行编译成jar的时候,遇到Gradle 编译错误,听前辈们说是jdk的版本不对,于是乎就更新了一下jdk, 然而可能是我重新安装jdk的时候改变了安装路径, 在pr ...

  4. java常见报错及解决

    Java常见报错信息: Java 常见异常种类 Java Exception: 1.Error  2.Runtime Exception 运行时异常 3.Exception  4.throw 用户自定 ...

  5. android studio java工程 报错

    作者:韩梦飞沙 Author:han_meng_fei_sha 邮箱:313134555@qq.com E-mail: 313134555 @qq.com  android studio java工程 ...

  6. 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 ...

  7. debug运行java程序报错

    debug运行java程序报错 ERROR: transport error 202: connect failed: Connection timed out ERROR: JDWP Transpo ...

  8. Java字符串易错方法总结

    Java字符串易错方法总结 public String[] split(String regex) 和 public String[] split(String regex,int limit) li ...

  9. java @override 报错处理

    转载自:http://blog.sina.com.cn/s/blog_9c7605530101kl9r.html 一.java @override 报错处理 做项目的时候,同事那边电脑上编译通过的ja ...

随机推荐

  1. Android Weekly Notes Issue #222

    Android Weekly Issue #222 September 11th, 2016 Android Weekly Issue #222 ARTICLES & TUTORIALS Fo ...

  2. 原创炫酷代码公开——连接董铂然github

    公开了github部分项目(均为原创)更多代码请看https://github.com/dsxNiubility SXWaveAnimate Wonderful SXPhotoShow SXNews ...

  3. Oracle索引重建

    一.前言 Oracle建议对于索引深度超过4级以及已删除的索引条目至少占有现有索引条目总数的20% 这2种情形下需要重建索引.有人持不同观点,就是强烈建议不要定期重建索引.索引重建是一个争论不休被不断 ...

  4. Linux下MySQL慢查询分析mysqlsla安装使用

    说明: 操作系统:CentOS 5.X 64位 MySQL版本:mysql-5.5.35 MySQL配置文件:/etc/my.cnf MySQL 数据库存放目录:/data/mysql 实现目的:开启 ...

  5. 关于selenium RC的脚本开发

    第一.需要录制脚本,找个我也不说了.就是在firefox下下载一个selenium-IDE并且安装. 第二.在工具里找到selenium-IDE点击运行. 第三.默认是红色按钮点击状态的,接下来随便你 ...

  6. 【转】Xen与XenServer的区别

    说到XenServer,总是离不开Xen,所以我要说他们的区别,得首先从Xen开始说起! Xen体系架构 Xen hypervisor体系架构 Xen 的 VMM ( Xen Hypervisor ) ...

  7. 实例:对2个Makefile的备注

    实例1:Makefile编译链接简单.c函数 example.c Makefile exe: example.c gcc example.c -o exe clean: rm exe 执行效果: 实例 ...

  8. BZOJ1500[NOI2005]维修数列

    Description Input 输入的第1 行包含两个数N 和M(M ≤20 000),N 表示初始时数列中数的个数,M表示要进行的操作数目.第2行包含N个数字,描述初始时的数列.以下M行,每行一 ...

  9. elasticsearch5.0及head插件安装

        这个瞎jb整了半天.准备把es2.4升级到5.0,结果老报错 环境:centos6.5+es2.4是ok的换成es5就出毛病.也不能说啥 ,我用的是最新的 源码解压启动时候报错,具体错误for ...

  10. Codevs堆练习

    Codevs堆练习 黄金:2830.2879.2995.3110 钻石:1052.1063.1245.1246.2057.2573.3377 大师:1021.1765.2069.2913.3032