行业知识
JAVA中类和对象(二)
2026-10-25 17:52:17
来源:互联网转载
目录:
一.static修饰成员方法 二.static成员变量初始化 三.代码块 一.static修饰成员方法: 1.一般类中的数据成员都设置为 private ,而成员方法设置为 public , 问:那设置之后,Student类中,被Student修饰,的属性(classRoom)如何在类外访问呢?public class Student{private String name;private String gender;private int age;private double score;private static String classRoom = "Bit306";// ...}public class TestStudent {public static void main(String[] args) {System.out.println(Student.classRoom);}}编译失败:Error:(10, 35) java: classRoom 在 extend01.Student 中是 private 访问控制 那 static属性应该如何访问呢? 答:Java中,被static修饰的成员方法称为静态成员方法,是类的方法,不是某个对象所特有的。静态成员一般是通过静态方法来访问的。 public class Student{// ...private static String classRoom = "Bit306";// ...public static String getClassRoom(){return classRoom;}}public class TestStudent {public static void main(String[] args) {System.out.println(Student.getClassRoom());}} 2.静态方法特性:
1. 不属于某个具体的对象,是类方法 2. 可以通过对象调用,也可以通过类名( 点) 静态方法名 方式调用,更推荐使用后者 3. 不能在静态方法中访问任何非静态成员变量 因此,由于静态方法的属性,在静态方法中不可以,直接调用非静态方法,及成员变量,但是可以通过对象的引用访问,该非静态方法。如:也可以这样理解:静态方法中不能调用任何非静态方法,因为非静态方法有this参数,在静态方法中调用时候无法传递this引用
二.static成员变量初始化:
注意:静态成员变量一般不会放在构造方法中来初始化,构造方法中初始化的是与对象相关的实例属性 静态成员变量的初始化分为两种:就地初始化 和 静态代码块初始化(后面马上讲到) 。 1.就地初始化:就地初始化指的是:在定义时直接给出初始值。 2. 静态代码块初始化 :下面来讲解一下代码块。 三.代码块 1. 代码块概念以及分类 : 使用 {} 定义的一段代码称为代码块 。根据代码块定义的位置以及关键字,又可分为以下四种: 普通代码块 构造代码块 静态代码块 同步代码块 (后续会补充上) 普通代码块: 定义在方法中的代码块。 构造代码块: 定义在类中的代码块 ( 不加修饰符 ) 。也叫: 实例代码块 。 构造代码块一般用于初始化实例成员变量 。 静态代码块: 使用static 定义的代码块称为静态代码块。 一般用于初始化静态成员变量。(注意在类加载的时候被执行,如果有多个静态代码块情况下,执行顺序和定义顺序有关)。 答:以上就是静态代码块初始化。 2.代码块的执行顺序:先静态代码块-->实例代码块-->构造方法。我把代码打乱了,但是结果还是:
class Student { private String name; private int age; private int score; private static String className = "2"; /* //实例代码块 { this.age = 12; this.score = 100; this.name = "wangwang"; } //静态代码块 static { className = "2023班"; }*/ public Student(String name, int age, int score, String className) { this.age = age; this.name = name; this.score = score; Student.className = className; System.out.println("这个构造方法执行了.."); } 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; } public int getScore() { return score; } public void setScore(int score) { this.score = score; } public void show() { System.out.println("姓名" + this.name + " 年龄" + this.age + "成绩" + this.score); } public static void setClassName(String className) { Student.className = className; } //静态成员方法-->类方法 public static String getClassName() { //不能直接调用,在静态方法中不能直接调用,非静态方法(依赖于对象),要调用则要先实例化!! /*show();*/ Student student = new Student("lisi", 12, 99, "4"); student.show(); return className; } //实例代码块 { System.out.println("实例代码被执行了..."); } //静态代码块 static { System.out.println("这是个静态代码块一般用来初始化局部变量"); }}public class Main { public static void main(String[] args) { Student student1 = new Student("lisi", 12, 99, "2");// System.out.println(student1.getClassName()); }} 运行结果: