代码块、内部类、api文档、Objec、String

本文详细介绍了Java编程中的代码块,包括局部代码块、构造代码块和静态代码块,解释了它们的作用和执行顺序。此外,还探讨了内部类的分类,如成员内部类、局部内部类和匿名内部类。最后,讲解了API的概念,以及Object类的toString()和equals()方法,以及String对象的特性。通过示例代码加深理解。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、代码块


1、概念:编写在大括号中的代码
2、分类:局部代码块、构造代码块、静态代码块
3、代码图解
A.局部代码块

package qf22020222;
public class Demo04 {
    //int sum;成员变量不能赋值
    public static void main(String[] args) {
        int sum = 0;
        {
            int temp = 1;
            sum = 4;
            System.out.println(temp);
        }
        System.out.println(sum);
    }
}

位置:在方法中
作用:限制变量的声明周期

B.构造代码块

package qf22020222;

public class Demo04 {
    public String name;
    public Demo04() {
    }
    {
        name = "小明";
    }
}

位置:在类中,在方法外
作用:用于给成员变量进行赋值
说明:
(1)构造代码块是由JVM来进行调用的
(2)构造代码块先于构造方法执行
(3)实例化对象的时候都会执行构造代码块

C.静态代码块
A.位置:方法外 类中
B.语法:static {代码}
C.作用:一般用于加载配置(数据库的配置信息)信息 静态代码块加载一次
说明:
(1)静态代码块 优先于构造方法先执行
(2)静态代码块只加载一次
(3)静态代码块 只能访问静态的资源

package qf22020224;

public class Demo06 {
    static {
        int a = 1;
    }
    public static void main(String[] args) {

    }
}

二、内部类

1、定义在类中类 或者是定义的方法中的类
2、分类:
成员内部类 :普通成员内部类、私有的成员内部类、静态内部类
代码演示:

package qf22020222;

public class Demo05 {
    //普通内部类
    public class inClass1{}
    //私有内部类
    private class inClass2{}
    //静态内部类
    public static class inClass4{};
    
}

局部内部类: 定义在方法中的内部类
代码演示:

public void temp1(){
        //局部内部类,定义在方法里的内部类
        class inClass3{}
    }

匿名内部类: 没有名称的内部类
成立条件
1、**一个接口、一个类或者一个抽象类、一个方法的参数为该接口或类、**调用该方法则可以用匿名内部类

**注意:**匿名内部类没有类名,因此没有创建对象

代码演示:

package qf22020222;

public class Demo05 {
    public static void main(String[] args) {
         /*action(new USB() {
             @Override
             public void charge() {
                System.out.println("已经充上电");
             }
         });*/
       action(() -> {
           System.out.println("已经充上电");
       });
    }
    public static void action(USB usb){
        usb.charge();
    }
}
interface USB{
    void charge();
}

三、api

1、 概念:API 应用的接口编程 其实就是提供jdk的相关的类以及接口的文档 帮助文档

2、生成帮助文档
@author 作者
@version 版本
@since 说明
@param 方法的参数
图解步骤:
在这里插入图片描述
在这里插入图片描述

四、Object

1、概念:类Object 是类层次结构的根类,所有对象包括数组都实现了这个类的方法
2、作用:
A.用来实例化对象
B.用来给子类进行调用

3、toString()方法
该方法返回表现的形式:
底层拼接返回值:getClass().gertName+’@’+Integer.toHexString(hashCode());

4、
getClass().getName()= =>表示完成的包名+类名
@= =>表示是一个连接符号 没有特殊的含义
hashCode()= =>根据地址值生成的hashCode值
Integer.toHexString()= =>表示以16进制的形式来进行

5、equals()方法
注意:使用equals比较两个对象的地址,一般需要重写来比较两个对象的属性
A.equals与==的区别
相同点:
都可以用来作比较
不同点:
= =可以是基本数据类型,也可以是引用数据类型,equals只能比较引用数据类型
= = 比较基本数据类型的是值是否相同,引用地址的是否相等
equals比较的没有重写前的地址是相等,重写后比较的是属性是否相等

五、String


注意点:
A.字符串是常量:它们的值在创建后不能被改变,地址值不能变,可以改变内容,可以共享
B.两种形式:"abc"对象在字符常量池中,new String()是开辟空间 ,他们都是在堆内存中的
C.字符串的底层是使用字节数组来进行存储 byte[]

例子:String str = “name”; 与 String str = new String(“name”);
注意:
创建了一次对象,使用该方式赋值,会变成共享对象,只要赋相同的值就不会创建新的对象,只是多了指针的引用指向堆内存
而new 对象,都会开辟一个堆内存,加上本身“name"也是一个对象,所以会开辟两个堆内存对象
所以在实际开发过程中,要考虑String对象的不可变性,和多数为直接赋值

构造方法3+1
在这里插入图片描述

比较代码演示:

package qf22020223;

public class Demo07 {
    public static void main(String[] args) {
        String str1 = "abc";
        String str2 = "abc";
        String arr2 = new String("abc");
        String arr4 = new String("abc");

        System.out.println(str1 == str2);
        System.out.println(str1.equals(str2));

        System.out.println(arr2 == arr4);
        System.out.println(arr2.equals(arr4));

    }
}

运行结果:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

IT阿生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值