Java 核心技术笔记1

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_28666193/article/details/85017472

对象

  • 所有对象存储在堆中,对象名只是一个引用;
  • 一般访问器中不返回引用的对象,需要时可进行克隆,Object的clone的方法
  • Java方法总是值引用的,对象也只传递其引用的拷贝值;
  • Java只有单继承,其中子类对象就是父类对象,可以用子类初始化父类,反过来需要强制转化,但一般不可用。
  • 每个对象都有一个散列码,String对象的散列码是基于内容的——即内容一致时其哈希码一致;其他的则是由Object对象导出的随机hash值;散列码即为对象的存储地址,重新定义equals方法后必须重新定义hashcode方法;
  • equals函数:①参数是Object类型的一个other,可以重写object的;②判断是否是同一对象;③判断other是否是null;④判断是不是同属一个类,getClass或instanceof;⑤将other转化为当前类;⑥进行实域的比较;子类重写时要调用父类的equals
  • 自动装箱和拆箱之间,基本类型有一个比较小的范围,如int是±128;装箱和拆箱是编译器认可的,与虚拟机无关;Integer、Float等这些基本类型类是final的,其值不可更改;
  • 参数数量可变的方法:参数类型… 参数名,如function(double... args)
  • 枚举中比较两个类型是否相等时,只需直接“==”即可比较,不需要用equals;枚举类中的ordinal方法返回枚举值的位置

反射

动态编写Java程序,多应用与JavaBeans中;将能够分析类能力的程序称为反射reflective。作用:①在运行中分析类的能力;②在运行中查看对象,如编写toString方法供所有类使用;③实现通用数组操作代码;④利用Method对象,类似 与C++中的函数指针。一般是工具构造者使用

  • Class类:程序运行期间,Java运行系统始终为所有的对象维护一个运行时的类型标识;这个信息跟踪着每个对象所属的类,这些信息保存在Class中。
  • A.getClass().newInstance():构造一个同类对象
  • Class中具有几个分析类的静态方法:getFields,getMethods,getConstructors分别返回类的public实例域、方法、和构造器数组,也包含了超类的公有成员;getDeclaredFields、getDeclaredMethods,getDeclaredConstructors分别返回类中声明的包括私有、保护的所有成员,但不包括超类的实例和成员。
  • 调用反射方法时,invoke中第一个参数若是静态对象则为null;

接口

  • 接口中的所有方法自动为public,可以省略关键字,在实现接口时必须提供关键字public;接口是类的一组特定需求
  • 接口中的域会自动为public static final;
  • 克隆:如果直接使用clone()函数,Object类中clone函数(是protected的)只对当前对象的所有基本域和方法进行拷贝,如果引用了其他对象域,则还是一个引用,即只是一个浅拷贝;若浅拷贝中只涉及一些不变的对象,则一般不影响克隆的对象;但是要浅拷贝中涉及到子对象的变更操作,则会在两个副本中同时受影响。
  • 深拷贝需要实现cloneable接口,使用public重写clone方法;
  • cloneable接口只是作为一个标记接口,与Object中的clone没有关系;
  • 即使浅拷贝能够满足要求,也建议实现cloneable接口,并在clone方法中实现超类的clone方法;

内部类

  • 声明定义在类中,可以访问外部类的数据域
  • 内部类可以用private声明,局部内部类只能为默认的修饰符
  • 内部类不能在外部类的静态方法中new,可以使用外部对象.new 的方式进行;
  • 匿名内部类无类名,也就没有构造器;一般将构造器参数传递给超类进行构造,
  • 内部类可以声明为static的

异常

  • Throwable分为Error和Exception,Exception分为IOException和RuntimeException;RuntimeException和Error是未检查unchecked异常,另外为已检查checked异常;
  • 编译器检查是否为所有的已检查异常声明异常处理器;
  • 使用异常的技巧:① 简单检查不能被异常处理替代,异常处理要耗费的时间长一点;② 不要过分细化异常;③ 利用异常层次结构;④ 不羞于传递异常,不压制异常;⑤ 早抛出,晚捕获
  • Java中错误处理:异常、日志、断言

集合

  • 队列:循环数组或链表
  • Java中的所有链表都是双向链接的。

多线程

  • 线程优先级:子线程默认继承父进程的优先级。每当线程调度器有机会选择新线程时优先选择优先级较高的,但是线程的优先级是高度依赖于宿主机的操作系统的。

  • 线程安全的集合:

流和文件

  • 抽象类InputStream、OutputStream,分别提供了读写操作,并且在读写过程将会被阻塞。
  • 二进制文件格式IO效率高,但不便于可读性。

猜你喜欢

转载自blog.csdn.net/qq_28666193/article/details/85017472