Java学习笔记之对象数组和内部类

本文深入探讨了对象数组的概念及应用,包括声明、初始化和动态初始化方式,并详细解析了内部类的特点,如访问外部类私有属性、使用static声明内部类以及在方法中定义内部类等关键知识点。
1、对象数组

对象数组就是数组里包含的是一组对象,在使用之前,我们必须要先开辟数组空间,一开始数组里的每一个对象都是null值,在使用的时候,每一个对象都必须实例化。

1.1 对象数组的声明

类 对象数组名称 [] = new 类 [数组长度]

class Person{
    private String name;

    public String getName(){
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
    public Person(String name){
        this.setName(name);
    }
}

public class ChapterFive {
    public static void main(String[] args){
        Person per[] = new Person[3];  // 开辟了三个空间大小的数组
        System.out.println("============= 数组声明 ============");
        // 对象数组初始化之前,每个值都是null
        for(int i=0;i<per.length;i++){
            System.out.println("per[" + i + "] = " + per[i]);
        }
        // 每个元素初始化
        per[0] = new Person("张三");
        per[1] = new Person("李四");
        per[2] = new Person("王五");

        System.out.println("============ 对象实例化 ===========");
        for(int i=0;i<per.length;i++){
            System.out.println("per[" + i + "] = " + per[i].getName());
        }
    }
}

// 运行结果
============= 数组声明 ============
per[0] = null
per[1] = null
per[2] = null
============ 对象实例化 ===========
per[0] = 张三
per[1] = 李四
per[2] = 王五
1.2 数组动态初始化

数组可以静态初始化,也可以动态初始化,对象数组当然也一样可以。

class Person{
    private String name;

    public String getName(){
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
    public Person(String name){
        this.setName(name);
    }
}

public class ChapterFive {
    public static void main(String[] args){
    	// 静态初始化三个对象
        Person per[] = {new Person("张三"),new Person("李四"),new Person("王五")};  
        System.out.println("============ 数组输出 ===========");
        for(int i=0;i<per.length;i++){
            System.out.println("per[" + i + "] = " + per[i].getName());
        }
    }
}
2、内部类

在一个类里还可以再定义另一个类,我们称为内部类,定义了内部类的类称为外部类,内部类可以声明为private或者public,对内部类的访问和外部类中其它成员变量或者方法一样。

标识符 class 外部类名称{
	// 外部类成员
	标识符 class 内部类名称 {
		// 内部类成员
	}
}
class Outer{
    private String info="hello world!";  // 外部类私有属性
    class Inner{  // 定义内部类
        public void print(){
            System.out.println(info);
        }
    }

    public void fun(){  // 定义外部类的方法
        new Inner().print();  // 通过内部类的实例化调用方法
    }
}

public class ChapterFive {
    public static void main(String[] args){
        new Outer().fun();  // 调用外部类的fun方法
    }
}

// 运行结果
hello world!

内部类既有优点又有缺点:

  • 缺点: 破坏了类的结构,正常定义一个类,最好只定义属性和方法。
  • 优点: 可以方便的访问外部类的私有属性
2.1 使用 static 声明内部类

如果一个内部类用static声明,则此内部类称为外部类,可以在类的外部调用,如果想要调用外部类的属性,则必须声明为static类型

class Outer{
    private static String info="hello world!";  // 外部类私有属性
    static class Inner{  // 定义内部类
        public void print(){
            System.out.println(info);
        }
    }

    public void fun(){  // 定义外部类的方法
        new Inner().print();  // 通过内部类的实例化调用方法
    }
}

public class ChapterFive {
    public static void main(String[] args){
        new Outer.Inner().print();  // 调用外部类的print方法
    }
}
2.2 在外部访问内部类

一个内部类可以在外部类中被访问,也可以直接在其它类中调用,调用格式为:
外部类. 内部类 内部类对象 = new 外部类实例.new 内部类( );

class Outer{
    private String info="hello world!";  // 外部类私有属性
    class Inner{  // 定义内部类
        public void print(){
            System.out.println(info);
        }
    }

    public void fun(){  // 定义外部类的方法
        new Inner().print();  // 通过内部类的实例化调用方法
    }
}

public class ChapterFive {
    public static void main(String[] args){
        Outer out = new Outer();   // 外部类实例化对象
        Outer.Inner in = out.new Inner();   // 实例化内部类对象
        in.print();    // 调用内部类的方法
    }
}
2.3 在方法中定义内部类

一个内部类可以定义在任意的位置,我们看一下在方法中定义的内部类

class Outer{
    private String info="hello world!";  // 定义外部类私有属性
    public void fun(final int temp){  // 定义外部类的方法
        class Inner{                  // 在方法中定义内部类
            public void print(){      // 定义内部类的方法
                System.out.println("类中的属性:" + info);  // 直接访问外部类的私有属性
                System.out.println("方法中的参数:" + temp);
            }
        }
        new Inner().print();
    }
}

public class ChapterFive {
    public static void main(String[] args){
        new Outer().fun(30);   // 调用外部类的方法
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值