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

mac2025-01-14  12

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

文章目录

构造方法 代码块 & 包的基本知识1.构造方法1.1构造方法格式1.2构造方法特点 2.代码块2.1局部代码块2.2构造代码块2.3静态代码块2.4同步代码块2.5代码块实例 3.包 & 导包3.1包的特点

1.构造方法

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

1.1构造方法格式

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

1.2构造方法特点

构造方法没有返回值,没有void是特殊的方法,给当前类初始化,方法名与类名一致可以重载如果没有写构造方法,系统默认会写一个无参构造方法当我们写了有参构造方法,系统会删除默认写的无参构造方法(外界访问无参构造方法是会有:构造方法未定义的报错)建议写上无参构造方法(框架底层利用放射创建对象,注入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构造代码块

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

在构造方法前执行

每次创建对象都会执行

// 构造代码块 { 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包的特点

同包下的类不需要导包

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

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

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

com.sxt.thisdemo.Student s = new com.sxt.thisdemo.Student(); com.sxt.packagedemo.Student s2 = new com.sxt.packagedemo.Student();

包的声明必须出现在Java文件的第一句,仅且只有一句

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

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

import java.util.*;

JDK常见一些包:

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