其他分享
首页 > 其他分享> > 常用类之内部类与Object类

常用类之内部类与Object类

作者:互联网

常用类

1.内部类

          class Outer {
              class Inner {
                  // 也会生成class文件
              }
          }

1.1.成员内部类


1.1 内部类代码演示

package classes.demo01;

//成员内部类

//外部类
public class Outer {
    //实例变量
    private String name="小明";
    private int age =18;

    private static int ages=20;

    public void show(){
        System.out.println("外部类的方法");
    }

    //内部类
    class Inner{
        private String name="李四";
        private String email="188888888";

      //成员内部类不能定义静态成员static,但可以包含静态常量 final
        private static final String country="中国";

        public void innershow(){
            System.out.println("内部类的方法");
            //打印外部类的属性,属性和外部类的属性名字相同,需要使用  Outer.this   才能打印出小明
            System.out.println(name);//  默认打印李四
            System.out.println(Outer.this.name);
            System.out.println(Outer.this.age);
            System.out.println(Inner.country);  //类名.属性 打印静态的属性


            //打印内部类的属性
            System.out.println(this.name);
            System.out.println(this.email);

        }

    }



}





package classes.demo01;

public class Test {
    public static void main(String[] args) {
      /*
        //1 创建外部类对象
        Outer outer = new Outer();
        //2 创建内部类对象
        Outer.Inner inner = outer.new Inner();
        inner.innershow();
    */

            //一步的写法
        Outer.Inner inner = new Outer().new Inner();
        inner.innershow();

    }
}


运行结果

内部类的方法
李四
小明
18
中国
李四
188888888

1.2静态内部类


1.2 静态内部类代码演示

package classes.demo02;
//静态内部类


public class Outer {
    private String name="张三";
    private int age=20;

    public void show(){
        System.out.println("外部类的方法");
    }
    //静态内部类:和外部类相同,一个级别
    static class Inner{
        private String address="北京";
        private String phone="12345678";
        //静态成员
        private static int count=1000;

        public void innerShow(){

            System.out.println("静态内部类的方法");
            //调用静态内部类的属性
            System.out.println(address);
            System.out.println(phone);
            //调用静态内部类的静态属性
            System.out.println(Inner.count);


             //调用外部类的属性时
            //1 先创建外部类对象
            Outer outer = new Outer();
            outer.show();
            //2 调用外部类对象属性
            System.out.println(outer.age);
            System.out.println(outer.name);
        }

    }


}




package classes.demo02;

public class Test {
    public static void main(String[] args) {

        //调用静态内部类方法   // 直接创建静态内部类对象
        Outer.Inner inner = new Outer.Inner();
        //调用方法
        inner.innerShow();


    }
}



运行结果

静态内部类的方法
北京
12345678
1000
外部类的方法
20
张三

1.3局部内部类


1.3 局部内部类代码演示

package classes.demo03;


//局部内部类
public class Outer {
    private String name="小子";
    private  int age=12;


    public void show(){
        //定义局部变量  // jdk1.8及以后自动添加final
        final int phone=66;
        final String address="上海";

        //局部内部类:注意不能加任何访问修饰符
        class Inner{
            //局部内部类的属性
            private String email="1234556677";
            private String phone = "123456";

            public void innerShow(){
                System.out.println("局部内部类方法");
                //局部内部类的属性
                System.out.println(email);
                System.out.println(phone);
                //访问外部类属性
                System.out.println(name);//省略了outer.this
                System.out.println(Outer.this.name);
                System.out.println(Outer.this.age);

                //访问局部变量,jdk1.7要求,局部变量必须时常量,
                // jdk1.8及以后自动添加final
                System.out.println(address);
                System.out.println("上海");

            }


        }
         //创建局部类对象
        Inner inner = new Inner();
        inner.innerShow();


    }

}



package classes.demo03;

public class Test {
    public static void main(String[] args) {
        // 创建外部类对象调用
        Outer outer = new Outer();
        outer.show();
    }
}


运行结果

局部内部类方法
1234556677
123456
小子
小子
12
上海
上海

1.4匿名内部类


1.4 匿名内部类代码演示

package classes.demo04;

//接口
public interface Usb {
    //服务方法
    void service();
}


package classes.demo04;

public class Mouse implements Usb {

    @Override
    public void service() {
        System.out.println("连接USB成功,鼠标开始工作");
    }
}

package classes.demo04;

import com.sun.xml.internal.ws.api.model.wsdl.WSDLOutput;
import org.w3c.dom.ls.LSOutput;

public class Test {
    public static void main(String[] args) {

        class fan implements Usb{
            @Override
            public void service() {
                System.out.println("连接USB成功,风扇开始工作");
            }
        }
        //使用局部内部类创建对象
        Usb usb1 = new fan();
        usb1.service();


       // 使用匿名内部类优化(相当于创建了一个局部内部类)
        Usb usb = new Usb(){//new  后面可以是接口也可以是抽象类或者父类  大括号里重写方法
            @Override
            public void service() {

                System.out.println("连接风扇成功,开始工作了");
            }
        }; // 注意后面的 ;

        usb.service();
    }
}


运行结果

连接USB成功,风扇开始工作
连接风扇成功,开始工作了

2.Object类

2.1 object 类常用方法

1.getClass()方法

public final Class<?> getClass() {}

2.hashCode方法

public int hashCode (){}

3.toString方法

public String toString(){}

4.equals方法

public boolean equals(Object obj){}

5.finalize方法



2.2 Object类常用方法代码演示:

package classes.demo06;

import java.util.Objects;

public class Student {
    private int age;
    private String name;

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Student() {
    }

    public Student(int age, String name) {
        this.age = age;
        this.name = name;
    }
      //快捷建:Alt+enter 选toString 方法
    @Override
    public String toString() {
        return "Student{" +
                "age=" + age +
                ", name='" + name + '\'' +
                '}';
    }


    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Student student = (Student) o;
        return age == student.age &&
                Objects.equals(name, student.name);
    }

    @Override
    public int hashCode() {
        return Objects.hash(age, name);
    }

     //打印finalize  会有提示重写
    @Override
    protected void finalize() throws Throwable {
        System.out.println(this.name+"垃圾被清理了");
    }
}


package classes.demo06;

public class TestStudent {
    public static void main(String[] args) {
          //       1. getClass()方法 :

        System.out.println("----------------1. getClass()-----------------");
        Student student1 = new Student(20,"aaa");

        Student student2 = new Student(20,"ccc");
        //判断S1和S2是不是同一个类型
        if (student1.getClass()==student1.getClass()){
            System.out.println("是同一类型");
        }else{
            System.out.println("不是同一类型");
        }
        //2.hashcode() 方法
        System.out.println("----------------2.hashcode() -----------------");
        Student student3 = new Student();
        Student student4 = new Student();
        System.out.println(student3.hashCode());
        System.out.println(student4.hashCode());
         Student student5=student3;
        System.out.println(student5.hashCode());
        //3. toString 方法
        System.out.println("----------------3. toString  -----------------");
        System.out.println(student1.toString());
        System.out.println(student2.toString());

        //4.equals() 方法  判断两个对象是否相等
        System.out.println("----------------4. equals() -----------------");
        Student student6 = new Student(17, "小子");
        Student student7 = new Student(17, "小子");
        System.out.println( student6.equals(student7));








    }
}


运行结果

----------------1. getClass()-----------------
是同一类型
----------------2.hashcode() -----------------
961
961
961
----------------3. toString  -----------------
Student{age=20, name='aaa'}
Student{age=20, name='ccc'}
----------------4. equals() -----------------
true


package classes.demo06;

public class TestStudent2 {

    public static void main(String[] args) {
        //System.gc();  垃圾回收
        Student student1 = new Student(17,"aaaa");
        Student student2 = new Student(17,"bbbb");
        Student student3 = new Student(17,"cccc");
        new Student(17,"ddddd");
        new Student(17,"eeeee");
        new Student(17,"fffff");
        //  回收垃圾   使用System.gc();通知JVM执行垃圾回收
        System.gc();
        System.out.println("垃圾已经回收");

    }


}

运行结果

垃圾已经回收
eeeee垃圾被清理了
fffff垃圾被清理了
ddddd垃圾被清理了



————————————————————————————————————————————————————————————————————————————

3.更多参考

千峰教育-常用类

标签:部类,内部,之内,Object,System,Student,println,public,out
来源: https://www.cnblogs.com/xingchenyang/p/16353408.html