首页 > 编程语言 >Java中的内部类,代码块

Java中的内部类,代码块

时间:2023-06-30 23:44:41浏览次数:58  
标签:Java 内部 代码 void Outer new public out

前言

学习Java过程中,对内部类和代码块部分知识比较模糊,容易忘掉。今天再学的时候有一些其他的收获,整理记录一下。

1. 代码块

代码块的作用可以为初始化变量。都在在构造器方法之前执行,分为静态代码块和匿名代码块。静态代码块是在类加载时执行,因此只执行一次。匿名代码块在new实例化时执行,每个new新实例都会执行。

public class User{
    public static int age;
    {
        age=2;
        dosomething();  //匿名代码块
    }

    static{
        age=1;
        dosomething();   //静态代码块
    }

    public User(){
        age=3;
        dosomething();  //构造器
    }
    public static void  dosomething(){
        System.out.println(age);
    }
}

public static void main(String[] args) {
        new User();
        System.out.println("============");
        new User();
    }

实验结果

可知

  1. 执行顺序: 静态代码块-> 匿名代码块-> 构造器。
  2. 静态代码块只执行一次。

内部类

内部类分为四种,成员内部类、静态内部类、局部内部类、匿名内部类。 因为内部类可以单独继承,这使得多继承方案得以完整。

成员内部类(同方法同一级别)

  1. 可以访问外部类。
  2. 访问同名外部类时 外部类名.this.变量名
  3. 实例化内部类之前需要先实例化外部类,new Outer().new Inner()
  4. 注意
    - 可以使用权限修饰符(public...)
public class Outer {
    private  int ak =1;

    public  class inner{
         private  int ak =2;
         public void doSomething() {
             System.out.println(Outer.this.ak);
             System.out.println(ak);
         }
    }
}

public static void main(String[] args) {
        Outer out = new Outer();
        out.new inner().doSomething();
    }

静态内部类

  1. 在成员内部类加static,效果是无法访问内部类的非静态方法,因为静态内部类加载在实例化之前。

成员内部类(在方法中)

  1. 可以访问方法的局部变量
  2. 不可以使用修饰符(no public...、static)
  3. 可以访问外部类
  4. 调用内部类的方法需要在 内部类之外,方法之外 实例化+调用
public class Outer {
    String name ="外部类";
    public void method() {
         class Inner{
            String name="内部类";
            public void print(){
                System.out.println(name);
                System.out.println(Outer.this.name);
            }
        } //局部内部类之外,方法之内
        Inner in = new Inner();
        in.print();
    }
}

public static void main(String[] args) {
        Outer out = new Outer();
        out.method();
    }

匿名内部类(方法内)

  1. 一般用于隐含的实现接口
  2. 调用内部类的方法,一般“自产自销”。内部类的}后面直接调用内部类的方法。注意;号
public class Outer {
    public void method() {
        new UserService(){
            @Override
            public void run() {
                System.out.println("匿名内部类");
            }
        }.run();  //自产自销
    }
}

public class Application {
    public static void main(String[] args) {
        Outer outer = new Outer();
        outer.method();
    }
}

标签:Java,内部,代码,void,Outer,new,public,out
From: https://www.cnblogs.com/its1440/p/17517699.html

相关文章

  • JAVA石头迷阵游戏
    大家帮我看看这个代码有没有问题,为什么将z设为作弊器但是在IDE中运行出来没有用//测试类importjavax.swing.*;publicclassTest{publicstaticvoidmain(String[]args){newMainFrame();}}importjavax.swing.*;importjava.awt.event.ActionEvent;......
  • java相关
    1、java环境建立2、windows系统下maven环境设置windows系统下下载二进制包apache-maven-3.6.0-bin.zip,然后解压。 第二种方法:使用绝对路径添加maven环境变量,直接在path里面的最前面添加c:\maven\bin;4、windows安装tomcat  设置环境变量也用绝对路径下载https://tomcat.apache.......
  • R语言中的LDA模型:对文本数据进行主题模型topic modeling分析|附代码数据
    原文链接:http://tecdat.cn/?p=4333 最近我们被客户要求撰写关于LDA模型的研究报告,包括一些图形和统计输出。主题建模在文本挖掘中,我们经常收集一些文档集合,例如博客文章或新闻文章,我们希望将其分成组,以便我们可以分别理解它们。主题建模是对这些文档进行无监督分类的一种方法......
  • R语言之文本分析:主题建模LDA|附代码数据
    原文链接:http://tecdat.cn/?p=3897最近我们被客户要求撰写关于主题建模LDA的研究报告,包括一些图形和统计输出。文本分析:主题建模 library(tidyverse)theme_set( theme_bw())目标定义主题建模解释LatentDirichlet以及此过程的工作原理演示如何使用LDA从一组已知主题......
  • 共享单车数据可视化分析|附代码数据
    全文下载链接 http://tecdat.cn/?p=1951最近我们被客户要求撰写关于共享单车的研究报告,包括一些图形和统计输出。随着智能手机的普及和手机用户的激增,共享单车作为城市交通系统的一个重要组成部分,以绿色环保、便捷高效、经济环保为特征蓬勃发展作为城市共享交通系统的一个重要......
  • 拓端tecdat|R语言贝叶斯Metropolis-Hastings Gibbs 吉布斯采样器估计变点指数分布分析
    原文链接:http://tecdat.cn/?p=26578 原文出处:拓端数据部落公众号最近我们被客户要求撰写关于吉布斯采样器的研究报告,包括一些图形和统计输出。指数分布是泊松过程中事件之间时间的概率分布,因此它用于预测到下一个事件的等待时间,例如,您需要在公共汽车站等待的时间,直到下一班车......
  • 查centos7系统开机启动错误代码方法
    把rhgbquiet删掉,回车,按Ctrl+x重新引导系统,这样就能看到到底是哪一步卡住了,导致我们系统启动不起来。。 ......
  • 冒泡、选择、插入、归并、快速排序代码
    importrandom#随机生成包含10个元素的数组random.seed(10)alist=[random.randint(1,100)for_inrange(10)]冒泡排序'''冒泡排序每轮相邻的两个元素,两两相比,此轮最大的元素,像泡泡一样移动到队列尾部。每次j和j+1位置比较,胜者冒出去'''defbubble_sort(arr)......
  • Java 期中考试及pta4、5总结
    菜单计价1~3(1)前言:期中考试的题目比较简单但是具有典型意义,ptA的题和之前的大差不差,所以会省略一些总体来说这几次作业还是对Java的学习有较大的帮助的,需要认真对待(2)设计与分析:一测验1-圆类设计下面是题目要求:7-1测验1-圆类设计分数 12......
  • centos7安装java
    1.tar-zxvfjdk-8u11-linux-x64.tar.gz 2.编辑环境变量vim/etc/profile 3.source/etc/profile4.java-version ......