一、代码块
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));
}
}
运行结果: