一、八种基本数据类型
二、列表
- List 以特定的顺序保存元素。List中有两种类型的列表:
- ArrayList:随机访问快,插入删除慢
- LinkedList:插入删除快,但是随机访问慢。还添加了作为栈、队列、双端列表的方法,可以直接作为栈来使用,遵守“后进先出,先进后出”的原则,其中有几个常用方法:
romove() romovefirst()返回列表头部并移除
addfirst() add() addlast()插入到列表的尾部
getfirst() element() peek()返回列表的头部
- Queue 链表,只能从一端插入对象,从另一端取出 遵循先进先出原则;
- Set 元素不能重复。HashSet;
- Map 键值对插入。HashMap、TreeMap;
三、重写与重载的区别
重载和重写都是实现多态的方式,区别在于重载实现的是编译时的多态性,而重写实现的是运行时的多态性。
- 重写:发生在子类与父类之间,方法名、参数、返回类型都相同, 对方法体进行修改。
- 重载:发生在一个类中,方法名相同,参数不同。对返回类型没有要求
四、java注解与反射
(1)注解
注解说白了就是对程序做出解释,与我们在方法、类上的注释没有区别,但是注解可以被其他程序所读取,进行信息处理。(注解写在方法上方)
- 内置注解
- @Override:这个应该都不陌生,修饰方法,表示打算重写父类中的方法声明。
- @Deprecated:使方法被划一道横线,表示废弃。
- @SuperWarnings:写程序时,可能会报很多黄线的警告,该注解用来隐藏警告。
- 自定义注解 格式:public @interface 注解名 { 定义体 }
- 元注解
(2)反射
JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取信息以及动态调用对象方法的功能称为java语言的反射机制。
反射就是把java类中的各种成分映射成一个个的Java对象。
反射的原理在与class对象。Class对象的由来是将class文件读入内存,并为之创建一个Class对象。
获取Class对象的三种方式:
-
对象.getClass();
-
任何数据类型(包括基本数据类型)都有一个“静态”的class属性
-
通过Class类的静态方法:forName(String className)(常用)
Student stu1 = new Student();//这一new 产生一个Student对象,一个Class对象。
//方法一:getClass获取Class对象
Class stuClass = stu1.getClass();
System.out.println(stuClass.getName());
//方法二:class
Class stuClass2 = Student.class;
//方法三:forName
Class stuClass3 = Class.forName("fanshe.Student");//注意此字符串必须是真实路径,就是带包名的类路径,包名.类名
五、java内存模型中栈与堆的联系与区别
联系:栈中定义的引用变量保存堆中目标对象的首地址
区别:
- 管理方式:栈的内存空间自动释放,而堆内存空间的释放需要垃圾回收
- 空间大小:一般情况下,栈的空间比堆的空间占用要小
- 碎片相关:栈产生的碎片远小于堆
- 分配方式:栈空间支持静态分配(编译器分配好了)和动态分配,堆空间仅支持动态分配
- 效率:栈的效率比堆高
六、static,final关键字
- final
- 修饰类:当用final修饰一个类时,表明这个类不能被继承;
- 修饰方法:方法不能被重写(可以重载多个final修饰的方法);
- 修饰变量:当final修饰一个基本数据类型时,表示该基本数据类型的值一旦在初始化后便不能发生变化;如果final修饰一个引用类型时,则在对其初始化之后便不能再让其指向其他对象了,但该引用所指向的对象的内容是可以发生变化的。
- static
- 静态变量(类变量):静态变量被所有的对象共享,也就是说我们创建了一个类的多个对象,多个对象共享着一个静态变量,如果我们修改了静态变量的值,那么其他对象的静态变量也会随之修改。
- 非静态变量(实例变量):如果我们创建了一个类的多个对象,那么每个对象都有它自己该有的非静态变量。当你修改其中一个对象中的非静态变量时,不会引起其他对象非静态变量值改变。