博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java语言基础(内部类,匿名内部类,object类)
阅读量:3966 次
发布时间:2019-05-24

本文共 2759 字,大约阅读时间需要 9 分钟。

1.内部类

在这里插入图片描述

成员内部类

class Outer{
class Inner {
//成员内部类 }}

特点:

  • 1、成员内部类可以直接访问外部类的成员,包括私有的,也可以通过 外部类名.this.成员名调用外部成员
  • 2成员内部类和外部类不存在继承关系
  • 3访问成员内部类的格式:Outer.Inner oi = new Outer().new Inner();

局部内部类

class Outer{
public void method() {
final int a = 10; class Inner {
System.out.println(a); //局部内部类 } } }

特点:

  • 可以直接访问外部类的成员

  • 在局部位置可以创建局部内部类对象,通过对象调用成员

    注意:
    局部内部类访问局部变量必须用final修饰 JDK1.8之后默认加上

因为局部变量会随着方法的调用完毕而消失,这个时候,局部对象并没有立马从堆内存中消失,还要使用那个变量,为了让数据还能继续被使用,就用fianl修饰,这样,在堆内存里面存储的其实是一个常量值。

匿名内部类

前提: 存在一个类或者接口;这里的类可以是具体类也可以是抽象类。

本质:是一个继承了该类或者实现了该接口的子类匿名对象

public abstract class Person//抽象类 或  interface Person 接口{
public abstract void work(); } new Person(){
public void work() {
System.out.println("work"); }}.work();

静态内部类

package laolao;class didi{
public static void main(String[] args) {
new di(); new di.dada().eat(); }} class di {
static int age=10; static class dada{
public void eat(){
int a = di.age; System.out.println(a); } }}

特点:

  • 静态内部类访问的外部类数据必须用静态修饰。
  • 成员方法可以是静态的也可以是非静态的
  • 格式: 外部类名.内部类名 对象名 = new 外部类名.内部类名();

2.object类

概述: 类层次结构的根类

所有类都直接或者间接的继承自该类

(1)Object类的hashCode()方法

  • 返回该对象的哈希码值。
    默认情况下,该方法会根据对象的地址来计算。
  • 不同对象的,hashCode()一般来说不会相同。
    但是,同一个对象的hashCode()值肯定相同。
  • 不是对象的实际地址值,可以理解为逻辑地址值。

(2)Object类的getClass()方法

  • 返回此 Object 的运行时类。
  • 可以通过Class类中的一个方法,获取对象的真实类的全名称。
    public String getName()

(3)Object类的toString()方法

  • 返回该对象的字符串表示
源代码: public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode()); }

(4)Object类的equals()方法

  • 指示其他某个对象是否与此对象“相等”。
  • 默认情况下比较的是对象的引用是否相同
源代码:public boolean equals(Object obj) {
return (this == obj); }

注意:== 和 equals() 有什么区别?

==是一个比较运算符,他可以比较基本数据类,也可以比较引用数据类型,比较基本数据类型,比较的是两个值是否相同,比较引用数据类型,比较的是地址值是否相同。

equals() 是Object类中的方法,只能比较引用数据类型,比较的是两个对象的地址值是否相同

(5)Object类的clone() 方法

  • clone()的权限修饰符是受保护的
  • 对象的克隆:浅克隆和深克隆
  • 使用clone()方法采用的是浅克隆的方式

浅克隆的细节:

  1. 如果一个对象需要调用clone的方法克隆,那么该对象所属的类必须要实现Cloneable接口。
  2. Cloneable接口只不过是一个标识接口而已,没有任何方法。
  3. 对象的浅克隆就是克隆一个对象的时候,如果被克隆的对象中维护了另外一个类的对象,这时候只是克隆另外一个对象的地址,而没有把另外一个对象也克隆一份。
  4. 对象的浅克隆也不会调用到构造方法的。
public class MyTest {
public static void main(String[] args) throws CloneNotSupportedException {
Dog dog = new Dog("旺财", 3); Dog dog2 = (Dog) dog.clone(); dog2.name="小白"; System.out.println(dog2.name); System.out.println(dog2.age); }}class Dog extends Object implements Cloneable{
String name; int age; public Dog(String name, int age) {
this.name = name; this.age = age; } @Override public Object clone() throws CloneNotSupportedException {
return super.clone(); }}

转载地址:http://wdfki.baihongyu.com/

你可能感兴趣的文章
牛人比较全面的内核学习建议
查看>>
牛人比较全面的内核学习建议
查看>>
实战linux内核编译
查看>>
实战linux内核编译
查看>>
Linux USB驱动框架分析(一)
查看>>
Linux USB驱动框架分析(一)
查看>>
Linux USB 鼠标驱动程序详解
查看>>
Linux USB 鼠标驱动程序详解
查看>>
Linux 2.6.19.x 内核编译配置选项…
查看>>
Linux 2.6.19.x 内核编译配置选项…
查看>>
触摸屏驱动分析之S3C2440_ts.c
查看>>
触摸屏驱动分析之S3C2440_ts.c
查看>>
一个用户空间读取输入事件的例子
查看>>
一个用户空间读取输入事件的例子
查看>>
输入事件的传递过程
查看>>
输入事件的传递过程
查看>>
输入子系统设备模型分析
查看>>
输入子系统设备模型分析
查看>>
USB驱动程序之描述符
查看>>
USB驱动程序之描述符
查看>>