1.final关键字:
修饰类,类不可以被继承;
修饰方法,方法不能被重写,可以继承;
修饰变量,变量不可以被修改;
2.static关键字:
被static修饰变成了静态常量,被多个对象同时共享,静态常量改变,所有的对象中的静态常量全部跟着改变。
static修饰方法,可以根据类名.方法名调用
static修饰的代码块成为静态代码块,Java加载类的时候会加载静态代码块,但只加载一次。
3.面向对象特点:
封装:隐藏一切具体实现的细节,只向外界提供接口;
继承:从已经存在的类中派生出新的类,提供信息的是符类,新生成的类是子类
多态:实现前提:继承,重写,向上造型
解释:允许不同的子类对象对同一消息做出不同响应,(同样的对象调用同样的方法做出了不同分响应)多态分为编译时多态和运行时多态。
4.子类继承符类的构造方法什么时候会调用:
在子类new对象的时候会先调用父类对象的构造方法;
5.什么是Java的跨平台性:
Java在源码编译结束后,执行编译功能,将源码送到编译器中编译成只面向Java虚拟机的.class文件,Java虚拟机(jvm)通过解释器,将Java字节码文件转换为不同平台需要的代码程序。
6.JDK、JRE、JVM有什么区别
JDK:开发工具包 Java虚拟机+核心类库 +编译工具
JRE:Java虚拟机+核心类库 是运行环境
JVM:Java虚拟机
7.abstract class和interface有什么区别?
abstract class称为抽象类。
什么是抽象类?
我们把用abstract修饰的方法,称为抽象方法。抽象方法没有方法体。而我们把含有抽象方法的类称为抽象类,必须用abstract修饰,这就是 abstract class
interface称为接口
什么是接口?
接口就是特殊的抽象类,里面所有的方法都是抽象方法,没有一般方法。但是在jdk1.8版本后推出了接口中也可以有一般方法,需要用default ,static修饰
二者的区别:
- 实现:抽象类的子类使用 extends 来继承;接口必须使用 implements 来实现接口。
- 构造函数:抽象类可以有构造函数;接口不能有。
- main 方法:抽象类可以有 main 方法,并且我们能运行它;接口不能有 main 方法。
- 实现数量:类可以实现很多个接口;但是只能继承一个抽象类。
- 访问修饰符:接口中的方法默认使用 public 修饰;抽象类中的方法可以是任意访问修饰符。
8.重写和重载的区别
方法的重载和重写都是多态的实现方式,区别在于重载是编译时多态,重写是运行时多态
重载发生在同一个类中,同名的方法有着不同的参数列表被视为重载
重写发生在子类与父类之间,重写要求子类重写方法与父类的被重写 方法有相同的返回值类型,访问权限大于父类方法
区别:
1.参数列表
重写要求参数列表与被重写方法完全一致
重载要求参数列表中参数的顺序、类型、个数完全不同
2.访问权限,方法的修饰符
重写要求方法权限大于等于被重写方法
重载要求方法名相同即可,没有权限限制
3.异常
重写不能抛出父类没有的一般异常
只能抛出非运行时异常
4.前提
重写的前提是继承,有父子级关系
重载没有前提
9. ==和equals()的区别?
对于关系操作符 ==:
- 若操作数的类型是基本数据类型,则该关系操作符判断的是左右两边操作数的值是否相等
- 若操作数的类型是引用数据类型,则该关系操作符判断的是左右两边操作数的内存地址是否相同。也就是说,若此时返回true,则该操作符作用的一定是同一个对象。
使用equals方法,内部实现分为三个步骤:
- 先 比较引用是否相同(是否为同一对象),
- 再 判断类型是否一致(是否为同一类型),
- 最后 比较内容是否一致
Java 中所有内置的类的 equals 方法的实现步骤均是如此,特别是诸如 Integer,Double 等包装器类。
对于 equals 方法:
- 其本意 是 比较两个对象的 content 是否相同
- 必要的时候,我们需要重写该方法,避免违背本意,且要遵循上述原则(一致性、传递性、对称性、自反性)
-
任何情况下,x.equals(null)【应使用关系比较符 ==】,永远返回是“false”;x.equals(和x不同类型的对象)永远返回是“false” 所以我们比较对象的时候一般都是先用==判断是不是为空用 || 连接要比较对象.equals();
10.hashcode和equals联系与区别:
hashcode是系统用来快速检索对象而使用
equals方法本意是用来判断引用的对象是否一致
重写equals方法和hashcode方法时,equals方法中用到的成员变量也必定会在hashcode方法中用到,只不过前者作为比较项,后者作为生成摘要的信息项,本质上所用到的数据是一样的,从而保证二者的一致性
对象的hash地址不一定是实际的内存地址。(想想hashmap)
11.throw和throws的区别
throw 表示抛出一个异常类的对象,生成异常对象的过程。声明在方法体内。
throws 属于异常处理的一种方式,声明在方法的声明处。
12.Java中操作字符串的类有啥,他们的区别:
String、stringbuffer、stringbulider
String被final修饰、好处(1.实现常量池,不用new对象,2.线程安全,不能被修改所以随便共享,3.hash不可变,适合做map中的key)
stringbuffer线程安全,低效 stringbulider高效、线程不安全
所以:单线程用string'bulider 多线程用stringbuffer
13.什么是序列化与反序列化?
作用:在网络上传输对象字节序列,把对象字节保存到硬盘上。减少内存消耗。或者在远程rpc调用对象的时候需要。
序列化就是把对象存储到硬盘上,反序列化就是获取对象文件中的数据,转成后台对象类的数据。
14.String 类的常用方法都有那些?
- indexOf():返回指定字符的索引。
- charAt():返回指定索引处的字符。
- replace():字符串替换。
- trim():去除字符串两端空白。
- split():分割字符串,返回一个分割后的字符串数组。
- getBytes():返回字符串的 byte 类型数组。
- length():返回字符串长度。
- toLowerCase():将字符串转成小写字母。
- toUpperCase():将字符串转成大写字符。
- substring():截取字符串。
- equals():字符串比较
15.
A instanceof B B是不是A的父类
Java访问权限从大到小:public-protect-default-private
for循环(条件一;条件二;条件三)
条件一:var 一个值
条件二:进入循环的判断条件
条件三:var 的值每一次循环完后,是否递增或递减
线程安全的类有hashtable concurrentHashMap synchronizedMap
标识符:
- 标识符的组成元素是字母(a-z,A-Z),数字(0~9),下划线(_)和美元符号($)。
- 标识符不能以数字开头。
- java的标识符是严格区分大小写的。
- 标识符的长度可以是任意的。
- 关键字以及null、true、false不能用于自定义的标识符。
10.泛型的知识:
1. 只看尖括号里边的!!明确点和范围两个概念\*
2. 如果尖括号里的是一个类,那么尖括号里的就是一个点,比如List<A>,List<B>,List<Object>\**
3. 如果尖括号里面带有问号,那么代表一个范围,<? extends A> 代表小于等于A的范围,<? super A>代表大于等于A的范围,<?>代表全部范围
4. 尖括号里的所有点之间互相赋值都是错,除非是俩相同的点
5. 尖括号小范围赋值给大范围,对,大范围赋值给小范围,错。如果某点包含在某个范围里,那么可以赋值,否则,不能赋值
6. List<?>和List 是相等的,都代表最大范围
7. ----------------------------------------------------------------------------------
补充:List既是点也是范围,当表示范围时,表示最大范围