java 内部类

news2024/11/15 7:15:08

小镇做题家

前段时间很火的一个话题“小镇做题家”,我没有具体了解,我以为是在鼓励一些努力拼搏的人。

某一天,禁不住好奇,我打开了百度百科,看了看小镇做题家的解释

在这里插入图片描述

就是指一些村里或者小镇的人,通过学习,高考,突破自我,进入一流高校,但是由于生长环境不同,在视野和社会资源上略显不足的。

这个词儿其实也没有什么特殊的,我也经常自嘲到:我村里出来的,不懂这些,但我尽可能去学习,弥补不足。

但为什么“小镇做题家”就突然火了呢?

起因是《中国新闻周刊》公众号,一个很权威的新闻周刊公众号,发布了一篇文章,文章里有一些话:

考编的普通人大有人在,这些小镇做题家每天上班培训,做真题卷,也仍然考不中那个能为他们带来安全感的编制内职务。所以当看见能从市场上赚大钱的明星,还要分走几个编制内身份时,总觉得抢了自己的坑。但是这是一种幻觉,似乎认为自己的低收入,是因为明星从既定的盘子里抢走了自己的那一份。

这句话仔细分析也就仅仅是抱怨一下那些在网络上抨击易烊千玺等考编的网友。也没什么大错,他错就错在

第一:用了“小镇做题家”这个词儿,小镇做题家,本是一个中意词,顶多带点儿自嘲。但是自嘲与被嘲笑性质可不一样。

第二:他说这些小镇做题家,他把所有人都包含了进去。

第三:他根本没懂什么是小镇做题家,小镇做题家描述很清楚:高考进入一流高校,他没有去调研,进入一流高校的人,有多少人会有空闲时间在网络上发表评论。

第四:这是一个权威的平台,却似一个怨妇一样,在这里进行抱怨。实则不该

当然了,人家文章说的是小镇做题家 ,我顶多算是小镇错题家 ,普通二本毕业的人,已经配不上《中国新闻周刊》来讽刺了。

我个人理解,那些明星,诸如易烊千玺等,不管是通过人脉还是通过本事,去考编,没有什么问题,非常的正常。我要有那么多人脉,我肯定已经躺平了,谁还在这跪着赚钱。

当然了,作为没有人脉的我们,只能通过所谓的“真题卷”,来提升自己在社会的价值。

作为程序员,我们的“真题卷”,就是新知识,新认知,不断地学习知识,不断地提升认知。

下边我们就来做一个真题:内部类

一、什么是内部类

内部类就是在类里边再定义另一个类。

内部类可以让Java支持多重继承(甚至有的面试官,拿这个来面试,问你,Java只支持单继承吗?我想多继承怎么办,甚是无聊…)

二、常见内部类?

2.1 静态内部类

静态内部类就是用static修饰的内部类。

静态内部类不需要依赖外部类,不能使用外部类的非static成员或者方法。

静态内部类能声明静态成员和非静态成员。

我们最熟悉的就是单例模式的一种实现方式了:

/**
 * @author 木子的昼夜编程
 */
public class SingleCase {
    public static void main(String[] args) {
        System.out.println(SingleCase.getInstance());
    }

    private SingleCase(){}

    // 静态内部类
    private static class SingleTolHoler{
        private static SingleCase INSTANCE = new SingleCase();
    }

    // 使用
    public static SingleCase getInstance(){
        return SingleTolHoler.INSTANCE;
    }
}

2.2 成员内部类

在类的内部方法的外部编写的类就是成员内部类(非static修饰)

成员内部类可以无条件访问外部类的所有成员属性和方法(包括private和static成员)。

同名属性和方法访问外部类的方式:外部类.this.成员名

成员内部类不允许定义static的成员和方法。

演示走起:

package test;

/**
 * @author 木子的昼夜编程
 */
public class InnserClassTest {
    public static void main(String[] args) {
        // 外部类初始化
        InnserClassTest outer = new InnserClassTest();
        outer.age = 18;
        outer.name = "诸葛十三";
        InnserClassTest.salary = 100;
        // 内部类初始化 这个写法很不一样
        Inner inner = outer.new Inner();
        inner.age = 13;
        inner.name = "欧阳小明";
        inner.show();
    }
    // 外部类属性
    String name;
    private int age;
    static float salary;
    String other;
    // 外部类方法
    private void showAge(){
        System.out.println("外部类:"+age);
    }
    public void showName(){
        System.out.println("外部类:"+name);
    }
    static void showSalary(){
        System.out.println("外部类:"+salary);
    }
    public void showOtherInfo(){
        System.out.println("外部类:"+other);
    }

