JavaSe阶段一复习(上)
第一部分
1.0 局部变量和成员变量
- 局部变量存在方法中,成员变量存在于方法外
- 局部变量定义时没有默认值,成员变量有默认值
- 局部变量存在于栈中,成员变量存在堆中。
- 局部变量在方法进栈时诞生,随着方法出栈时消亡。成员变量在堆中与new出来的对象生命周期一致,随着Java虚拟机的垃圾回收而消亡。
1.1 This和构造方法
This:是关键字,表示当前调用的对象,即 谁调用,谁就是this
构造方法:
构造方法就是用来创建对象的方法。
构造方法注意事项:构造方法的名称需要和类名称完全一致、构造方法不需要任何返回值,连void也是无需写的、如果没有编写构造方法,编译器会自动生成一个无参的构造方法,里面什么事情都不干。
1.2 引用类型的的使用
除了基本类型,其他的类型都是引用类型;使用步骤如下:
1.导包
导包使用关键字import
如果需要使用的引用类型是与当前类的路径相同,则不用导包
在Java中的java.lang包是不用导包的,如java.lang.String
2.创建对象
如 Scanner sc = new Scanner(System.in);
3.根据对象.成员方法();
如,int num = sc.nextInt(); String str = sc.next();
需要注意的是,从键盘输入的任何信息都为字符串,因此调用sc.nextInt()方法,是将字符串转换为int型的
1.3 匿名对象
在正常创建一个对象时的格式:
//已知一个Person类,里面有成员变量 String name; 成员方法 void showName();
//类名 对象名 = new 类名();
Person person = new Person();
//使用时用对象.成员方法
person.showName();
但是匿名对象的使用格式。
//匿名对象的使用:
new Person().showName();
匿名对象仅可使用一次,当需要再次使用的时候,就不得不重新new一个对象。
因此,匿名对象适用于只需要使用一次的情况
1.4 包装类
从JDK1.5之后,程序会自动装箱和自动拆箱.
自动装箱:指的是基本类型转变为包装类型
自动拆箱:指的是包装类型转变为基本类型
此处包装可理解为基本类型在一个箱子里包装好来 => 变成了包装类。
1.5 String类
String三大特点:
1.当String被创建时,其内容是不可以改变的
2.String可以使用char[]来创建,也可以使用byte[]来创建,其底层是byte[]
在基本类型当中,使用 == 是进行数值的比较
在引用类型当中,使用 == 是进行地址值的比较
String 是否可以被继承:由于String类被final修饰,因此不能String不能被继承
String一但创建,String的值能否改变:不可以,因为String的value是被final修饰的常量
当直接使用 = 创建的字符串,是放在字符串常量池当中,而使用char[]或byte[]创建的,是不放在字符串常量池的。
源码部分:
public final class String
implements java.io.Serializable, Comparable<String>, CharSequence {
/** The value is used for character storage. */
private final char value[];
}
1.6 重载和重写的区别
重载发生在一个类中,同名的方法如果有不同的参数列表则视为重载。
重写发发生在子类和父类之间,重写要求子类的重写方法与父类的方法有相同的方法名、参数列表。
注意:
- 重载与方法的返回值无关,存在于父类和子类以及同一个类中
- 在父子类中,构造方法不能被重写,被final、static修饰的类不能重写
1.7 &和&&的区别
&和&&都能够进行逻辑与运算
&和&&的使用:
if(a==b && a>0) //当左边a==b的结果为false时,会直接短路掉右边,因此右边的a>0是不会继续执行的
if(a==b & a>0) //当左边a==b的结果为false时,不会短路掉右边,因此右边的a>0会继续执行的
1.8 ==和equals的区别
==是运算符,equals是Object的一个方法。
在基本类型使用中,==是判断数值是否相等。
如果是引用类型,则比较引用类型的地址值是否相等
int a = 5, b = 5;
//如判断a和b是否数值上相等,相等时返回true
Student stu1 = new Student();
Student stu2 = new Student();
if(stu1 == stu2){...}
//如果是引用类型,则比较引用类型的地址值是否相等,此处stu1和stu2都是通过new出来的两个对象,它们在堆内存中是两个地址不一样。
equals():是用来比较两个对象的内容是否相等。但翻看Object的源码时,可以查看到底层也是使用 == 来判断的
public boolean equals(Object obj) {
return (this == obj);
}
因此一般使用,都需要对equals进行重写,如String类就对其进行重写。
public boolean equals(Object anObject) {
if (this == anObject) {
return true;
}
if (anObject instanceof String) {
String anotherString = (String)anObject;
int n = value.length;
if (n == anotherString.value.length) {
char v1[] = value;
char v2[] = anotherString.value;
int i = 0;
while (n-- != 0) {
if (v1[i] != v2[i])
return false;
i++;
}
return true;
}
}
return false;
}
##1.9 异常机制中finally的返回值
返回值是:
public int demo() {
try {
int a = 5/0;
return 1;
}catch (Exception e){
return 2;
}finally {
return 3;
}
}
结果为3
面向对象三大特性
1.1 封装性
封装性:封装简单的说就是将细节隐藏起来,外界只管调用,无需在意细节,这也提高了程序的安全性;在Java当中最常见的两个封装就是定义方法、private关键字,其中定义一个类,也是封装。
1.2 继承性
继承就是从已有的类中得到继承关系的过程。通过继承,能够使得代码在保持原有基础上,能得到更多拓展。通常将对象的共有特征进行抽取得到父类。
注意:
- 父类和子类的关系:子类也是父类。如,讲师、助教也是属于员工的范畴。
- this代指当前的对象,而super代指父类对象(超类)
1.3 多态性
多态是指运行不同子类型的对象对同一消息作出不同的响应。
讲师和助教都属于员工,他们都有共同的行为,如:工作。但是讲师的工作是上课,助教的工作是帮助教学,虽然他们都是工作,但是工作内容是不一样的
多态的格式:超类型的引用指向派生类 或 父类型的引用指向子类
//类: 父类 对象名 = new 子类()
Employee one = new Teacher(); //此时将教师向上转型为员工
//接口: 接口 接口名 =new 接口的实现类()