Java从入门到精通14
文章目录
一、代码块
1、什么是代码块
代码块内容一般为成员变量,方法,构造器,代码块,内部类
代码块格式一般为{ * * * 代码 * * * }花括号里面的内容责备称为代码块
2、代码块分类
-
局部代码块:用于限定变量生命周期,及早释放,提高内存利用率。
-
静态代码块:主要用于对静态属性进行初始化。
-
实例(构造)代码块:调用构造方法都会执行,并且在构造方法前执行。
1.局部代码块
在方法中出现,可以限定变量生命周期,及早释放,提高内存利用率。
{}中代码块结束后,它的生命周期也就结束花括号中的内容操作结束后出了花括号立刻被销毁,所以系统找不到变量a
2.静态代码块
必须有static修饰,必须放在类中,方法外。
与类一起加载执行。并且静态代码块执行一次
特点:
- 每次执行类,加载类的时候都会先执行静态代码块一次。
- 静态代码块是自动触发执行的,只要程序启动静态代码块就会先执行一次。
- 在启动程序之前可以做资源的初始化,一般用于初始化静态资源。
package 代码块.静态代码初始化;
public class Demo {
public static void main(String[] args) {
System.out.println(A.a);
}
}
class A{
static int a;
static {
a=20;
}
}
3.实例代码块
没有static修饰,必须放在类中方法外。
与对象初始化一起加载,即每次调用构造方法都会执行,并且在构造方法前执行
特点:
- 无static修饰。属于对象,与对象的创建一起执行的。
- 每次调用构造器初始化对象,实例代码块都要自动触发执行一次。
- 实例代码块实际上是提取到每一个构造器中去执行的。
- 实例代码块中的内容在构造方法前执行。
package 代码块.构造代码块;
public class Demo {
public static void main(String[] args) {
new A();
}
}
class A{
public A() {
System.out.println("这是A的构造代码块");
}
{
System.out.println("这是A的实例代码块");
}
}
静态代码块、构造代码块、构造函数执行顺序
父类静态代码块 > 子类静态代码块 > main()方法 > 父类代码块 > 父类构造器 > 子类代码块 > 子类构造器
各代码的任务
- 静态代码块:类的加载。字节码文件进代码区
- main :JVM自动的调用main方法
- 代码块、构造器:初始化过程(创建对象过程)
二、包package
1、什么是包
为了更好地组织类,Java 提供了包机制,用于区别类名的命名空间
大白话:包就是文件夹,类是文件夹里面的文件夹,包中有很多可以使用的类
2、包的作用
- 把功能相似或相关的类或接口组织在同一个包中,方便类的查找和使用
- 防止命名冲突,不同的包中的类的名字是可以相同的,当同时调用两个不同包中相同类名的类时,应该加上包名加以区别
- 包也限定了访问权限,拥有包访问权限的类才能访问某个包中的类
3、使用包中的类
import 最外部包名 . 次级外部包名 . … .包名.类名
注意:
除非是来自java.lang这个包。使用该包中的类不需要指定全名,其他的包全都需要
4、包的命名规范
公司域名倒写.项目名.业务模块名
- com.xxx.xxx.user 用户模块
- com.xxx.xxx.order 订单模块
- com.xxx.xxx.utils 工具类
5、常见包
- java.lang //lang包是基础包,包含了Java语言的核心类,如:String、Math、System、Thread类等,默认引入,不需要再引入
- java.util //util包是系统提供的工具包,里面有很多工具类/接口和集合框架类/接口。如Arrays、List和Set等
- java.net //网络包,用于网络开发的一些类/接口
- java.io //包含了一些与java输入/输出编程相关的类/接口
- java.text //包含了一些与java格式化相关的类
- java.swing //包含了与Swing图形用户界面编程相关的类/接口,这些类可以用于构建与平台无关的GUI程序
- java.awt //是做java的界面开发,包含了一些与抽象窗口工具集相关的类/接口,主要用于构建与图形用户界面(GUI)程序
- java.sql //包含了一些jdbc数据库编程的相关类/接口
三、修饰符
1、什么是修饰符
修饰符用来定义类、方法或者变量,通常放在语句的最前端
2、修饰符分类
访问修饰符(权限)
非访问修饰符
1.访问修饰符(权限)
- public:公有访问。对所有的类都可见。
使用对象:类、接口、变量、方法 - protected:保护型访问。对同一个包可见,对不同的包的子类可见。
使用对象:变量、方法。 注意:不能修饰类(外部类) - default:默认访问权限。只对同一个包可见,注意对不同的包的子类不可见。
使用对象:类、接口、变量、方法 - private:私有访问。只对同一个类可见,其余都不见。
使用对象:变量、方法。 注意:不能修饰类(外部类)
2.非访问权限修饰符
- static 修饰符,不能修饰类,只能修饰方法和变量,用来创建类方法和类变量。
- final 修饰符,用来修饰类、方法和变量,
final 修饰的类不能够被继承,修饰的方法不能被继承类重新定义,
修饰的变量为常量,是不可修改的。 - abstract修饰符,用来创建抽象类和抽象方法。
3、作用
1.对类
外部类
- public(访问控制符),将一个类声明为公共类,它可以被任何对象访问,一个程序的主类必须是公共类。
- default(访问控制符),类只对包内可见,包外不可见。
- abstract(非访问控制符),将一个类声明为抽象类,抽象类不能用来实例化对象,声明抽象类的唯一目的是为了将来对该类进行扩充,抽象类可以包含抽象方法和非抽象方法。
- final(非访问控制符),将一个类生命为最终(即非继承类),表示它不能被其他类继承。
内部类
内部类与成员变量地位一直,所以可以public、protected、default和private,同时还可以用static修饰,表示嵌套内部类,不用实例化外部类,即可调用
2.对方法
- public(公共控制符),包外包内都可以调用该方法。
- protected(保护访问控制符)指定该方法可以被它的类和子类进行访问。
- default(默认权限),指定该方法只对同包可见,对不同包(含不同包的子类)不可见。
- private(私有控制符)指定此方法只能有自己类等方法访问,其他的类不能访问(包括子类),非常严格的控制。
- final,指定方法已完备,不能再进行继承扩充。
- static,指定不需要实例化就可以激活的一个方法,即在内存中只有一份,通过类名即可调用。
- abstract,抽象方法是一种没有任何实现的方法,该方法的的具体实现由子类提供。
抽象方法不能被声明成final 和 static。任何继承抽象类的子类必须实现父类的所有抽象方法,除非该子类也是抽象类。 - public(公共访问控制符),指定该变量为公共的,它可以被任何对象的方法访问。
对变量
成员变量
- public(公共访问控制符),指定该变量为公共的,它可以被任何对象的方法访问。
- protected(保护访问控制符)指定该变量可以别被自己的类和子类访问。在子类中可以覆盖此变量。
- default(默认权限),指定该变量只对同包可见,对不同包(含不同包的子类)不可见。
- private(私有访问控制符)指定该变量只允许自己的类的方法访问,其他任何类(包括子类)中的方法均不能访问。
- final,最终修饰符,指定此变量的值不能变。
- static(静态修饰符)指定变量被所有对象共享,即所有实例都可以使用该变量。变量属于这个类。
注意:inal 和 static 经常一起使用来创建常量。
内部变量
只能使用 final 修饰局部变量
对接口
接口修饰符只能用public、default和abstract,不能用final、static修饰。
接口默认修饰为abstract。
接口中方法:只能用 public abstract修饰。默认不写系统会自动附上public abstract。