09.常用类总结

news/2024/11/17 10:50:56/

1.内部类

内部类特点:

  • 编译后可生成独立得字节码文件
  • 内部类可直接访问外部类的私有成员
  • 可为外部类提供必要的内部组件

1.成员内部类

  • 当作外部类的成员变量使用
  • 里面不能声明静态成员,但可以声明静态常量
  • 可以new多个对象
//分步创建内部类对象
Outer outer = new Outer();
Outer.Inner inner = outer.new Inner();
//合并创建内部类对象
Outer.Inner inner = new Outer().new Inner();

2.静态内部类

  • 当作外部类的静态成员变量使用
  • 不依赖外部类对象,可以直接创建或通过类名访问
  • 可声明静态成员。
  • 可以把静态内部类当成一个正常的类来使用
  • 只有静态内部类才可以使用static修饰。普通类是不可以使用static修饰的,因为类加载,是依靠外部类的。所以普通类没有外部类,所以不能用static修饰!

定义静态内部类:

package com.qianfeng.demo02;
public class Outer {
private String name = "张三";
private int age = 20;
private static String sex = "男";//外部类的静态成员
static class Inner{
private String phone = "110";
private String address = "沈阳";
private String name = "李四";//与父类重名属性
//可以定义静态成员和静态常量
private static String contry = "中国";
private static final String word = "汉语";
public void show(){
//访问外部类成员 Outer.this.属性名
System.out.println(name);//当外部类与内部类存在同名属性时,优先访问内部类属//如果访问外部类的成员属性,则必须创建外部类对象再访问
Outer outer = new Outer();
System.out.println(outer.name);//访问外部类属性
System.out.println(outer.age);
System.out.println(Outer.sex);//可以直接通过外部类的类名访问外部类的静态属//访问内部类成员
System.out.println(this.phone);
System.out.println(this.address);
System.out.println(contry);
System.out.println(word);
}
}
}

测试:

public class Test {
public static void main(String[] args) {
Outer.Inner inner = new Outer.Inner();
inner.show();
}
}

3.局部内部类

  • 局部内部类不可以加任何访问修饰符
  • 因为当作局部变量来使用
  • 局部内部类中不可以定义静态成员,但可以定义静态常量
  • 局部内部类成员变量与所在方法的局部变量重名时,会覆盖局部变量
package com.qianfeng.demo03;
public class Outer {
private String name = "张三";
private int age = 20;
//外部类方法
public void outMethod(){
//这里必须是final常量,在jdk1.7时,局部变量定义时必须显示加final关键字,JDK1.8以后
自动加final,不需要显示写
final String phone = "110";
//局部内部类
class Inner{
String address = "沈阳";
String phone = "220";//覆盖上面的final String phone = "110";
//不可以包含静态成员
//private static String contry = "中国";
//可以定义静态常量
private final static String contry = "中国";
public void show(){
//如果外部类方法是静态时需要创建对象再访问
/* Outer outer = new Outer();
//访问外部类的属性
System.out.println(outer.name);
System.out.println(outer.age);*/
//如果外部类方法是非静态方法则可以直接访问外部类属性
System.out.println(name);
System.out.println(age);
//访问方法中的局部变量,这里的局部变量必须是常量
//然而这个局部变量在后面是不可以改变它的值的
System.out.println(phone);
//访问内部类的属性
System.out.println(address);
}
}
//创建内部类对象
Inner inner = new Inner();
inner.show();
}
}

测试:

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

4.匿名内部类

package com.qianfeng.demo04;
public class Test {
public static void main(String[] args) {
//使用接口创建鼠标对象
/*Usb usb = new Mouse();
usb.service();*/
//创建一个局部内部类
/*class Fan implements Usb{
@Override
public void service() {
System.out.println("风扇链接成功,开始工作.............");
}
}
Usb fan = new Fan();
fan.service();*/
//如果某些类只被使用一次,后面不再使用,可以将其定义成匿名内部类
Usb keybord = new Usb() {
@Override
public void service() {
System.out.println("键盘连接成功,开始工作............");
}
};
keybord.service();
}
}

2.Object类

1.getClass()

返回引用中存储的对象实际类型,返回的是类的字节码对象(反射)。

2.hashCode()

返回一个对象的十进制哈希码值。哈希算法根据对象地址或字符串或数字计算出来的int类型的数值。

1.常见哈希码

1、Object类的hashCode返回对象的内存地址经过处理后的结构,由于每个对象的内存地址都不一

样,所以哈希码也不一样。

2、String类的hashCode根据String类包含的字符串的内容,根据一种特殊算法返回哈希码,只要字符

串所在的堆空间相同,返回的哈希码也相同。

3、Integer类,返回的哈希码就是Integer对象里所包含的那个整数的数值,例如Integer i1=new

Integer(100),i1.hashCode的值就是100 。由此可见,2个一样大小的Integer对象,返回的哈希码也一

样。

3.toString()

返回一个对象的字符串表示(表现形式)

一般都是重写,把对象转化为字符串

4.equals()

对象类型:默认用的是Object类中的equals方法,比较地址,这是原生的,其他都是继承Object类的。

String类:默认比较字符串内容,重写过。

