代码改变世界

JAVA编程思想学习笔记2-chap4-6-斗之气2段

2019-02-12 21:16  剑动情缥缈  阅读(233)  评论(0编辑  收藏  举报

1.foreach:只能用于数组与容器

2.this指针:内部有个指针指向自己

3.super指针:内部有个指针指向父类部分

4.方法存放于代码区:方法调用时,a.fun()可能会被转换为fun(a),以此将对象传递给函数,同时方法知道调用者是对象a

5.static方法:没有this指针

6.finalize():GC回收前先调用一次本方法,下次才进行内存回收,可以用于终结条件(如:判断文件是否安全关闭)

7.GC:找到存活对象

 ①引用计数:无法解决对象互相引用问题

 ②从堆栈或者静态存储区进行扫描:引用链--由于访问过的对象为活的,同时形成了树状结构,不会重复计算已引用对象,同时找到的对象必定存活,没有互相引用问题

8.GC:处理存活对象

 ①停止-复制:复制对象到另一个堆,并保持内存连续,未被复制的对象为垃圾(复制后引用需要修正)

  缺点:①需要维护两个堆,造成资源浪费②程序稳定后,仍然需要复制,造成性能低

 ②标记-清扫:根据思路6-②,标记活对象,标记完,释放死对象,整理活对象,适用于垃圾较少的时刻(程序稳定)

 ③自适应、分代的、停止-复制、标记-清扫式垃圾回收器

  JVM监视GC效率:效率低时候采用标记清扫,碎片多采用停止-复制

9.JIT编译器技术:将程序全部或部分编译为本地机器码(本为JVM功能)以增加效率

10.对象创建过程:

 ①定位class文件;

 ②载入class文件,创建Class对象,执行静态初始化块或者域静态初始化;---证明静态成员内存并不是位于堆区

 ③在堆上分配存储空间;

 ④内存清0;

 ⑤按域声明顺序执行域初始化动作;

 ⑥执行构造器;

11.classpath:指定类目录

12.可变参数列表:参数类型需要统一


13.java会为每个class生成一个.class文件

14.package与import:对命名空间进行切割

15.通过import不同的package,可以实现条件编译,如开发与测试版本

16.单例模式(此处恶汉式为线程安全)

 ①只有一个默认构造器,并且为private

 ②类有一个static对象

 ③提供getInstance方法,返回此对象的引用

public class SingleObject {
 
   //创建 SingleObject 的一个对象
   private static SingleObject instance = new SingleObject();
 
   //让构造函数为 private,这样该类就不会被实例化
   private SingleObject(){}
 
   //获取唯一可用的对象
   public static SingleObject getInstance(){
      return instance;
   }
 
   public void showMessage(){
      System.out.println("Hello World!");
   }
}
View Code
public class SingletonPatternDemo {
   public static void main(String[] args) {
 
      //不合法的构造函数
      //编译时错误:构造函数 SingleObject() 是不可见的
      //SingleObject object = new SingleObject();
 
      //获取唯一可用的对象
      SingleObject object = SingleObject.getInstance();
 
      //显示消息
      object.showMessage();
   }
}
View Code

 懒汉式线程安全版本见:

https://blog.csdn.net/cselmu9/article/details/51366946