zoukankan      html  css  js  c++  java
  • Java基础知识

    数据类型

    	基本数据类型--byte 8
    				boolean 
    				char 16
    				short 16
    				int 32
    				float 32
    				double 64
    				long 64
    	缓存池--new Integer(123) 与 Integer.valueOf(123) 的区别在于:
    			new Integer(123) 每次都会新建一个对象;
    			Integer.valueOf(123) 会使用缓存池中的对象,多次调用会取得同一个对象的引用。
    

    String

    --声明为final,不可继承。
    	--String不可变的好处:可以缓存哈希值(String用做HashMap的key。可以使得hash值也不可变,只需要进行一次计算)
    					   StringPool的需要(如果一个String对象已经被创建过,那么就会从StringPool中取得引用)
    					   安全性(String不可变性可以保证参数不可变)
    					   线程安全(String不可变性天生具备线程安全,可以在多个线程中安全地使用)
    					   
    	--String/StringBuffer/StringBuilder
    			可变性:String不可变,StringBuffer和StringBuilder可变
    			线程安全:String 不可变,因此是线程安全的
    					StringBuilder 不是线程安全的
    					StringBuffer 是线程安全的,内部使用 synchronized 进行同步
    			实例化:String可以利用构造函数,也可以直接赋值。StringBuffer只能用构造函数
    			
    	--字符串常量池:字符串常量池(String Pool)保存着所有字符串字面量(literal strings)。
    				  可以使用String的intern()方法在运行过程中将字符串添加到String Pool中。
    				  在Java 7之前,String Pool被放在运行时常量池中,它属于永久代。而在Java 7,String Pool 			           被移到堆中。是因为永久代的空间有限,在大量使用字符串的场景下会导致 OutOfMemoryError。
    				  
    	--new String("abc"):使用这种方式会创建两个字符串对象(前提是String Pool中还没有 "abc" 字符串对象)。	  			"abc" 属于字符串字面量,因此编译时期会在 String Pool 中创建一个字符串对象,指向这个 "abc" 				 字符串字面量;而使用 new 的方式会在堆中创建一个字符串对象。
    

    继承

    --普通类和抽象类的区别
    	抽象类不能被实例化,需要继承抽象类才能实例化其子类
        抽象类可以有抽象方法,抽象方法只需申明,无需实现;含有抽象方法的类必须申明为抽象类
        抽象的子类必须实现抽象类中所有抽象方法,否则这个子类也是抽象类
        抽象方法不能被声明为静态static
        抽象方法不能用private和final修饰
        
    --接口: Java 8之前,它可以看成是一个完全抽象的类,也就是说它不能有任何的方法实现。8以后可以有默认的方法实现。
    接口的成员(字段+方法)默认是public的,并且不允许定义为private或protected。接口的字段默认都是static和final的。
    
    --接口与抽象类的区别
    	从设计层面上看,抽象类提供了一种IS-A关系,那么子类对象必须能够替换掉所有父类对象。而接口更像是一种 LIKE-A 关系,它只是提供一种方法实现契约,并不要求接口和实现接口的类具有 IS-A 关系。
    	从使用上来看,一个类可以实现多个接口,但是不能继承多个抽象类。
    	接口的字段只能是 static 和 final 类型的,而抽象类的字段没有这种限制。
    	接口的成员只能是 public 的,而抽象类的成员可以有多种访问权限。
    	
    --super:访问父类的构造函数:可以使用super()函数访问父类的构造函数,从而委托父类完成一些初始化的工作。
    		访问父类的成员:如果子类重写了父类的某个方法,可以通过使用super关键字来引用父类的方法实现。
    		
    --重写与重载的区别
    	1.重写是子类继承父类,重写父类方法;重载是同一个类有多个同名方法,但参数不同。
    	2.重写只能有一个/一对方法产生关系,重载是多个方法之间的关系。
    	3.重写要求同名同参同返一大一小,重载要求同名不同参返回值无关。
    	4.重写调用方法体根据对象类型决定,重载根据调用时的实参形参决定。
    	
    --多态
    多态是指同一个操作作用在不同对象时,会有不同的作用。
    	运行时多态:程序中定义的对象引用所指向的具体类型在运行期间才确定                                                      继承
        		  重写
        		  向上转型(父类引用指向子类对象)
    	编译时多态:方法重载
    

    Object通用方法

    equals();
    hashCode();
    clone();
    toString();
    getClass();
    finalize();
    notify();
    notifyAll();
    wait();
    
    --重写了equals方法为什么还要重写hashcode
    假设两个对象,重写了其equals方法,其相等条件是属性相等,就返回true。如果不重写hashcode方法,其返回的依然是两个对象的内存地址值,必然不相等。这就出现了equals方法相等,但是hashcode不相等的情况。这不符合hashcode的规则。
    --浅拷贝和深拷贝
    	拷贝对象和原始对象的引用类型引用同一个对象。
    	拷贝对象和原始对象的引用类型引用不同对象。
    

    关键字

    --final
    	数据:对于基本类型,final 使数值不变;
    		 对于引用类型,final 使引用不变,也就不能引用其它对象,但是被引用的对象本身是可以修改的。
    	方法:声明方法不能被子类重写。
    	类:声明类不允许被继承。
    	
    --static
    	静态变量:静态变量又称为类变量,也就是说这个变量属于类的,类所有的实例都共享静态变量,可以直接通过类名来
    			访问它。静态变量在内存中只存在一份。
    			实例变量:每创建一个实例就会产生一个实例变量,它与该实例同生共死。
    	静态方法:静态方法在类加载的时候就存在了,不依赖于任何实例。所以静态方法必须有实现,即它不能是抽象方法。
    			只能访问所属类的静态字段和静态方法,方法中不能有 this 和 super 关键字。
    	静态语句块:静态语句块在类初始化时运行一次
    	静态内部类:非静态内部类依赖于外部类的实例,而静态内部类不需要。
    	静态导包:在使用静态变量和方法时不用再指明 ClassName,从而简化代码,但可读性大大降低。
    	初始化顺序:静态变量和静态语句块优先于实例变量和普通语句块,静态变量和静态语句块的初始化顺序取决于它们在代			   码中的顺序。最后才是构造函数的初始化。
    	
    	父类(静态变量、静态语句块)
    	子类(静态变量、静态语句块)
    	父类(实例变量、普通语句块)
    	父类(构造函数)
    	子类(实例变量、普通语句块)
    	子类(构造函数)
    

    反射

    每个类都有一个Class对象,包含了与类有关的信息。当编译一个新类时,会产生一个同名的.class文件,该文件内
    容保存着Class对象。类加载相当于 Class 对象的加载,类在第一次使用时才动态加载到 JVM 中。也可以使用
    Class.forName("com.mysql.jdbc.Driver") 这种方式来控制类的加载,该方法会返回一个 Class 对象。
    反射可以提供运行时的类信息,并且这个类可以在运行时才加载进来,甚至在编译时期该类的 .class 不存在也可以加
    载进来。
    

    异常

  • 相关阅读:
    柯西恒等式 FPGA中信号的跨时钟域处理模板(二)
    OSPF
    Windows多网卡路由设置
    使用线程时需要注意的地方
    dicom 影像通信(scu、scp)的c-echo、c-store、c-find、c-move
    关于python3没有numpy和matplotlib库怎么办
    使用centos6.5时的几个小问题
    关于用Apache Beam跑WordCount
    MarkdownPad2的安装、破解和汉化
    安装Photoshop CS64
  • 原文地址:https://www.cnblogs.com/yzhengy/p/13214337.html
Copyright © 2011-2022 走看看