    // 内部类
    public class Inner{
        // 内部类属性
        String name;
        private int age;
        //static float salary; 会报错
        // 内部类方法
        private void showAge(){
            System.out.println("内部类:"+age);
        }
        public void showName(){
            System.out.println("内部类:"+name);
        }
        // 非同名属性
        public void showOther(){
            System.out.println("内部类使用外部类成员:"+other);
        }
        // 会报错
        /*static void showSalary(){
            System.out.println(salary);
        }*/
        public void  show(){
            // 调用内部类自己方法
            showAge();
            showName();
            showOther();
            // 调用外部类普通方法(同名)
            InnserClassTest.this.showAge();
            InnserClassTest.this.showName();
            // 调用外部类普通方法(非同名)
            showOtherInfo();
            // 调用外部类静态方法
            InnserClassTest.showSalary();
        }
    }
}

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-X085BzJs-1667052158878)(18.内部类-旧版.assets/image-20220827110130110.png)]

2.3 局部内部类

编写在方法内的类称之为局部内部类

局部内部类定义在一个方法或者作用域里边,他的被访问权限仅仅限于方法或作用域。

局部内部类不能使用权限修饰符、静态修饰符进行修饰。

局部内部类可以直接访问方法或作用域内属性。

局部内部类可以直接访问外部类中属性和方法。

局部内部类创建对象需要在方法内部,局部内部类外部声明。

演示走起:

package test;

/**
 * @author 木子的昼夜编程
 */
public class InnerClassTest02 {
    public static void main(String[] args) {
        new InnerClassTest02().hello();
    }
    // 外部类属性
    String name ="诸葛十三";
    private int age = 13;
    static float salary = 4000000;
    String other = "其他属性";
    // 外部类方法
    private void showAge(){
        System.out.println("外部类:"+age);
    }
    public void showName(){
        System.out.println("外部类:"+name);
    }
    static void showSalary(){
        System.out.println("外部类:"+salary);
    }
    public void showOtherInfo(){
        System.out.println("外部类:"+other);
    }

    public void hello(){
        String name = "欧阳小明"; // jdk1.8后会自动添加finaly
        int age = 13;
        class Inner{
            String name = "轱辘娜扎";
            public void showInfo(){
                String name ="内部类方法变量";
                // 使用外部类属性
                System.out.println("外部类属性同名name:"+InnerClassTest02.this.name);
                System.out.println("外部类属性同名age:"+InnerClassTest02.this.age);
                System.out.println("外部类属性static修饰salary:"+InnerClassTest02.salary);
                System.out.println("外部类属性,非同名other:"+other);
                // 使用作用域(方法变量)
                System.out.println("方法变量:"+age);
                // 使用类自己属性
                System.out.println("内部类自己属性:"+this.name);
                // 内部类方法变量
                System.out.println("内部类方法变量:"+name);
                // 调用外部类方法
                showName();
                showAge();
                showOtherInfo();
                showSalary();
            }
        }
        // 只能在方法内使用局部内部类  而且是在类定义后边
        Inner inner = new Inner();
        inner.showInfo();
    }
}

我们发现欧阳小明没法访问了,我们这里描述的情况是很特殊的,真正写代码的时候,是不会允许这么多重名的。

所以不用担心~~~

2.4 匿名内部类

匿名内部类顾名思义,就是一个没有名字的内部类。

我们在学习Java之初就用到过,创建线程,在直接使用Runnable的时候,我们做接口实现

package test;

/**
 * @author 木子的昼夜编程
 */
public class InnserClassTest03 {
    public static void main(String[] args) {
        new Thread(new Runnable() {
            @Override
            public void run() {
                System.out.println("run");
            }
        }).start();
    }
}

我们自定义一个类似的例子:

package test;

/**
 * @author 木子的昼夜编程
 */
