首页 > 编程语言 >java内部类

java内部类

时间:2024-05-13 23:20:08浏览次数:24  
标签:java 内部 void System println public out

1 内部类

1.1 概述

● 内部类就是定义在一个类里面的类。内部内(寄生),外部内(宿主)

1.2 使用场景

● 内部的完整结构只为外部事务提供服务,那么内部的完整结构可以使用内部类来设计

● 内部类通常可以方便访问外部类的成员,包括私有成员

● 内部类提供了更好的封装性,可用private,protected

1.3 分类

① 静态内部类

② 成员内部类(非静态内部类)

③ 局部内部类

④ 匿名内部类


 

2 静态内部类

2.1 什么是静态内部类

● 有static修饰,属于外部类本身

● 特点和使用方法与普通类一样,类有的成分它都有,只是位置在别人里面而已

2.2 创建对象格式

2.3 访问拓展

● 静态内部类可以访问外部类的静态成员

● 静态内部类不可以直接访问外部内的实例成员

2.4 代码实例

【案例1】Outer类

/**
   外部类
 */
public class Outer {
    public static int a = 100;
    public  int b = 200;
    private static String hobby;
    private String hobby2;

    /*
        静态成员内部类
     */
    public static class Inner{
        private String name;
        private int age;
        public static String schoolName;

        public Inner(){};

        public void show(){
            System.out.println("名字:"+name);
            System.out.println(hobby);

            //System.out.println(b);          ×
            //System.out.println(hobby2);     ×

            //间接访问
            //Outer o = new Outer();
            //System.out.println(o.hobby);
        }

        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;
        }
    }

}

【案例2】test类

public class Test {
    public static void main(String[] args) {

        Outer.Inner in = new Outer.Inner();
        in.setName("张三");
        in.show();

    }
}

 运行结果:

名字:张三
null

 

3 成员内部类

3.1 什么是成员内部类

● 无static修饰,属于外部类的对象

● JDK16之前,成员内部类中不能定义静态成员,JDK16开始也可以定义静态成员了

3.2 创建对象格式

3.3 访问拓展

● 成员内部类可以直接访问外部类的静态成员,外部类的静态车成员只有一份可以被共享

● 成员内部类的实例方法可以直接访问外部类的实例成员,因为必须先有外部类对象,才能有成员内部类对象,所以可以直接访问外部类对象的实例成员·。

3.4 代码实例

【案例1】Outer类

/**
   外部类
 */
public class Outer {
    public static int num = 777;
    private String hobby;

    /*
        成员内部类:不能加static修饰(JDK16之前), 属于外部类的对象
     */
    public class Inner{
        private String name;
        private int age;
        //public static int a = 100; (JDK16前不可使用)

        public void show(){
            System.out.println("名称:"+name);
            System.out.println("数量:"+num);
            System.out.println("爱好:"+hobby);
        }

        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;
        }
    }
}

 【案例2】test类

public class Test {
    public static void main(String[] args) {

        Outer.Inner in = new Outer().new Inner();
        in.setName("叶子");
        in.show();

    }
}

 运行结果:

名称:叶子
数量:777
爱好:null

3.5 成员内部类面试题

【案例】请观察如下代码,写出合适的代码对应其注释要求输出的结果。

注意:在成员内部类中访问所在外部类对象,格式:外部类名.this 

【案例】

public class Test2 {
    public static void main(String[] args) {

        People.Heart heart = new People().new Heart();
        heart.show();

    }
}

class People{
    private int heartbeat = 150;

    /**
     成员内部类
     */
    public class Heart{
        private int heartbeat = 110;

        public void show(){
            int heartbeat = 78;
            System.out.println(heartbeat); // 78
            System.out.println(this.heartbeat); // 110
            System.out.println(People.this.heartbeat); // 150
        }
    }
}

运行结果:

78
110
150

 

4 局部内部类 (鸡肋语法,了解即可)

● 局部内部类放在方法、代码块、构造器等执行体中

● 局部内部类的类文件名为:外部类$N内部类.class

【案例】

/**
    目标:了解局部内部类的语法
 */
public class Test {

    static {
         class Dog{

         }

         abstract class Animal{

         }

         interface SportManInter{

         }
    }

    public static void main(String[] args) {
        class Cat{
            private String name;

            public static int onLineNumber = 100;

            public String getName() {
                return name;
            }

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

        interface SportManInter{

        }

        Cat c = new Cat();
        c.setName("叮当猫~");
        System.out.println(c.getName());
    }
}

 

5 匿名内部类

5.1 什么是匿名内部类

5.1.1 概述

● 本质上是一个没有名字的局部内部类,定义在方法体、代码块里面。

● 作用:方便创建子类对象,最终目的为了简化代码编写。

5.1.2 格式

5.1.3 特点

● 匿名内部类没有名字

● 匿名内部类写出来就会产生一个匿名内部类的对象

● 匿名内部类的对象类型相当于是当前new的那个类型的子类类型

5.2 匿名内部类思想引入

【案例1】抽象类 Animal        子类 Tiger

/**
      目标:学习匿名内部类的形式和特点。
 */
public class Test {
    public static void main(String[] args) {

        Animal a = new Tiger();
        a.run();

    }
}

class Tiger extends Animal{
    @Override
    public void run() {
        System.out.println("老虎跑的快~~~");
    }
}

abstract class Animal{
    public abstract void run();
}

运行结果:

老虎跑的快~~~

【案例2】匿名内部类

① 匿名内部类没有名字

② 匿名内部类写出来就会产生一个匿名内部类的对象

③ 匿名内部类的对象类型相当于是当前new的那个类型的子类类型

/**
      目标:学习匿名内部类的形式和特点。
 */
public class Test {
    public static void main(String[] args) {

        Animal a = new Animal() {
            @Override
            public void run() {
                System.out.println("老虎跑的快~~~");
            }
        };
        a.run();

    }
}

abstract class Animal{ 
    public abstract void run();
}

运行结果:

老虎跑的快~~~

5.3 匿名内部类常见使用形式

【案例1】接口Swimming      实现接口类 Student

/**
    目标:掌握匿名内部类的使用形式(语法)
 */
public class Test2 {
    public static void main(String[] args) {
        Student s = new Student();
        go(s);
    }

