Java基础

100 阅读3分钟

Object类包含的方法

1.clone()

  浅拷贝一个对象

2.   equals(Object obj)

  比较目标对象是否相等,equals返回true,hashCode一定相等

3.hashCode() 

   返回当前对象的hashCode值,这个值是一个整数范围内的(-2^31 ~ 2^31 - 1)数字    

4.getClass()

   返回一个Class对象,一般用于反射

   Object.getClass()     需要有对象

   类名.class                 需要导类名对应的包

  Class.forName()       反射一般使用第三种方式获得Class对象

5.finalize()

  一般用于可达性分析的垃圾回收机制,判断对象是否被回收。一般系统调用,不重写。

6. toString()

 返回一串String类型的 类名@地址

7. notify()、notifyAll()、wait()、wait(long time) 线程间通信

wait()、wait(long time)用来阻塞线程

notify()、notifyAll() 用来唤醒被阻塞的线程

String,StringBuffer和StringBuilder的区别

  • String: 底层为不可变数组Char[],每次修改都会生成新的String对象,"abc"存储在常量池

  • StringBuilder: 可变对象,append的时候调用Arrays.copyOf改变数组,线程不安全,效率高

  • StringBuffer:可变对象,append的时候也是调用Arrays.copyOf改变数组,synchronized修饰方法线程安全,效率高

int、Integer

  • int基本数据类型

  • Integer: int的包装类,缓存-128 ~ 127的值 

  •  Integer num1 = 100; Integer num2 = 100;    num1 == num2    true

  •  Integer num3 = 128; Integer num4 = 128;   num3 == num4   false

Java三大特性

  •  封装:将类的信息隐藏在类的内部,不允许外部直接访问,而是通过该类提供的方法对隐藏信息操作和访问。

  • 继承:将多个相同的属性和方法提取出来变为父类,子类通过继承实现代码复用。(单继承)

  • 多态:对父类的方法进行重写,重载,已达到不同的实现。

Java类的加载顺序

静态属性、静态代码块->成员变量、代码块->构造方法(有继承关系的都从父类优先加载)

深拷贝、浅拷贝

  • 浅拷贝:基本类型复制,引用类型只复制了引用,新对象引用类型对象和原来的一样,修改会同步赢旧对象

  • 深拷贝:所有的属性全部复制,复制出来的新对象修改任何属性不会影响旧对象。

反射

通过获取一个类的Class对象,获取****Class中的方法,变量,构造函数等映射成相应的Method、Filed、Constructor等类,这些类提供了丰富的方法可以被我们所使用。

获取Class对象的方法:

Object.getClass() 需要有对象

类名.class 需要导类名对应的包

Class.forName() 反射一般使用第三种方式获得Class对象

注解

为元素打上某种标记,用于编译、运行时进行解析,使用。

泛型

泛型的本质是参数化类型,在不创建新的类型的情况下,通过泛型指定不同的类型来控制形参具体限制的类型。也就是说在泛型的使用中,操作的数据类型被指定为一个参数,这种参数可以被用在类,接口和方法中,分别被称为泛型类,泛型接口和泛型方法。

泛型是java中的一种语法糖,能够在代码编写的时候起到类型检测的作用,但是虚拟机是不支持这些语法的。

泛型的优点:

1.类型安全,避免类型的强转。

2.提高了代码的可读性,不必要等到运行的时候才去强制转换。

什么是类型擦除?

不管泛型的类型传入哪一种类型实参,对于java来说,都会被当成同一类处理,在内存中也只占用一块空间,通俗一点来说,就是泛型之作用于代码编译阶段,在编译过程中,对于正确检验泛型结果后,JVM是不会存储泛型信息的,会将泛型的信息擦除,也就是说,成功编译过后的class文件时不包含任何泛型信息的。