JAVA中类和对象(二)

目录:

一.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());
    }
}

 运行结果:

  • 20
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 13
    评论
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

robin_suli

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值