构造方法 代码块 & 包的基本知识

本文深入解析构造方法和代码块的基本概念与应用,包括构造方法的格式、特点及重载,代码块的类型如局部、构造、静态、同步代码块的执行时机与作用,以及包的管理和使用技巧。

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

构造方法 代码块 & 包的基本知识

1.构造方法

作用:对成员变量进行快速初始化

1.1构造方法格式

[访问权限修饰符] 方法名(参数列表) {
	方法体;
	(this.Xxx = Xxx;)
}

1.2构造方法特点

  1. 构造方法没有返回值没有void
  2. 是特殊的方法,给当前类初始化,方法名与类名一致
  3. 可以重载
  4. 如果没有写构造方法,系统默认会写一个无参构造方法
  5. 当我们写了有参构造方法,系统会删除默认写的无参构造方法(外界访问无参构造方法是会有:构造方法未定义的报错
  6. 建议写上无参构造方法(框架底层利用放射创建对象,注入spring容器中,反射获取的是无参构造方法)

2.代码块

2.1局部代码块

限定局部变量的作用域

        public void show() {
            // 局部代码块
            {
                int x = 100;
                System.out.println(x);
            }
            // 局部代码块
            {
                int x = 200;
                System.out.println(x);
            }

            synchronized(new Object()) {

            }
        }

2.2构造代码块

  1. 可以抽取多个构造代码块的共性代码,简化程序

  2. 在构造方法执行

  3. 每次创建对象都会执行

            // 构造代码块
            {
                System.out.println("我是构造代码块1");
                // System.out.println(add());
            }
            //在成员变量的位置
    

2.3静态代码块

  • static修饰的代码块

  • 不管创建多少次对象,只执行一次

  • 执行时机:类中任意成员被访问,静态代码块必然执行(在类被调用时执行,先于类中成员)

  • 可以初始化静态成员

            class CodeBlock {
    
                int a;
                int b;
                static int c;
    
                static {
                    System.out.println("我是静态代码块1");
                    c = 100;
                }
            }
    		//因为静态成员属于类,与对象无关,所以可以用静态代码块初始化
    
  • 由于在创建对象之前执行,并且只执行一次,所以通常会把预加载的代码放到静态代码块中(e.g. :数据库的连接, Xml,JSON等配置文件的读取)

2.4同步代码块

2.5代码块实例

		//结果:
        //主方法...
        //我是 CodeBlock 类的静态代码块1
        //我是 CodeBlock 类的静态代码块2
        //我是 CodeBlock 类的静态代码块3
        //创建对象之前做的准备工作1: 
        //创建对象之前做的准备工作2: 
        //创建对象之前做的准备工作3: 
        //无参
        //创建对象之前做的准备工作1: 
        //创建对象之前做的准备工作2: 
        //创建对象之前做的准备工作3: 
        //带1参        
		//先执行的是Practice05,所以main内的静态代码块执行
        //之后调用class CodeBlock,其内的静态代码块被调用
        //之后是构造代码块,又因为构造代码块每次创建对象都会调用,所以调用了两次

		public class Practice05 {
            public static void main(String[] args) {
                CodeBlock cb = new CodeBlock();
                CodeBlock cb2 = new CodeBlock(10);
            }
            static {
                System.out.println("主方法...");
            }
        }

        class CodeBlock {

            int num;
            int num2;
            static int num3;

            // 1.构造代码块
            {
                System.out.println("创建对象之前做的准备工作1: ");
            }

            {
                System.out.println("创建对象之前做的准备工作2: ");
            }

            {
                System.out.println("创建对象之前做的准备工作3: ");
            }

            // 构造方法
            public CodeBlock() {
                System.out.println("无参");
            }

            public CodeBlock(int num) {
                System.out.println("带1参");
                this.num = num;
            }

            public CodeBlock(int num, int num2) {
                System.out.println("带2参");
                this.num = num;
                this.num2 = num2;
            } 
            // 3. 静态代码块
            static {
                System.out.println("我是 CodeBlock 类的静态代码块1");
            }


            static {
                System.out.println("我是 CodeBlock 类的静态代码块2");
            }

            static {
                System.out.println("我是 CodeBlock 类的静态代码块3");
            }	
        }

        

3.包 & 导包

包的本质就是文件夹;实现可对java文件的管理;解决了同包下重名问题

3.1包的特点

  1. 同包下的类不需要导包

  2. java.lang包下的所有类都不需要导入,系统会帮我们导入

  3. 如果一个类没有声明包,意味着这个类将是孤立的类,其他包都无法访问默认包下的所有类,一般先建包再建类

  4. 如果在同一个类下使用两个不同包下的同名类的时候,需要使用类路径

            com.sxt.thisdemo.Student s = new com.sxt.thisdemo.Student();
    		com.sxt.packagedemo.Student s2 = new com.sxt.packagedemo.Student();
    
  5. 包的声明必须出现在Java文件的第一句,仅且只有一句

  6. 在书写类名的时候不要和系统的类重名

  7. 如果需要导入一个包下所有的类,可以使用**通配符 ***

    		import java.util.*;
    
  8. JDK常见一些包:

    包名:作用
    java.lang包含一些Java语言核心类,如String、Math、Integer、System和Thread,提供常用功能。
    java.net包含执行与网络相关的操作的类。
    java.awt包含了构成抽象窗口工具集(abstract window toolkits)的多个类,这些类被用来构建和管理应用程序的图形用户界面(GUI)。
    java.io包含能提供多种输入/输出功能的类。
    java.util包含一些实用工具类,如定义系统特性、使用与日期日历相关的函数。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值