Number类型:默认比较整数值,重写过。

5.finalize()

  • 当对象被判定为垃圾对象时,由JVM自动调用此方法,用以标记垃圾对象,进入回收队列。
  • 垃圾对象指的是没有有效引用指向的对象
  • 垃圾回收,由GC销毁垃圾对象,释放数据存储空间
  • 自动垃圾回收机制:JVM的内存耗尽,一次性回收所有垃圾对象。
  • 手动回收机制:使用System.gc();通知JVM执行垃圾回收。
  • 程序员一般不做垃圾回收操作,都是由系统自动完成,即使调用System.gc()也只是通知,但具体
  • 是否回收还是由系统来决定

案例:

@Override
protected void finalize() throws Throwable {
System.out.println(this.name+"被回收了");
}

测试:

package com.qianfeng.lianxi06;
public class Test04 {
public static void main(String[] args) {
Person p1 = new Person("张三1",23);
Person p2 = new Person("张三2",24);
Person p3 = new Person("张三3",25);
Person p4 = new Person("张三4",26);
Person p5 = new Person("张三5",27);
p1 = new Person("李四1",23);
p2 = new Person("李四2",24);
p3 = new Person("李四3",25);
p4 = new Person("李四4",26);
p5 = new Person("李四5",27);
System.gc();
}
}

3.包装类

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RR2PwEH4-1685336299088)(C:\Users\蒋铭基\AppData\Roaming\Typora\typora-user-images\image-20230525082314647.png)]

1.装箱

基本类型-----包装类(引用类型)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ge9HYw6p-1685336299090)(C:\Users\蒋铭基\AppData\Roaming\Typora\typora-user-images\image-20230525083119298.png)]

装箱方法:(基本类型----引用类型)

  • 使用构造方法 Integer i = new Integer(10); 等价于把基本类型10封装到Integer对象中

  • 使用Integer.valueOf(num);Double.valueOf(num)静态方法

    2.拆箱

包装类(引用类型)------基本类型 拆箱

对象名.intValue();

1.装箱

基本类型-----包装类(引用类型)

[外链图片转存中…(img-ge9HYw6p-1685336299090)]

装箱方法:(基本类型----引用类型)

  • 使用构造方法 Integer i = new Integer(10); 等价于把基本类型10封装到Integer对象中

  • 使用Integer.valueOf(num);Double.valueOf(num)静态方法

    2.拆箱

包装类(引用类型)------基本类型 拆箱

对象名.intValue();


http://www.ppmy.cn/news/102093.html

相关文章

c++—继承、继承方式

1. c三大核心功能 (1)封装:提高代码的维护性,遇到问题可以准确定位; (2)继承:提高代码的复用性,注意不是ctrlc,ctrlv,而是不做任何修改或操作源码就能实现代码…

算法设计 || 实验四 回溯算法-八皇后问题(纯手敲保姆级详细讲解+小白适用+头歌解析)

(一)八皇后问题描述 在一个8x8的棋盘上放置8个皇后,使得每个皇后都不会互相攻击,即任意两个皇后都不能在同一行、同一列或同一条对角线上。 (二)算法思路 由于八皇后问题的解法数量较多,本文将介…

Shell脚本case in esac分支语句应用

记录:434 场景:Shell脚本case in esac分支语句应用。 版本:CentOS Linux release 7.9.2009。 1.case in esac格式 格式: case 值 in 模式1)expression;; 模式2)expression;; 模式n)expression;; esac 解析:case…

设计模式之美-导读

本篇思考的问题:面向对象、设计原则、设计模式、编程规范、重构,这五者有何关系? 现在编程风格有三种,它们分别是面向过程、面向对象和函数式编程。面向对象这种编程风格又是这其中最主流的。大部分项目也都是基于面向对象编程风格…

vue-i18n 安装依赖失败

报错信息 报错原因是:版本不匹配 npm view vue-i18n versions --json 查看所有的版本,选择安装合适的版本即可 我最后安装的是5.0.0版本的,无报错 npm install vue-i18n5

【华为OD统一考试B卷 | 100分】数组拼接(C++ Java JavaScript Python)

文章目录 题目描述输入描述输出描述ACM输入输出模式用例机考代码查重C++javapythonjavaScript题目描述 现在有多组整数数组,需要将它们合并成一个新的数组。 合并规则,从每个数组里按顺序取出固定长度的内容合并到新的数组中,取完的内容会删除掉, 如果该行不足固定长度或者…

Linux之管道

目录 Linux之管道 操作符号 作用 用法 管道符使用场合 匿名管道与命名管道的区别 如何创建命名管道 案例举例 案例1 --- 将/etc/passwd中的用户按UID大小排序 案例2 --- 统计出最占CPU的5个进程 案例3 --- 统计当前/etc/passwd中用户使用的shell类型 案例4 --- 统计网站…

PowerShell:因为在此系统上禁止运行脚本,解决方法

运行powershell脚本遇见报错: 无法加载文件 C:\Users\DH\Desktop\cs\rename.ps1,因为在此系统上禁止运行脚本。有关详细信息,请参阅 https:/go.microsoft.com/fwlink/?LinkID135170 中的 about_Execution_Policies。 查了查之后发现是在计算…