1. Java数据类型
定义: Java语言是强类型语言,对于每一种数据都定义了明确的具体数据类型,在内存中分配了不同大小的内存空间。
分类:
- 基本数据类型
- 数值型
- 整数类型(byte, short, int, long)
- 浮点类型(float, double)
- 字符型(char)
- 布尔型(boolean)
- 数值型
- 引用数据类型
- 类(class)
- 接口(interface)
- 数组([])
类型 | 类型名称 | 关键字 | 占用内存 | 取值范围 | 作为成员变量的默认值 |
---|---|---|---|---|---|
整型 | 字节型 | byte | 1字节 | -128~127 | 0 |
整型 | 短整型 | short | 2字节 | -2^15 ~ 2^15-1 | 0 |
整型 | 整型 | int | 4字节 | -2^31 ~ 2^31 -1 | 0 |
整型 | 长整型 | long | 8字节 | -2^63 ~ 2^63 -1 | 0L |
浮点型 | 单精度浮点型 | float | 4字节 | -3.403E38 ~ 3.403E38 | 0.0f |
浮点型 | 双精度浮点型 | double | 8字节 | -1.798E308 ~ 1.798E308 | 0.0d |
字符型 | 字符型 | char | 4字节 | -3.403E38 ~ 3.403E38 | ‘\u0000’ |
布尔型 | 布尔型 | boolan | 1字节 | true 或 false | false |
2. switch是否能作用在byte上,是否能作用在long上,是否能作用在String上
在Java5以前,switch(expr)中,expr只能是 btye, short, char, int。从Java5开始,java中引入了枚举类型,expr可以是enum类型。从Java7开始,expr还可以是字符串,但是长整型目前还不可以。
3. Math.round(11.5)等于多少?Math.round(-11.5)等于多少?
Math.round(11.5)返回12,Math.round(-11.5)返回-11
4. final, finally, finalize区别
- fianl可以修饰类、变量、方法、修饰类表示该类不能被继承、修饰方法表示该方法不能被重写,修饰变量表示该变量不能被修改,是常量。
- finally一般作用于try-catch代码块中,在处理异常的时候,通常将一定要执行的代码方法放在finally代码块中,表示不管是否出现异常,都会执行该代码,一般存放一些关闭资源的代码
- finalize是一个方法,属于Object类的一个方法。而Object类是所有类的父类,也叫作祖父类,该方法一般由垃圾回收器来调用。当我们调用System.gc()方法的时候,又垃圾回收器调用finalize(),回收垃圾,一个对象是否可被回收的最后判断。
5. 如何跳出多重嵌套循环
在Java中,想要跳出多重循环,可以在外面的循环语句前定义一个标号,然后在里层循环体的代码中使用带标号的break语句,即可以跳出外层循环。
public static void main(String[] args){
ok: for(int i=0;i<100;i++){
for(int j=0;j<1000;j++){
if(j==100)
break ok;
}
}
}
6. this和super关键字
this 和 super都是对 对象 的指向。this指向当前对象,当前对象本身的一个指针。
this 用法:
- 普通的直接引用,this相当于指向当前对象本身。
- 形参与成员名字重名,用this来区分
public Person(String name){
this.name = name;
}
- 引用本类的构造函数
class Person{
private String name;
private int age;
public Person(){}
public Person(String name){
this.name = name;
}
public Person(String name,int age){
this(name);
this.age = age;
}
}
super可以理解为指向自己超类(父类)对象的一个指针,而这个超类指的是离自己最近的一个父类。
super用法:
- 普通的直接引用
- 子类中的成员变量或方法与父类中的成员变量或方法同名时,用super进行分区
- 引用父类构造函数
super(参数):调用父类中的某一个构造函数(应该为构造函数中的第一条语句)
this(参数):调用本类中另一种形式的构造函数(应该为构造函数中的第一条语句)
this与super的区别:
- super:它引用当前对象的直接父类中的成员(用来访问直接父类中成员数据或函数,基类与派生类中有相同成员定义时,super.变量名 super.成员函数名)
- this:它代表当前对象名(在程序中易产生二义性,应使用this来指明当前对象,如果函数的形参与类中的成员变量名相同时,这时候就需要this来指明成员变量名)
- super()和this()类似,区别是super()在子类中调用父类的构造方法,this()在本来内调用本类的其他构造方法
- super()和this()均需要放在构造方法的第一行
- 尽管可以用this来调用一个构造函数,但却不能调用两个
- this和super不能同时出现在一个构造函数里,因为this必然会调用其他构造函数,其他构造函数必然也会有super语句的存在,所以同一个构造函数里面有相同的语句,就失去了语句的意义,编译也不会通过
- this()和super()都指向对象,所以均不可以在static环境中使用,包括static变量,static方法,static语句块。
- 从本质上讲,this是一个指向本身的指针,然而super是一个java关键字
7. static关键字
static属于类,修饰的变量叫做类变量,也叫作静态成员变量。static关键字有一个比较关键的作用是用来形成静态代码块以优化程序性能。static块可以置于类中的任何地方,类中可以有多个static块。在类初次加载的时候,会按照static块的顺序来执行每个static块,并且只会执行一次。为什么说static块可以用来优化程序性能,是因为它的特性:只会在类加载的时候执行一次。因此很多时候,只需要执行一次的初始化操作就会放在static代码块中进行执行。
static独特地方:
- 被static修饰的变量或者方法是独立于该类的任何对象,也就是说这些变量和方法不属于任何一个实例对象,而是被类的实例对象所共享(属于类)。
- 在该类被第一次加载的时候,就会去加载被static修饰的部分,而且只在类第一次加载时候进行初始化,注意这是第一次用就要初始化,后面根据需求可以再次赋值!
- static变量值在类加载的时候分配空间,以后创建类对象的时候不会重新分配。赋值的话,是可以在任意时刻进行
- 被static修饰的变量或者方法时先于对象存在的,也就是说当一个类加载完毕之后,即便没有创建实例对象,也可以去访问。
static应用:
因为static是属于类的,因此如果某个成员变量是被所有对象所共享的,那么这个成员变量就应该定义为静态变量。
- 修饰成员变量
- 修饰成员方法
- 静态代码块
- 修饰类(只能修饰内部类,也就是静态内部类)
- 静态导包
static注意事项:
- 静态只能访问静态
- 非静态既可以访问非静态的,也可以访问静态的
8. 面向对象的五大基本原则
1.单一职责原则 SRP(Single Responsibility Principle)
类的功能要单一,不能保罗万象,跟杂货铺一样
2.开放封闭原则 OCP(Open-Close Principle)
一个模块对于拓展是开放的,对于修改是封闭的,想要增加功能热烈欢迎,想要修改,一万个不乐意
3.里氏替换原则 LSP(The Liskov Substitution Principle)
子类可以替换父类出现在父类能够出现的任何地方。比如你能代表你爸去你奶奶家干活!
4.依赖倒置原则 DIP(The Dependency Inversion Principle)
高层次的模块不应该依赖于低层次的模块,他们都应该依赖于抽象。抽象不应该依赖于具体实现,具体实现应该依赖于抽象。就是你出国要说你是中国人,而不能说你是哪个村的。中国人就是抽象,xx省的人是具体的实现。
5.接口分离原则 ISP(The Interface Segregation Principle)
设计时采用多个与特定客户类有关的接口比采用一个通用的接口要好。比如手机有看视频,拍照,上网,打电话和发短信等功能。就应该把这些功能拆分成不同的接口,比放在一起要好!
评论区