Java反射
反射实现有哪些?
Class.forName(“com.jdbc.cj.Driver.mysql”)
类名.class
对象名.getClass()
反射优缺点有哪些?
优点: 能够动态的获取类的实例,提高灵活性
缺点: 会降低性能,解决办法: 1. 如果多次创建某个对象的实例,使用缓存 2. 通过SetAccessible关闭JDK的安全检查来提高提升反射速度。
访问修饰符
这个本类指的是自己创建的这个类里面的范围,而不包括本类下面的一个默认修饰符修饰的类
修饰符使用范围?
四种修饰符可以用在属性和方法
类和接口只能用public 和 默认
为什么子类的访问修饰符得大于父类?
private修饰的属性和方法子类是不能继承的。
当子类对象当作父类对象使用的时候,如果父类是public 而子类是private,那么想要调用子类的方法就不行了,这不符合继承的特性。
类相关
super关键字
super关键字是指调用父类的当中的一些特征,super()方法必然会执行,通常来构造方法的第一行,所以在初始化子类的实例对象的时候先调用父类的初始化特征,注意: new 照样还是子类的对象,super只是给子类扩充属性
super关键字通常能够省略,有些情况不能省略:1.需要调用父类的属性,但是子类和父类有相同的属性名和方法名,如果子类想要调用父类的属性或者方法那么必须使用super来访问
super可以看作是对new 对象的属性的一个扩充,这也是为什么每个对象都有一个wait()和notify()方法
String类
public class StringTest02 {
public static void main(String[] args) {
String s1 = "hello";
// "hello"是存储在方法区的字符串常量池当中
// 所以这个"hello"不会新建。(因为这个对象已经存在了!)
String s2 = "hello";
// == 双等号比较的是变量中保存的内存地址
System.out.println(s1 == s2); // true
String x = new String("xyz");
String y = new String("xyz");
// == 双等号比较的是变量中保存的内存地址
System.out.println(x == y); //false
}
}
数组
Java当中的数组有一维、二维、三维(三维几乎用不到),数组的优点就是检索的过程会非常快,就比如说让你查100个大小数组和查10000个大小数组,你觉得哪个更快? 其实是一样快的,数组的存储位置的元素都是连续存储的,并且每个元素都有下标,而且每个元素的存储大小都是一样的,这样就知道了偏移量,所以只需要算一遍就能计算出最终结果。二维数组就是每个元素都是一个一维数组。
数组需要注意的点:
- 数组要求元素的类型一样
- 数组的每个元素的大小一样
- 数组元素的存储位置是连续的,方便查找
接口
- 接口和接口之间不需要有任何的继承关系就可以完成互转,可能会爆出ClassCastExceptino问题
- 类转化成没有任何关系的接口是可以的
- 类和类之间转化必须得有继承关系
- 接口不可以被实例化,接口当中的方法默认是public abstract ,方法是用public final 修饰,也就意味着接口当中所有的元素都是用public修饰,同样接口当中不能写方法体。
- 一个接口可以继承多个方法
- 一个类可以实现多个接口
接口的出现解决了之前的什么问题? 首先就是之前遗留下的类之间只能单继承的问题,而现实当中往往是多继承关系
Java加载与执行
编译期:(可以在windows上)
第一步:在硬盘的某个位置(随意),新建一个xxx.java文件
第二步:使用记事本或者其它文本编辑器例如EditPlus打开xxx.java文件
第三步:在xxx.java文件中编写“符合java语法规则的”源代码。
第四步:保存(一定要将xxx.java文件保存一下)
第五步:使用编译器(javac【JDK安装后自带】)对xxx.java文件进行编译。
第六步:如果xxx.java文件中编写的源代码是符合语法规则的,编译会通过,
如果xxx.java文件中编写的源代码违背了语法规则,那么编译器会报错,编译器
报错之后class文件是不会生成的,只有编译通过了才会生成class字节码文件。
并且一个java源文件是可以生成多个class文件的。(编译实质上是检查语法)
运行期(JRE在起作用):(可以在windows上,也可以在其他的OS上。)
第七步:如果是在Linux上运行,需要将windows上生成的class文件拷贝过去
不需要拷贝源代码,真正运行的是字节码。(但是源代码也不要删除,有用)
第八步:使用JDK自带的一个命令/工具:java(负责运行的命令/工具)执行字节码
第九步:往下的步骤就全部交给JVM了,就不需要程序员干涉了。
JVM会将字节码文件装载进去,然后JVM对字节码进行解释(解释器负责将字节码
解释为1010101010..等的二进制)
第十步:JVM会将生成的二进制码交给OS操作系统,操作系统会执行二进制码和
硬件进行交互。
JDK\JRE\JVM
JDK包含JRE,JRE包含JVM,JVM不能独立存在,其他两个可以。
JDK是Java开发的工具箱,JRE是Java程序的运行时环境