public class InnserClassTest03 {
    public static void main(String[] args) {
        // 方法参数直接new 接口
        InnserClassTest03.showMsg(new Person() {
            @Override
            public String showMsg() {
                return "匿名内部类";
            }
        });
        // 可以这样写
        InnserClassTest03.showMsg(() -> {
            return "匿名内部类";
        });
        // 这样写
        InnserClassTest03.showMsg(() -> "匿名内部类");
        // 也可以直接创建对象
        Person p = new Person() {
            @Override
            public String showMsg() {
                return "匿名内部类";
            }
        };
        System.out.println(p.showMsg());
    }
    //
    public static void showMsg(Person p) {
        System.out.println(p.showMsg());
    }
}

interface Person{
    public abstract String showMsg();
}

亲爱的《中国新闻周刊》村里出来的人,没有你们想象的那么的脆弱,那么的埋怨世界,他们或许有些自卑,或许有些不甘,或许有些抱怨,但他们都在努力的生活着,努力的为这个社会做着一点点贡献,请不要磨灭这群人的热情。

不明白你为什么删除了这一文章之后,又发布了一条“攻击型人格”。

看到一个网友说的话,禁不住笑了:

网友:我发现某些明星考编违规!

某媒体:别眼红人家,你这小镇做题家思维。

网友:我有证据!

某媒体:有这功夫你还不如好好反省自己,你的性格是攻击型人格,你知道吗?

网友:对对对,你说什么都对。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1881.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

模板和泛型编程(上)

目录函数模板泛型编程函数模板概念及原理函数模板的实例化函数模板的匹配原则类模板类模板实例化函数模板 泛型编程 泛型编程(Generic Programming)最初提出时的动机很简单直接:发明一种语言机制,能够帮助实现一个通用的标准容器…

猿创征文|Python迭代器、生成器、装饰器、函数闭包

欢迎关注博主 Mindtechnist 或加入【Linux C/C/Python社区】一起探讨和分享Linux C/C/Python/Shell编程、机器人技术、机器学习、机器视觉、嵌入式AI相关领域的知识和技术。 Python迭代器、生成器、装饰器、函数闭包1. 迭代器 iterator☞迭代器协议☞Python中的for循环2. 生成器…

C语言qsort()函数针对:整型、单个字符、字符串、结构体,超详细讲解(多维度分析举例,小白一看就懂!!!!!)

目录 一、前言 二、qsort()函数 🍑qsort()函数简介 🍉qsort()函数中整型、double型、字符型的应用 💦整型 💦 double型 💦字符排序 🍎qsort()函数在字符串中的应用 💦在字符串中按首字母…

Android NDK开发基础

文章目录cmake语法基础cmake添加日志:cmake增加宏字符串比较cmake在build.gradle中传递编译参数到cmake通过javah生成native对应的c头文件jni和java之间字符串的相互操作JavaVM和JNIEnv字符串的编码native方法静态注册和动态注册静态注册动态注册extern cC中STATIC和…

SpringCloud Alibaba-Sentinel保姆级教程

文章目录1、Sentinel前奏1.1、服务雪崩效应1.2、常见容错方案1、隔离2、超时3、限流4、熔断5、降级1.3、常见容错组件1、Hystrix2、Resilience4J3、Sentinel2、Sentinel入门2.1、什么是Sentinel2.2、实战编码1、安装Sentinel服务端2、微服务引入Sentinel2.3、Sentinel流控模式1…

YOLOv5蒸馏 | 知识蒸馏理论篇 | 1/2

之前在《一文搞懂【知识蒸馏】【Knowledge Distillation】算法原理》这篇文章中介绍过一些知识蒸馏的原理,这篇博文将会着重介绍目标检测领域的知识蒸馏原理。 文章目录 1.《Object detection at 200 Frames Per Second》1.1 蒸馏难点1.2 蒸馏损失1.3 实验结果2. 《Learning E…

计算机毕业设计ssm+vue基本微信小程序的体检预约小程序

项目介绍 我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,体检预约系统小程序被用户普遍使用,为方便用户…

【前端】CSS(1) —— CSS的基本语法和一些简单的选择器

JavaEE传送门JavaEE 网络原理——网络层与数据链路层 【前端】HTML入门 —— HTML的常见标签 目录CSS基本语法注释引入方式内部样式内联样式外部样式代码风格样式格式样式大小写空格规范CSS 选择器标签选择器类选择器id 选择器通配符选择器复合选择器后代选择器子选择器并集选…

