static关键字(静态的)
static关键字能够修饰类中的属性、方法、代码块
static关键字用来修饰属性(成员变量)
- 被修饰后的成员变量是根据类的加载在而加载,被修饰的成员变量一般用
类名.属性名的方式来调用,虽说能够用对象.属性的形式调用但是不规范,因为静态成员变量可以解释为所有对象公共拥有的一个属性,用来表示某一个对象是不规范的。- 被static修饰的属性在内存中只有一份,其他的对象来调用此属性的时候又是引用其地址值,而不是再创建一份。
- 静态的属性的应用比如:想要知道一个类创建了多少个对象就可以使用静态的属性来记录,写在静态方法中,没构造一次对象就对其值加一即可。
static关键字用来修饰方法
- 方法在类调用之前在内存中是有一块方法区的,要调用方法里面的指令就需要引用该方法区,当用静态方法之后内存的储存没有多大的改变,还是只有一份,但是调用的方式发生了改变,如以前只能通过对象名.方法名的方式调用,但是通过static关键字就可以通过类名.方法名的方式调用。
- 在静态方法中只能调用静态的方法和静态的属性,不能够调用非静态的属性和方法。
- 静态方法一般用于工具类(可以认为无属性的类)之中,通过类名就可直接调用,比较方便。
static关键字用来修饰代码块
- 静态代码块中的代码会在类加载的时候就执行其中的代码,能够完成一些类的准备工作,也就是加载好类。
- 同样的静态代码块中只能有静态的方法和属性。
- 普通的代码块一般完成对象的初始化工作,跟构造器的初始化功能重复,所以普通代码块一般用的很少。
final关键字(最终的)
可以用来修饰类、属性,方法,局部变量
final用来修饰类
用来修饰类的时候表示这个类是最终的,意思是这个类就不能被继承
final用来修饰属性
用来修饰属性的时候表示常量,且常量必须得有一个初始值(在构造器中初始化、代码块中初始化、赋值时初始化),表示值不能被修改。
final用来修饰方法
用来修饰方法的时候表示不能被重写
final用来修饰局部方法
用来修饰局部方法的时候一旦修饰之后值就不能被修改
接口(interface)
接口的定义:一种能力和行为的规范或者标准(不能有具体的实现)
1.因为接口中只能做方法的规范,因此方法定义时前面的public abstract可以省略
2.作为该接口的实现类(可以认为就是这个接口的子类)定义时通过implements 接口名称来实现这个接口中定义的方法
3.接口的实现一定要写在extends继承的后面
4.和继承类似,接口也是实现多态的一种方式 多态分为两种:继承多态 接口多态
5.和父类不同,一个类只能继承一个父类,但是可以实现多个接口 implements a接口,b接口,这是对JAVA中单继承的一种弥补
6.接口和抽象类的区别:
接口比抽象类还要抽象,开发中如果我们无法找到某些类之间的共同的父类,此时可以单纯从行为进行抽象,做成一个接口,因此接口的抽象能力比抽象类更加的强大类是从属性和行为两个角度找共性,接口只是从行为这个角度寻找共同点
7.和类不同,接口中是不能定义常规属性,只能定义public static final 类型的常量
8.一个接口中可以同时定义多个不同的抽象方法
9.接口中不能定义构造方法,当然也无法直接创建接口对象
10.接口之间可以相互继承
11.作为一个子类只要实现的某个接口必须强制实现接口中定义的所有抽象方法
12.在接口可以使用默认方法定义,使用default关键字声明即可 ,在jdk高版本中提供的一个新特性
接口的应用
实现对学生属性中名字,年龄,分数的查询
package com.qianfeng.day11;
//学生类
public class Student {
private String name;
private String gender;
private int age;
private double score;
private static int studentNumber = 0;
private static int maleNumber = 0;
private static int femaleNumber = 0;
private static int passNumber = 0;
private static int noPassNumber = 0;
public Student() {
super();
}
public Student(String name, String gender, int age, double score) {
super();
this.name = name;
this.gender = gender;
this.age = age;
this.score = score;
studentNumber++;
if (this.gender.equals("male")) {
maleNumber++;
}
femaleNumber = studentNumber-maleNumber;
if (this.score >= 60) {
passNumber++;
}
noPassNumber = studentNumber-passNumber;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public double getScore() {
return score;
}
public void setScore(double score) {
this.score = score;
}
public static int getStudentNumber() {
return studentNumber;
}
public static void setStudentNumber(int studentNumber) {
Student.studentNumber = studentNumber;
}
public static int getMaleNumber() {
return maleNumber;
}
public static void setMaleNumber(int maleNumber) {
Student.maleNumber = maleNumber;
}
public static int getFemaleNumber() {
return femaleNumber;
}
public static void setFemaleNumber(int femaleNumber) {
Student.femaleNumber = femaleNumber;
}
public static int getPassNumber() {
return passNumber;
}
public static void setPassNumber(int passNumber) {
Student.passNumber = passNumber;
}
public static int getNoPassNumber() {
return noPassNumber;
}
public static void setNoPassNumber(int noPassNumber) {
Student.noPassNumber = noPassNumber;
}
@Override
public String toString() {
return "Student [name=" + name + ", gender=" + gender + ", age=" + age + ", score=" + score + "]";
}
}
package com.qianfeng.day11;
//学生管理类
public class StudentManager {
private Student[] students = new Student[] {
new Student("zs", "male", 30, 98.5) ,
new Student("ls", "female", 23, 48.5),
new Student("ww", "male", 19, 78.5),
new Student("zl", "male", 22, 58.5),
new Student("tq", "female", 21, 70.5),
};
public void showStudentInfoByGender(Inquire inquire) {
for (int i = 0; i < students.length; i++) {
if (inquire.searching(students[i])) {
System.out.println(students[i].toString());
}
}
System.out.println("总人数有:" + Student.getStudentNumber());
System.out.println("男性有:" + Student.getMaleNumber());
System.out.println("女性有:" + Student.getFemaleNumber());
System.out.println("及格人数有:" + Student.getPassNumber());
System.out.println("及格人数有:" + Student.getNoPassNumber());
}
}
package com.qianfeng.day11;
//查询接口
public interface Inquire {
public abstract boolean searching(Student student);
}
package com.qianfeng.day11;
public class Test{
public static void main(String[] args) {
StudentManager studentManager = new StudentManager();
studentManager.showStudentInfoByGender(new Inquire() {
@Override
public boolean searching(Student student) {
return student.getAge() > 20;
}
});
studentManager.showStudentInfoByGender(s->s.getName().equals("ls"));
}
}
本文深入讲解了static关键字的用途,包括修饰属性、方法和代码块,以及final关键字的使用场景。此外,还详细介绍了接口的概念及其应用,展示了如何通过接口实现多态。

被折叠的 条评论
为什么被折叠?