    /*
        学生、老师、运动员可以一起参加游泳比赛
     */
    public static void go(Swimming s){
        System.out.println("开始。。。");
        s.swim();
        System.out.println("结束。。。");
    }
}

class Student implements  Swimming{
    @Override
    public void swim() {
        System.out.println("学生快乐的自由泳

标签:java,内部,void,System,println,public,out
From: https://www.cnblogs.com/apple677/p/16076130.html

相关文章

  • 内部类
    1内部类1.1概述(1)什么是内部类?将一个类A定义在另一个类B里面,A称为内部类,B称为外部类【案例】publicclassOuter{//成员内部类classInner{}publicvoidmethodOne(){//局部内部类classInner1......
  • Java8新特性
    1Lambda表达式1.1使用Lambda表达式实现函数式接口1【案例1】函数是接口MyInterOne//函数式接口(接口中只有一个抽象方法)@FunctionalInterfacepublicinterfaceMyInterOne{publicabstractvoidmethodOne();}【案例2】定义MyInterOneImpl类实现接口MyInterOnepub......
  • java的图像处理 java图像处理为什么耗cpu
    CPU:有的应用需要大量计算,他们会长时间、不间断地占用CPU资源,导致其他资源无法争夺到CPU而响应缓慢,从而带来系统性能问题。例如:代码递归导致的无限循环,正则表达式引起的回溯,JVM频繁的FULLGC,以及多线程编程造成的大量上下文切换等,这些都有可能导致CPU资源繁忙。内存:Java程......
  • java常用异步说明
    简介异步编程是一种编程范式,允许在等待某些操作(如IO操作)完成的过程中,暂停当前线程的执行,让出控制权,从而允许其他操作或线程并发执行。在Java中,有多种实现异步编程的方式,包括使用Future和Callable接口、CompletableFuture类以及ExecutorService等。下面是一个简单的Java异步编程......
  • 字节面试:说说Java中的锁机制?
    Java中的锁(Locking)机制主要是为了解决多线程环境下,对共享资源并发访问时的同步和互斥控制,以确保共享资源的安全访问。锁的作用主要体现在以下几个方面:互斥访问:确保在任何时刻,只有一个线程能够访问特定的资源或执行特定的代码段。这防止了多个线程同时修改同一资源导致的数据......
  • Java身份证识别接口集成开发示例,身份证查询接口
    人类是有情感的,人们所接触到的各种事物和信息都会被身体相应器官所接收,然后通过神经元传入大脑继而被识别,然后大脑便会产生对该事物的认知和情绪。人们大多喜欢热情、有趣的事物,对冷冰冰、枯燥、无趣的APP基本是提不起兴趣的。一个好的APP是可以打动人心、能够传递情感的,进而......
  • 成员内部类
    成员内部类:1.在类的内部定义,与实例变量、实例方法同级别的类。2.外部类的一个实例部分,创建内部类对象时,必须依赖外部类对象。3.当外部类、内部类存在重名属性时,会优先访问内部类属性。(注:如果不写,会优先访问内部类;如果想访问外部类则需要加上Outer.this)4.成员内部类不能定义静......
  • 【java】问题排查-内存溢出(OOM)-汇总指南
    1、java.lang.OutOfMemoryError:Javaheapspace原因分析示例解决方案2、java.lang.OutOfMemoryError:GCoverheadlimitexceeded原因分析示例解决方案3、java.lang.OutOfMemoryError:Permgenspace原因分析示例解决方案4、java.lang.OutOfMemoryErr......
  • 针对企业内部的IT资产进行漏洞扫描是一项至关重要的网络安全服务
    针对企业内部的IT资产进行漏洞扫描是一项至关重要的网络安全服务,旨在识别并修复可能使企业面临网络威胁的安全漏洞。为了确保高性价比的全面覆盖性服务,以下是一些建议:扫描类型:现场扫描:由专业的安全团队亲自到企业现场,通过连接企业内网进行详细的扫描。这种方式可以更深入地了......
  • 【java】内存溢出(OOM)
    一、OOM简介 1、什么OOM?(图片来源网络,侵删)OOM,全称OutOfMemory,意思是内存耗尽或内存溢出。对应Java程序抛出的错为java.lang.OutOfMemoryError,OutOfMemoryError(OOM)是Java虚拟机(JVM)抛出的一个异常,表示JVM没有足够的内存来完成请求的内存操作。当JVM尝试为新的对象分配......