文件包含漏洞和hash破解

介绍 Windows是当今世界最主要的操作系统,因为它易于使用的GUI可访问性。大约85%的市场份额已成为攻击的关键操作系统。此外,大多数组织使用Active Directory来设置其Windows域网络。微软聘请NTLM(New Technology LAN Manager)和…

Pico Neo3 4VR游戏下载地址及十大好玩游戏推荐

大家好,杰克今天为大家分享的是VR一体机游戏。 说到VR一体机,我们首先想到的一定是国产之光pico啦,picovr被认为是国内最被看好的VR一体机,有望在国内取代红极一时的OculusQuest,填补这块市场的空白。OculusQuest将6D…

#Primavera Unifier:关于零代码/低代码平台特点【2/3】

在之前对Unifier的介绍中,我提到了Unifier应用的一个非常关键的特征,及零代码快速配置使用,而为了更好的介绍Oracle Primavera Unifier 的零代码特点,以下我将通过3篇内容来逐一介绍零代码/低代码平台的特点。 前面介绍到了零代码…

Opencv项目实战:14 手势控制音量

目录 0、项目介绍 1、项目展示 2、项目搭建 3、项目的代码与讲解 4、项目资源 5、项目总结 0、项目介绍 本篇与上一篇有很多联系,大家可以看看这篇Opencv项目实战:13 手部追踪,我们将根据上一节的内容,进行一个拓展。本篇你…

AtCoder Beginner Contest 275 【E】【F】

E - Sugoroku 4 【概率dp】 题意: 对于每个样例,读入n,m,k。 一维数轴,你现在在0这个点上,目标是到达n这个点,你有k次掷骰子的机会,每次可能等概率的掷出1~m的任意一个数字&#xff…

面了一个4年经验的测试工程师,自动化都不会也要15k,我真是醉了...

在深圳这家金融公司也待了几年,被别人面试过也面试过别人,大大小小的事情也见识不少,今天又是团面的一天, 一百多个人都聚集在一起,因为公司最近在谈项目出来面试就2个人,无奈又被叫到面试房间。 整个过程…

.NET Core HttpReports 监控

HttpReports 基于.NET Core 开发的APM监控系统,使用MIT开源协议,主要功能包括,统计, 分析, 可视化, 监控,追踪等,适合在中小项目中使用。 语雀:https://www.yuque.com/httpreports/docs/uyaiil …

SQL注入之绕过is_numeric过滤

目录预备知识PHP常用的过滤类函数is_numeric()函数介绍实验目的实验环境实验步骤一通过源代码审计,发现临时文件实验步骤二通过分析源代码的执行逻辑,了解程序的功能,发现程序中的安全漏洞实验步骤三绕过过滤函数实现SQL注入预备知识 PHP常用…

Linux进程信号

文章目录什么是信号signal函数的功能(捕捉信号后自己处理)Core Dump(核心转储)kill,raise,alarm系统调用再度理解OS给进程发送信号信号集操作函数自定义捕捉详解什么是信号 生活中的信号:闹钟&…

0083 环形链表

package LinkedList_; /* * 单向环形链表应用场景——约瑟夫问题 * 设编号为1&#xff0c;2....n的n个人围成一圈&#xff0c;约定编号为k&#xff08;1<k<n&#xff09;的人从1开始报数&#xff0c;数到m的人出列&#xff0c; * 它的下一位又从…

黑胶歌曲没权限,还好我会Python,一分钟一个歌单,硬盘有点不够用了~

今日份Python白嫖人生苦短&#xff0c;我用Python一、你需要准备1、环境2、模块二、效果展示三、代码展示四、写在最后人生苦短&#xff0c;我用Python 人之初&#xff0c;喜白嫖。大家都喜欢白嫖&#xff0c;我也喜欢&#xff0c;那么今天就来试试怎么白嫖抑云~ 我不是&#…

React面向组件编程(定义组件,组件三大核心属性,组件事件处理、组件收集表单数据、高阶函数和函数的柯里化)

目录 一、React中定义组件 1、函数式组件 2、类式组件 二、组件三大核心属性 1、组件三大核心属性1: State(状态) 2、组件三大核心属性2: props 3、组件三大核心属性3: ref 三、组件事件处理 1、事件处理 四、组件收集表单数据 1、受控组件 2、非受控组件 五、高阶函…