首页 > 其他分享 >常用类

常用类

时间:2022-09-19 23:22:15浏览次数:63  
标签:常用 内部 对象 System println out String

内部类是在一个类内部再定义一个完整的类

内部类可以编译后生成独立字节码文件

内部类可以直接访问外部类的私有成员

内部类可以为外部类提供必要的内部功能组件

成员内部类(demo05)

在类内部定义,与属性和方法是同级别的类

在实例化内部类之前要先实例化外部类

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

是当内部类和外部类属性重名时,优先访问内部类属性

如果要访问其中外部内属性可以加上Outerus.this

成员内部类中不能定义静态成员,但可以定义静态常量

静态内部类(demo06)

不依赖外部类对象,可以直接创建或直接用类名访问,可以声明静态成员

如果要在静态内部类中访问外部类属性需要在内部类中实例化外部内对象,然后调用。

静态内部类调用自己的静态成员和非静态成员可以直接调用

public class Outer {
private String name="cs";
private int age=23;
static class Inner{
private String address="sh";
private String phone="123";
private static int count=1000;
public void show(){
Outer outer=new Outer();
System.out.println(outer.name);
System.out.println(outer.age);
System.out.println(Inner.count);
System.out.println(address);
System.out.println(phone);
System.out.println(count);
}
}
}

局部内部类(demo07)

定义在外部内方法中,只能作用于当前方法

局部内部类前不能加任何修饰符

局部内部类无法直接访问当前方法中的局部变量,可将其定义为常量进行访问

在局部内部类中可以直接访问外部类和内部类的属性

如果要访问局部内部类中的方法必须在当前方法中实例化内部类对象再执行,否则使用外部类中包含内部类的方法时无法执行内部类中的方法。

public class Outer {
private String name="cs";
private int age=20;
public void show(){
String address="sz";
class Inner {
private String phone="1113250240";
private String email="[email protected]";
public void show2(){
//访问外部类属性
System.out.println(name);
System.out.println(age);
System.out.println(phone);
System.out.println(email);
System.out.println();
//访问局部变量
System.out.println(address);//address为常量

}
}

Inner inner=new Inner();
inner.show2();
}
}

匿名内部类

必须继承一个父类或者实现一个接口

是定义类、实现类、实例化对象的语法合并,只能实例化一次。

public static void main(String[] args) {
//成员内部类
/* UsbService usbService=new Mouse();
usbService.service();

class Fan implements UsbService{
@Override
public void service() {
System.out.println("连接成功,风扇开始转动");

}
}*/
UsbService usbService=new UsbService() {
@Override
public void service() {
System.out.println("连接成功,风扇开始转动");
}
};
usbService.service();

}


Obeject类(demo09)

所用类的直接或间接父类,位于继承树顶层

Obeject类中定义的方法,是所有类都具备的方法。

getClass()方法可以返回引用中存储的实际对象类型.通常用于判断两个对象是否一致

hashCode()方法方法返回对象的哈希值

哈希值是根据对象的地址或者字符串或数字使用hash算法计算出来的int类型的数值

一般情况下相同对象返回相同哈希值

toString()方法

返回该对象的字符串表示

可将程序覆盖展示对象的各项属性

@Override
public String toString() {
return name+";"+age;
}

equals()方法

比较两个对象地址值是否相同

可将equals()方法覆盖比较各个属性值是否相同

@Override
public boolean equals(Object obj) {
//判断两个对象是否指向同一个地址
if(this==obj){
return true;
}
//判断obj是否为空
if(obj==null){
return false;
}
//判断两个引用指向的对象类型是否一致。还可用instanceof来判断
if(this.getClass()==obj.getClass()){
Students s=(Students) obj;
//比较属性
if(this.name.equals(s.getName())&&this.age==s.getAge())
return true;
}

return false;
}

finalize()方法

当对象被判定为垃圾对象时,由JVM自动调用此方法,用来标记对象,进行回收。

垃圾对象是指没有被有效引用指向的对象

垃圾回收:由GC销毁垃圾对象,释放存储空间。

使用System.gc()手动回收。

标签:常用,内部,对象,System,println,out,String
From: https://www.cnblogs.com/zlsame/p/16709541.html

相关文章

  • linux常用命令
    1、文件拷贝mv{OldFileName}{NewFileName}mv{OldDirName}{NewDirName}cp{OldFileName}{NewFileName}#-r递归操作cp-r{OldDirName}{NewDirName} 2、权......
  • STL常用基础模板
    STL模板:堆头文件:#include<queue>大根堆:priority_queue<int>q;小根堆:priority_queue<int,vector<int>,greater<int>>q;操作:q.top()//取得堆顶元素,并不会弹出q.pop......
  • 常用linux命令
    1.系统相关uname-a显示当前系统相关信息sudo临时获取超级用户权限suroot切换root用户sudoshutdown关机sudoreboot重启sudonautilus进入有root权限......
  • 【VSCode】前端常用插件
    1、别名路径跳转插件名称:别名路径跳转配置说明:下载后只需自定义配置一些自己常用的别名路径即可场景:2、路径别名智能提示插件名称:path-alias场景:3、自动重命名标签......
  • Redis入门讲解(介绍、安装、常用命令)
    Redis入门讲解(介绍、安装、常用命令)Redis是非关系型数据库关系型数据库关系型数据库是采用了关系模型来组织数据的数据库,以行和列的形式存储数据,由二维表及其之间的关......
  • 常用快捷键、命令
    快捷指令ctrl+c:复制ctrl+v:粘贴ctrl+a:全选ctrl+x:剪切ctrl+z:撤销ctrl+s:保存alt+F4:关闭窗口 打开cmd的方式开始+Windows系统+找到命令提示符win键+R......
  • Linux常用命令
    1系统信息date:显示系统日期date091816152022.00:设置时间月日时分年.秒2关机shutdown-hnow:立即关机shutdown-rnow:立即重启reboot:重启shutdown-hhours:m......
  • 工具 | 常用 MySQL 内核 Debug 技巧
    工具|常用MySQL内核Debug技巧掌握MySQL内核源码的阅读和调试能力,不仅是数据库研发人员的日常,也是DBA进阶的必经之路。阅读本文你将了解:如何准备MySQL调试......
  • git常用命令
    gitinit    初始化一个空仓库 / 创建空仓库gitadd.  代码提交到暂存区gitcommit-m'提交名'  提交到本地git仓库gitremoteaddorigin'仓库地......
  • ES6 对String做的常用升级优化
    ES61.let有什么用,为什么有了var还要使用let在ES6之前,声明变量只能用var,var声明变量有很多不合理的点,准确的说是因为ES5中没有块级作用域是很不合理的,甚至可以说是一门语......