一、包
将包名.类名称为全类名,或者全限定名;
现在有两个包,分别是domain和test,Teacher类是在domain包里,如果要在Test中使用,就必须import包,否则就会报错,如下:
需要导包:
如果同时使用两个包的同名类,不能在上面导入两个包,如下:
建议这样写:
二、final关键字
1、用final修饰方法:
不可以在子类中重写:
如果当前方法表示的是一种规则,不希望被改变,那么就使用final去修饰
例如,在object类中:
2、用final修饰类:
用final修饰父类,那么子类就不能继承了
不希望被继承的时候,可以使用final去修饰类;
3、用final修饰变量:
例如:
代码:
test类:
public class Test {
public static void main(String[] args) {
final int a = 10;
System.out.println(a);
final Student S = new Student("张三",23);
S.setName("李四");
S.setAge(34);
System.out.println(S.getName()+","+S.getAge());
}
}
Student类:
public class Student {
private String name;
private int age;
public Student() {
}
public Student(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
运行结果:
说明可以修改S中的内容
但是如果修改地址值则会报错;
对于数组也一样:
改变地址值报错:
核心:常量记录的数据是不会改变的;
关于字符串是不可变的,是因为源码用private,final修饰的,也没有提供get,set方法:
案例:
导入之前的学生管理系统:
将switch,case循环里面的1,2,3,4,5改为常量,增加可读性。
三、权限修饰符
1、实际开发中,一般只用private和public;
2、成员变量私有,方法公开;
3、如果方法中的代码是抽取其他方法中共性代码,这个方法一般也私有;
四、代码块
1、局部代码块
局部:写在方法里面的;
作用:提前结束变量的生命周期;
2、构造代码块(写在成员位置的代码块)
有重复内容:
提取出来:形成构造代码块;
代码:
public class Test {
public static void main(String[] args) {
Student S = new Student();
Student S1 = new Student("张三",29);
}
}
public class Student {
private String name;
private int age;
//构造代码块:
//1、写在成员位置的代码块
//2、作用:可以将多个构造方法中重复的代码抽取出来
//3、执行机制:我们在创造类对象的时候时候会先执行构造代码块,再执行构造方法
{
System.out.println("开始创建对象");
}
public Student() {
System.out.println("空参构造");
}
public Student(String name, int age) {
System.out.println("有参构造");
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
执行结果: 1、写在成员位置的代码块 2、作用:可以将多个构造方法中重复的代码抽取出来 3、执行机制:我们在创造类对象的时候时候会先执行构造代码块,再执行构造方法
但是不够灵活,因为可能有的不需要这个方法,但是仍会执行构造代码块里面的内容,可以使用以下两种方法代替构造代码块;
3、静态代码块
代码:
public class Test {
public static void main(String[] args) {
Student S = new Student();
Student S1 = new Student("张三",29);
}
}
public class Student {
private String name;
private int age;
static{
System.out.println("静态代码块执行了");
}
public Student() {
System.out.println("空参构造");
}
public Student(String name, int age) {
System.out.println("有参构造");
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
代码运行结果:
在学生管理系统中使用静态代码块:
如果不使用静态代码块也可以实现:
但是main方法可以被调用,所以可能会多次调用,导致多次添加元素: