Java Class10

Java Class10

内部类

首先整理类下的几大成员

属性:

方法:

构造器:

初始化块:

内部类:

public class A {
    
    
    private int age;//属性
    
    public void method(int age){
    
    //方法
        this.age=age;
    }
    
    public A(){
    
    //构造器
        System.out.println(age+10);
    }
    
    {
    
    
        System.out.println(age+100);//初始化块
    }
    
    class A1{
    
    //内部类
        
    }
}

匿名内部类

匿名内部类就是没名内部类,就是说他行使了内部类的功能,但是没有名字来命名。

public class B {
    
    
    public static void main(String[] args) {
    
    
        new IA(){
    
    //匿名内部类

            @Override
            public void go() {
    
    

            }
        };
    }
}

interface IA{
    
    
    public void go();
}

比如我想在B中实现IA下的go方法,但是接口下的方法不能直接调用需要实例化,而且现在我们没有继承关系不能直接实现方法,所以用匿名内部类的方法就是最简单方便的。在这里插入图片描述

public class B {
    
    
    public static void main(String[] args) {
    
    
        new B().plan(new IA() {
    
    
            @Override
            public void go() {
    
    
                System.out.println("2");
            }

            @Override
            public void to() {
    
    
                System.out.println("1");
            }
        },"北京").to();
    }

    IA plan(IA ia,String name){
    
    
        ia.go();
        return new IA(){
    
    

            @Override
            public void go() {
    
    
                System.out.println("3");
            }

            @Override
            public void to() {
    
    
                System.out.println("4");
            }
        };
    }
}

interface IA{
    
    
    void go();
    void to();

}

在这里插入图片描述
输出2,4

equals

一般我们会把=,==,equals方法进行比较

=

意为赋值,把等号右边的内容赋给左边
在基本类型时,是将值赋给左边
在引用类型时,是将地址赋给左边

==

相等,判断等号两边是否相等
在基本类型时,比较值是否相等
在引用类型时,比较地址是否相等

equals()

用于比较两个引用类型的值是否相等

具体解释请看=,==和equals用法与区别

equals和hashCode也经常一起讨论
他们共同用来标识对象,两个方法协同工作用来判断两个对象是否相等在这里插入图片描述
具体请看:重写equals为什么要重写hashcode

String,StringBuffer,StringBuilder

String就是字符串对象

String s1="abc";
String s2="a"+"b"+"c";

在这s2生成字符串的过程与s1并不一样,s2是引号一次就开一次堆,每次开堆过程会占用内存并影响运算速度

而StringBuffer和StringBuilder就是可以一次开辟多个空间,避免多次开堆影响效率的问题

public class C {
    
    
    public static void main(String[] args) {
    
    
        String s="OK";//定义字符串s
        s="OK1";//修改字符串的值
        String s2="OK";//定义字符串s2
        String s3="我"+"很"+"帅"+"!";//定义字符串s3

        StringBuffer sb=new StringBuffer("我");//实例化StringBuffer对象
        sb.append("很");//向StringBuffer中添加元素
        sb.append("帅1234567891234567");//向StringBuffer中继续添加元素
        System.out.println(sb.capacity());//打印此时StringBuffer的空间
    }
}

包装类型

在这里插入图片描述

public class Demo {
    
    
    Integer i=1;//自动装箱
    int j=i;//自动拆箱
}

猜你喜欢

转载自blog.csdn.net/qq_45325217/article/details/127768499