当前位置: 首页 > news >正文

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() {@Overridepublic 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);   //返回一个新创建好的对象
}

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

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 不同型号的GD32 MCU如何区分?
  • C语言——基础框架、变量、运算符
  • jmeter-beanshell学习6-beanshell生成测试报告
  • Java:构造函数与对象
  • 服务器怎么进PE系统?
  • Wintopay - 一站式国际支付收款平台
  • leetcode74. 搜索二维矩阵
  • 一周涨8K star!RAG技术迎来大升级,速度关注
  • Postgresql - 用户权限数据库
  • Python酷库之旅-第三方库Pandas(017)
  • 5G中的RedCap
  • 【源码开源】C#桌面应用开发:串口调试助手
  • JS爬虫实战之极验四代
  • C# Winform之propertyGrid控件使用详解和分组设置
  • 这个软件可无限制免费领取金币,领取后即可自由实现AI文生图,AI Chat及其AI文生PPT等AI功能
  • CSS实用技巧
  • React16时代,该用什么姿势写 React ?
  • Spring Boot快速入门(一):Hello Spring Boot
  • text-decoration与color属性
  • vue学习系列(二)vue-cli
  • windows下如何用phpstorm同步测试服务器
  • 成为一名优秀的Developer的书单
  • 开发了一款写作软件(OSX,Windows),附带Electron开发指南
  • 力扣(LeetCode)56
  • const的用法,特别是用在函数前面与后面的区别
  • ​DB-Engines 12月数据库排名: PostgreSQL有望获得「2020年度数据库」荣誉?
  • ​flutter 代码混淆
  • ​io --- 处理流的核心工具​
  • ​LeetCode解法汇总518. 零钱兑换 II
  • #NOIP 2014# day.1 T3 飞扬的小鸟 bird
  • #在线报价接单​再坚持一下 明天是真的周六.出现货 实单来谈
  • $ is not function   和JQUERY 命名 冲突的解说 Jquer问题 (
  • (10)STL算法之搜索(二) 二分查找
  • (附源码)spring boot智能服药提醒app 毕业设计 102151
  • (含笔试题)深度解析数据在内存中的存储
  • (转)ORM
  • (转)创业的注意事项
  • (转)负载均衡,回话保持,cookie
  • .NET / MSBuild 扩展编译时什么时候用 BeforeTargets / AfterTargets 什么时候用 DependsOnTargets?
  • .net core 微服务_.NET Core 3.0中用 Code-First 方式创建 gRPC 服务与客户端
  • .Net Core中Quartz的使用方法
  • .Net Redis的秒杀Dome和异步执行
  • .NET 反射的使用
  • .Net组件程序设计之线程、并发管理(一)
  • @reference注解_Dubbo配置参考手册之dubbo:reference
  • [1]-基于图搜索的路径规划基础
  • [12] 使用 CUDA 进行图像处理
  • [AI]文心一言出圈的同时,NLP处理下的ChatGPT-4.5最新资讯
  • [Angular] 笔记 6:ngStyle
  • [ARC066F]Contest with Drinks Hard
  • [AutoSar]状态管理(五)Dcm与BswM、EcuM的复位实现
  • [BUG] Hadoop-3.3.4集群yarn管理页面子队列不显示任务
  • [BZOJ 1032][JSOI2007]祖码Zuma(区间Dp)
  • [BZOJ 1040] 骑士
  • [bzoj4010][HNOI2015]菜肴制作_贪心_拓扑排序