Java基础知识点总结

111 阅读6分钟

1、基本数据类型

基本数据类型包括整形、浮点型、字符型、布尔型,其中布尔型占1个字节.

可能问到的问题:

1、switch(expr)的表达式中可以是哪种基本数据类型

switch(expr)中,expr可以是char、byte、short、int等类型。同时expr还可以是enum(枚举类型)及String(字符串)。

2、基本数据类型转换

小转大,自动!自动类型转换(也叫隐式类型转换)

大转小,强转!强制类型转换(也叫显式类型转换)

byte,short,char → int → long → float → double

byte,short,char之间不会相互转换,他们在计算时首先会转换为int类型。

这里的小和大,指的是基本数据类型的范围大小。

2、访问修饰符及关键字

可能问到的问题:

1、final finally finalize区别

final:可以修饰类、变量、方法;修饰类表示该类不能被继承、修饰方法表示该方法不能被重写、修饰变量表示该变量是一个常量,不能被重新赋值。

finally:一般作用在try-catch代码块中,在处理异常的时候,通常我们将一定要执行的代码方法finally代码块中,表示不管是否出现异常,该代码块都会执行,一般用来存放一些关闭资源的代码。

finalize:属于Object类的一个方法,而Object类是所有类的父类,该方法一般由垃圾回收器来调用,当我们调用System.gc() 方法的时候,由垃圾回收器调用finalize(),回收垃圾。

2、this用法、super用法及他们之间的区别

**this用法:**指向当前对象

在构造函数中,形参与成员名字重名,用this来区分;

引用本类的构造函数,如:this(name);

**super用法:**指向当前对象的父类引用

一般用于在子类构造器中调用父类构造器,super(参数)

区别:

1、super()在子类中调用父类的构造方法,this()在本类内调用本类的其它构造方法。

2、this和super不能同时出现在一个构造函数里面,因为this必然会调用其它的构造函数,其它的构造函数必然也会有super语句的存在,编译不通过。

3、this()和super()都指的是对象,所以,均不可以在static环境中使用。(共同点)

3、static关键字的应用场景

创建独立于具体对象的域变量或者方法。其次,用来形成静态代码块以优化程序性能。

修饰成员变量 、修饰成员方法、静态代码块、修饰内部类(静态内部类)、静态导包 

3、 面向对象

1、面向对象的特征?描述一下。

**继承:**使用已存在的类的定义作为基础建立新类的技术,新类的定义可以增加新的数据或新的功能,也可以用父类的功能,但不能选择性地继承父类(继承即继承所有)。继承是多态的前提。

**封装:**隐藏对象的属性和实现细节,仅对外提供公共访问方式,将变化隔离,便于使用,提高复用性和安全性。

**多态性:**父类或接口定义的引用变量可以指向子类或具体实现类的实例对象。提高了程序的拓展性。

多态机制:一个引用变量倒底会指向哪个类的实例对象,该引用变量发出的方法调用到底是哪个类中实现的方法,必须在由程序运行期间才能决定。

**多态的实现:**继承、重写、向上转型。

2、面向对象五大基本原则是什么?

单一职责原则:顾名思义。

开放封闭原则:对于拓展是开放的,对于修改是封闭的。

里式替换原则:子类可以替换父类出现的位置。

依赖倒置原则:高层次的模块不应该依赖于低层次的模块,他们都应该依赖于抽象。

接口分离原则:尽可能多的创建接口,让接口也具备单一职责。

3、抽象类和接口的异同

同:

  • 接口和抽象类都不能实例化
  • 都位于继承的顶端,用于被其他实现或继承
  • 都包含抽象方法

异:

  • 声明方式和实现不同(abstract,interface)&&(extends、implements)

  • 抽象类可以有构造器

  • 抽象类中的方法可以是任意访问修饰符,接口(public 、static、final默认)

  • 一个类只能继承一个抽象类,但可以实现多个接口

两者的选择?

  • 行为模型,优先选用接口。
  • 需要定义子类的行为,又要为子类提供通用的功能,则选用抽象类

4、描述四种内部类

  • 静态内部类:可以访问外部类所有的静态变量,new Outer.StaticInner();
  • 成员内部类:成员内部类可以访问外部类所有的变量和方法,包括静态和非静态,私有和公有。Outer outer = new Outer(); Outer.Inner inner = outer.new Inner();
  • 局部内部类:定义在实例方法中,可以访问外部类的所有变量和方法,定义在静态方法中的局部类只能访问外部类的静态变量和方法。在对应方法内,new 内部类()
  • 匿名内部类:没有名字的内部类,匿名内部类必须继承一个抽象类或者实现一个接口。

内部类的优点:

  • 一个内部类对象可以访问创建它的外部类对象的内容,包括私有数据!
  • 内部类不为同一包的其他类所见,具有很好的封装性;
  • 内部类有效实现了“多重继承”,优化 java 单继承的缺陷。

局部内部类和匿名内部类访问局部变量的时候,为什么变量必须要加上final?

  • 局部变量直接存储在栈中,当方法执行结束后,非final的局部变量就被销毁。而局部内部类对局部变量的引用依然存在,如果局部内部类要调用局部变量时,就会出错。

5、重写和重载的区别

  • 方法的重载和重写都是实现多态的方式,区别在于前者实现的是编译时的多态性,而后者实现的是运行时的多态性。

重载:发生在同一个类中的两个方法中,方法名相同参数列表不同(参数类型不同、个数不同、顺序不同)

重写:发生在父子类中,方法名、参数列表必须相同,返回值小于等于父类,抛出的异常小于等于父类,访问修饰符大于等于父类(里氏代换原则)