JAVA学习中的知识点
1.继承关系中的子类实例化执行过程详解
父类Animal,子类Cat,则Cat cat = new Cat()的执行顺序
实例化子类的类加载执行顺序:父类的静态属性及其静态代码块(从上到下顺序执行)一>子类的静态属性及其静态代码块一>子类的构造方法(但不执行里面的代码)一>父类的构造方法(但不执行里面的代码)一>Object类一>父类的非静态属性一>父类的构造代码块一>父类构造方法里的代码一>子类的构造代码块一>子类构造方法里的代码
注:
当执行Cat cat = new Cat(name,age)时,如果在子类的带参构造方法中没有显式标注的话,即super(name,age)时,仍然会执行父类的无参构造方法,如果父类无参构造方法没有,则直接编译报错。
2.包装类
缓冲区(对象池)
除了Double和Float,其他包装类都有缓冲区(-128~127之间的数)的概念,即:
Integer i1 = 100;
Integer i2 = 100;
则i1 == i2是true的,但是大于127或者小于-128的数则不对。
3.多态
多态分为编译时多态和运行时多态,编译时多态指的是对象引用本类的实例,方法重载是编译时多态的体现;运行时多态指在继承中,父类对象引用子类实例(父类 f = new 子类()),父类对象会调用子类中重写的方法,无法调用到子类独有的方法。
4.List、Set、Queue(collection)以及Map
List(ArrayList、LinkedList)
- list是有序的且可以重复的集合,它可以直接通过get方法获取内容,当然也可以通过迭代器Iterator获取。
Set(HashSet)
-
set是无序的且不可以重复的集合,它不可以通过get方法获取,只能通过增强for循环或者迭代器方式获取。这里的不可重复不是指新增重复的内容后编译报错,而是新增重复的内容无法生效。
-
如果set里保存的是对象,即使对象的内容一样也不会当作是重复内容,只有重写equals方法才可以。
List<E> list = new ArrayList<>(); Set<E> set = new HashSet<>(); Iterator it = list/set.iterator(); while (it.hasNext()){ System.out.println(it.next()); } Set<E> set = new HashSet<>(); for (Object it:set) { System.out.println(it); }
Queue(LinkedList)
Map(HashMap)
-
无序的键值对。
-
Key值不允许重复,但Value值可以重复。Key和Value可以为null值,但Key只能存在一个null,而Value可以存在多个null。
-
当添加Key值重复的数据时,实际上相当于修改操作,保留的是后面新增的内容。
Map<String,String> map = new HashMap<>(); Set<Map.Entry<String,String>> set = map.entrySet(); for (Map.Entry<String,String> entry:set) { System.out.println(entry.getKey()+" "+entry.getValue()); }
5.线程
线程的实现方式分为1.继承Thread类、2.实现Runnable接口,推荐使用第二种方式。
这两种方式的区别:
- java由于不支持多继承,第一种方式不利于代码的健壮性;
- 实现Runnable接口只有run()一个重写方法,而继承Thread类的时候有多个方法可供重写使用;