Java面向对象篇-代码块、package、字符串比较

代码块

使用{}括起来的一段代码叫做代码块。

普通代码块

定义在方法中,使用{}括起来的代码叫做普通代码块。

public class Person {
    public static void main(String[] args) {
        {
            System.out.println(123);
        }
    }
}

构造代码块

定义在类中的使用{}括起来的代码叫做构造代码块。

注意:每次代码运行的时候回将构造代码块中的代码添加到构造方法的前面。

构造代码块中的代码会添加到每一个构造方法中,当使用this(参数)的时候不会添加。

public class Person {
    {
        System.out.println("构造代码块");
    }
    public static void main(String[] args) {
        Person p1 = new Person();
    }
}

静态代码块

使用static{}括起来的代码叫做静态代码块,在程序载入的时候优先执行。

如果希望加载后,对整个类进行某些初始化操作,可以使用 static初始化块。

public class Person {
    static {
        System.out.println("静态代码块");
    }
    public static void main(String[] args) {
    }
}

注意

  1. 数据库连接等其他提前需要准备好的代码会放在static代码块。

  2. 类第一次被载入时先执行static代码块;类多次载入时,static代码块只执行一次;static经常用来进行static变量的初始化。

  3. 是在类初始化时执行,不是在创建对象时执行。

  4. 静态初始化块中不能访问非static成员。

同步代码块

多线程内容,用来给共享空间进行加锁操作。

执行顺序

静态代码块-->构造代码块(创建对象的时候才会用到)-->普通代码块

反编译测试

public class Person {
    {
        System.out.println(1);
    }
    static {
        System.out.println(2);
    }
    public static void main(String[] args) {
        {
            System.out.println(3);
        }
    }
}

在这里插入图片描述

package(包,对应到文件系统就是多级目录)

为了解决两个问题

  1. 文件同名问题
  2. 为了方便管理类,将具体处理功能的代码放到同一个目录下

使用

一般定义package会放置在java文件的第一行。

package 域名的倒写,例如:package com.dwaves

完全限定名: 包名+类名,包名一定要全部都用英文小写字母。

写项目时都要加包,不要使用默认包。

com.aaa和com.aaa.bbb,这两个包没有包含关系,是两个完全独立的包。只是逡辑上看起来后者是前者的一部分。

JDK中常用的包

java.lang:包含一些Java语言的核心类,如String、Math、Integer、System和Thread,提供常用功能。(会自动导入,不需要自己导入)。

java.awt:包含了构成抽象窗口工具集(abstract window toolkits)的多个类,这些类被用来构建和管理应用程序的图 形用户界面(GUI)。

java.net:包含执行不网络相关的操作的类。

java.io:包含能提供多种输入/输出功能的类。

java.util:包含一些实用工具类,如定义系统特性、使用不日期日历相关的函数

import

如果不使用import,我们如果用到其他包的类时,只能这么写:java.util.Date,代 码量太大,不利于编写和维护。通过import可以导入其他包下面的类,从而可以在
本类中直接通过类名来调用。

当需要引入非lang包的其他java类的时候,需要使用import工具。

如果不使用import,每次在使用某个类的时候必须要将类的完全限定名都加上才可以使用,但是太过于繁琐。

public class Person {
    public static void main(String[] args) {
        java.util.Scanner scan = new java.util.Scanner(System.in);
    }
}

用法

import java.包名.类名;(导入具体的类 推荐使用)

import java.util.Scanner;
public class Person {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
    }
}

import 包名.*; 将当前包下的所有类文件都进行导入

注意

当一个java文件中需要使用多个同名的类的时候,只能选择导入一个,另一个使用完全限定名的方式进行导入
在这里插入图片描述在这里插入图片描述

静态导包

当需要使用某个类的多个方法的时候,同时又不想频繁写该类的名称,此时可以使用静态导包。

语法

import static 包名.类名.静态成员变量;
import static 包名.类名.静态成员方法;
import static 包名.类名.*; //导入该包下所有的类。会降低编译速度,但丌会降低运行速度。

未使用静态导包

在这里插入图片描述
在这里插入图片描述

使用静态导包

在这里插入图片描述

注意

静态导入可减少代码量,但当两个不同的类中有命名相同的方法都使用静态导入时,仍然需要通过类名.方法名()的方式进行调用,否则会报错。原因也显而易见,仅靠方法名无法区分。

关于编程时遇到的小问题剖析(String之间的比较)

public class Person {
    public static void main(String[] args) {
        String s1 = new String("string");
        String s2 = new String("string");
        String s3 = s1;
        System.out.println(s1 == s2); // false
        System.out.println(s1.equals(s2)); // true
        System.out.println(s1 == s3); // true
        System.out.println(s1.equals(s3)); // true
    }
}

字符串进行比较

  1. ==:比较的是地址
  2. equals:比较的是具体的值
  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

FeatherWaves

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

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

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

打赏作者

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

抵扣说明:

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

余额充值