JavaSE学习笔记之内部类、枚举类和基本类型包装类

今天我们继续复习Java相关的知识,和大家分享有关内部类等方面的知识,希望大家喜欢。


目录​​​​​​​

内部类

成员内部类

​编辑

静态内部类

局部内部类

匿名内部类

枚举类

定义方法

基本类型包装类

自动装箱和拆箱


内部类

成员内部类

成员内部类和成员变量和成员方法一样,都是属于对象的,也就是说我们必须存在外部对象,才能创建内部类的对象。

public class PleaSure {
    class pleasure{
        public void display() {
            System.out.println("这是内部类的输出函数display");
        }
    }
}
public class Main {
    public static void main(String[] args) {
        // 首先创建外部类的一个实例
        PleaSure outer = new PleaSure();
        // 然后使用外部类的实例来创建内部类的实例
        PleaSure.pleasure inner = outer.new pleasure();
        // 调用内部类的方法
        inner.display();
    }
    
}

静态内部类

静态内部类其实就和类中的静态变量和静态方法一样,是属于类拥有的,我们可以直接通过`类名加上一个点去访问。

public class PleaSure {
    static class pleasure{
        public void display() {
            System.out.println("这是内部类的输出函数display");
        }
    }
}
public class Main {
    public static void main(String[] args) {
        PleaSure.pleasure inner = new PleaSure.pleasure();
        // 调用内部类的方法
        inner.display();
    }
    
}

局部内部类

局部内部类是Java中内部类的一种,它定义在外部类的某个方法或代码块内部,并且其作用域被限定在定义它的方法或代码块中,可以类比局部变量来理解。

public class OuterClass {  
    private int outerField = 100;
    public void outerMethod(){  
        final int localVar = 200; 
        class LocalInnerClass {  
            public void innerMethod() {  
                System.out.println("Access outer field: " + outerField);  
                System.out.println("Access local variable: " + localVar);  
            }  
        }
        LocalInnerClass localInner = new LocalInnerClass();  
        localInner.innerMethod();  
    }  
    public static void main(String[] args) {  
        OuterClass outer = new OuterClass();  
        outer.outerMethod();  
    }  
}

匿名内部类

匿名内部类是Java中一种特殊的内部类形式,它允许你声明和实例化一个类,同时立即创建一个该类的实例,而无需显式地给该类命名。匿名内部类通常用于实现接口或继承一个类(特别是抽象类),并立即在其定义时创建该类的实例。

public interface newpleasure {
    void sayHello();
}
public class Main {
    public static void main(String[] args) {
        newpleasure greeting = new newpleasure() {
            @Override
            public void sayHello() {
                System.out.println("Hello, World!");
            }
        };
        greeting.sayHello();
    }
}

枚举类

枚举类在Java中是一种特殊的数据类型,它提供了一种更强大、更安全和更易读的方式来定义一组固定的命名常量。枚举类是通过enum关键字来定义的,它是一组固定的常量值的集合,每个常量值代表一个特定的数据类型,类中的实例数量是有限的,且每个实例在编译时就已被确定,不能动态创建新的实例。每个枚举常量在枚举类中都是唯一的,且可以使用==操作符进行比较。此外,枚举类还提供了compareTo方法用于比较两个枚举常量的顺序。

定义方法

enum Season {  
    SPRING, SUMMER, AUTUMN, WINTER  
}  
 
enum DayOfWeek {  
    MONDAY(1), TUESDAY(2), WEDNESDAY(3),  
    THURSDAY(4), FRIDAY(5), SATURDAY(6), SUNDAY(7);  
    private int value;  
 
    DayOfWeek(int value) {  
        this.value = value;  
    }  
 
    public int getValue() {  
        return value;  
    }  
}

同样,如果我们想要设置和得到其中的value等,我们直接new并用万能的“点”调用get和set即可。

基本类型包装类

基本类型包装类将Java的八种基本数据类型byte、short、int、long、float、double、char、boolean封装为对象,从而允许这些基本类型以对象的形式参与面向对象编程。

其中的对应关系如下:

Byte:对应基本类型byte。

Short:对应基本类型short。

Integer:对应基本类型int。

Long:对应基本类型long。

Float:对应基本类型float。

Double:对应基本类型double。

Character:对应基本类型char。

Boolean:对应基本类型boolean。

private final int value;
public Integer(int value) {
    this.value = value;
}
public static void main(String[] args) {
     Integer i = 1;
     System.out.println(i + i);
}

自动装箱和拆箱

接下来的知识点也是面试中可能常考的一个知识点:那么为什么包装类型能直接使用一个具体值来赋值呢?其实依靠的是自动装箱和拆箱机制。

Integer i = 1;    //其实这里只是简写了而已
Integer i = Integer.valueOf(1);  //编译后真正的样子
public static Integer valueOf(int i) {
    if (i >= IntegerCache.low && i <= IntegerCache.high)   //Java为了优化,有一个缓存机制,如果是在-128~127之间的数,会直接使用已经缓存好的对象,而不是再去创建新的(面试常考)
       return IntegerCache.cache[i + (-IntegerCache.low)];
  	return new Integer(i);   //返回一个新创建好的对象
}

如果使用包装类来进行运算,或是赋值给一个基本类型变量,会进行自动拆箱。

  • 12
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值