Java之内部类(中)

接着在(上)我们讲了成员内部类与局部内部类,这次我们将讨论静态内部类

一、静态内部类,就是使用static关键字修饰的成员内部类

1、与成员内部类区别和特点: 

(1)与成员内部类相比,在形式上,静态内部类只是在内部类前增加了static关键字。

(2)但在功能上,静态内部类只能访问外部类的静态成员,通过外部类访问静态内部类的成员时,因为程序已经提前在静态常量区为静态内部类分配好了内存,所以即使静态内部类没有加载,依然可以通过外部类直接创建一个静态内部类对象。

  则创建静态内部类的对象基本语法格式如下:

外部类名.静态内部类名 变量名 = new 外部类名.静态内部类名();

2、下面通过实例为大家分析其中的细节:

(1)首先创建一个外部类:Student"学生"类,再在外部类中创建一个静态内部类:Computer"电脑"类。代码如下:

package com.feisi.inner;

public class Student {
    //外部类的成员变量
    private String name="张三";
    private int age;
    private char sex;
    private String sid; //学号

    //创建一个静态内部类
    public static class Computer{
        //静态内部类的成员变量
        private String brand; //电脑的品牌
        private double price;
        //静态内部类的构造方法,创建对象时赋初始值
        public Computer(){
            this.brand="联想拯救者";
            this.price=8000.0;
        }
         //进行封装
        public String getBrand() {
            return brand;
        }

        public void setBrand(String brand) {
            this.brand = brand;
        }
         //静态内部类的静态成员方法
        public static void play(){
            System.out.println("玩电脑游戏中.....");
        }
         //静态内部类的实例方法
        public void getPrice(){
            System.out.println("电脑的价格是:"+this.price);
        }
    }
    //外部类的成员方法
    public void eat(){
        System.out.println("吃饭中.....");
    }
    
}

(2)现在我们开始去测试:

1、首先我想调用:静态内部类的静态成员方法:play()。首先我们把静态内部类看成外部类的"成员",那么因为它是静态的,所以要用类名调用,即先用Student类名。然后把静态内部类看成一个类,那么它里面的静态成员方法play()是不是也要用它的类名调用,即再用Computer类名。则测试类代码如下:

package com.feisi.test;
import com.feisi.inner.*;
public class Test01 {
    public static void main(String[] args) {
       Student.Computer.play();
    }
}

2、代码运行结果如下:

Java之内部类(中)_第1张图片

是不是成功的调用到静态内部类的play()静态成员方法。

3、然后我想调用:静态内部类中的实例方法:getBrand()方法和getPrice()方法。首先还是先将静态内部类当成外部类的"成员",那么因为它是静态的,所以要用类名调用,即先用Student类名。(不用产生Student类对象,也就是不用new Student()) 然后把静态内部类看成一个类,那么属于静态内部类的两个实例成员方法是不是要用Computer类的对象来调用(因为非静态成员需要先创建对象才能访问)。则测试类代码如下:

package com.feisi.test;
import com.feisi.inner.*;
public class Test01 {
    public static void main(String[] args) {
       Student.Computer.play();
       Student.Computer computer = new Student.Computer();
       System.out.println("电脑的品牌是:"+computer.getBrand());
       computer.getPrice();
    }
}

4、代码运行结果如下:

Java之内部类(中)_第2张图片

是不是成功分别调用到静态内部类的两个实例方法。

3、关于静态内部类的总结:

(1)静态内部类中只能访问外部类的静态成员。

(2)访问静态内部类的静态成员时,可以直接通过外部类名.静态内部类名.成员变量(或成员方法)。

(3)访问静态内部类的实例成员时,通过外部类名.静态内部类名 对象名 = new 外部类名.静态内部类名();来创建静态内部类对象,通过对象去调用其内部的实例成员。

( 注意不是:new 外部类名() !)

 

你可能感兴趣的:(java,开发语言)