zoukankan      html  css  js  c++  java
  • 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");//3
        static String ss = get("1 static string");//1
            
        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");//4
        static String s2 = get("2 static string");//2
    }

     

  • 相关阅读:
    soapUI完整基本测试(来自csdn)不要问为什么系列5
    final修饰符
    soapUI入门(来自taobaoQA)不要问为什么系列4
    hashmap可以用null为键值
    让sky Driver成为你的可见硬盘
    七个好习惯
    FusionCharts v3汉化(1)
    关于工作注意点的总结
    thread.sleep详解(转帖,非常形象的好文)
    在网页中嵌入任意字体的解决方案
  • 原文地址:https://www.cnblogs.com/GotoJava/p/6252320.html
Copyright © 2011-2022 走看看