Java编程思想

June 22, 2017
java 读书笔记

  1. Socket readline() 自动阻塞
  2. public表示紧随其后的元素对任何人都是可用的,private表示除类型创建者和类型的内部方法之外的任何人都不能访问的元素(private就像你与客户端之间的一堵墙),protected关键字与private相当,差别仅在于继承的类可以访问protected成员,但是不能访问private成员,java还有一种默认的访问权限,当没有使用前面提到的任何访问指定词时,它将发挥作用。这种权限通常被称为包访问权限,因为在这种权限下,类可以访问在同一个包中的其他类的成员,但是在包之外,这些成员如同制定了private一样。
  3. java中的变量都是静态绑定的,方法的话只有构造函数,static和final(所有private默认是final的)是静态绑定的。
  4. 多态:父类的引用指向子类对象,父类引用调用子类中没有的方法时会去父类中找(如果子类中有直接调用子类,动态绑定),父类引用调用成员变量时,去调用父类的成员变量而不是子类(静态绑定)。
  5. 成员变量不初始化的话,虚拟机会自动为其初始化;但是,局部变量不初始化的话,虚拟机不会自动为其初始化(报错)。
  6. switch语句可以多层叠加,也就是说多个备选条件紧靠,其中没有break的中断,那么符合这些叠加的其中任何一个元素就可以执行最后面那个case以break结尾的选项。比方物体一直滑落,直到遇到break停止。之前经过的所有选项都能被叠加在一起,作为一个判断条件。
  7. 子类通过new语句建立新对象时,默认先构造父类的默认构造器。只能在构造器中调用本类的其他构造器(不能在方法中调用),而且只能调用一次且是在该构造器的第一行调用。
  8. new某个类对象时,首先初始化成员变量,其次初始化该构造器内的变量。另外是先初始化静态对象(如果它们尚未因前面的对象创建过程而被初始化),而后是“非静态”对象。
  9. static关键字不能应用于局部变量,只能应用于静态域。
  10. static方法中不能使用this,super关键字
  11. JAVA接口中对于字段会加上隐式的public,final,static,方法会加上public,abstract.
  12. is-a 继承 has-a 组合
  13. 类的信息加载一次后被多次重用,static变量在类加载是被初始化和赋值
  14. 类中所有private方法,都隐式的指定为final.
  15. final类中的方法全部隐式的定义为final方法.
  16. 将方法声明为final,可以关闭该方法的后期绑定.
  17. 在父类构造器中调用被子类覆盖的方法时,方法中所涉及到的子类变量,无论子类为该变量的初始化值为多少,在父类中该变量的值都是零/null
  18. 子类对象的堆内存中包含父类的对象
  19. 栈有一个很重要的特殊性,就是存在栈中的数据可以共享。
  20. string immutable 特性
  21. 当继承某个具体类,与此同时实现某些接口时,那个具体类必须放在前面,否则编译错误。
  22. Arrays.asList不会自动向上转型,泛型中的类型为什么类型它便只认那个类型,但是Collections.addAll是可以的。
  23. set集合存储的元素不能重复,并且没有顺序,TreeSet子集合按照所存储元素的升序排列,LinkedHashSet按照存储的顺序保存元素。
  24. JAVA中的标签必须放在循环之前,且中间不能有其他语句。例如:tag:for或while或do–while
  25. Class genericNumberClass = int.class 虽然Integer继承自Number,但是他无法工作,因为Integer Class对象不是NumberClass对象的子类
  26. Class<? Super FancyToy> = xxx.getSuperClass(); <>里面不能填写确切的类型时能这样,即使你知道父类确切的类型也不行。
  27. final字段成员 允许在构造函数中为其赋值
  28. 类型推断只对赋值操作有效,其他时候并不起作用(只能手动的显式表明类型)。
  29. 方向:输入流/输出流 功能:节点流/处理流(转换流、缓冲流、数据流、Print流、Object流) 数据类型:字节流/字符流
  30. 加了synchronized关键字的方法不允许多进程去访问它,此时同一个对象中没加synchronized的方法可以被其他线程访问,但是如果加了synchronized关键字也就不能了。以上都是针对某一个特定对象来谈的这件事。某一个方法加了synchronized关键字其实就是针对调用这个方法的对象而言。这个对象里面的方法加了synchronized关键字的其实都加了锁,没加的就是没有加锁。这里的锁是同一个线程的同一个锁。
  31. wait()方法是当某个线程获得了锁(调用了有synchronized关键字的方法或者给某个对象加锁)之后才会等待。wait()和synchronied必须一一对应,notify()方法是叫醒在该对象是等待的线程.
  32. 匿名内部类可以实现多个接口以及扩展某个类。
  33. 局部变量没有访问权限修饰符!
comments powered by Disqus