**
1.块与静态块
**
在Java类中,有两种初始化块: 静态初始化块和非静态初始化块。它们都是定义在类中,用大括号{}括起来,静态代码块在大括号外还要加上static关键字。
非静态初始化块(构造代码块):
作用:给对象进行初始化。对象一建立就执行,且优先于构造函数的运行。
静态初始化块:
作用:给类进行初始化。随着类的加载而执行,且只执行一次。
以后不管实例化多少个对象,也不会在执行。
构造函数、非静态初始化块、静态代码块的区别:
相同点:都是用于初始化,三者的执行顺序依次是:静态代码块>构造代码块>构造函数。
不同点:1、必须在应用程序一启动时就执行一次的代码,放在静态块中。
2、初始化共通属性(不能接收参数)。
3、初始化本对象属性(可以接收参数)。
**
2.常量
**
常量定义
有一些数据是固定值,逻辑上要求值不能改变。比如:PI、一周七天等。
如何保证变量的值在运行期无法被改变?——使用常量
定义常量:
1、使用final关键词定义常量
2、常量的值在运行期间恒定不变
3、常量标识符在程序中只能被引用,而不能被重新赋值
4、基本数据类型常量,其值不能被改变。
5、引用数据类型常量,其指向不能被改变。
6、如果属性声明为常量,那么没有默认初始值。
7、final修饰类时,表示这个类不能被继承,final修饰方法时,表示这个方法不能被重写。
(String就是一个final类)
常量使用规范
在实际开发中,使用常量要注意:
1、常量一律全部大写。
2、一般在一个接口中定义项目中所使用的全部常量。在Java 接口中声明的变量在编译时会自动加上static final的修饰符,即声明为常量,因而Java接口通常是存放常量的最佳地点。
package staticTest;
public class Person {
private static String type;
private int age ;
private String name;
//块
{
age = 1;//共通的
System.out.println("这是一个块");
}
//静态块
static{
type = "";
System.out.println("这是一个静态块");
}
public Person(){
System.out.println("这是父类构造方法");
}
//构造方法
public Person(String name){
this.name = name;//个人所独有
System.out.println("这是一个构造方法");
}
public void say(){
final int num = 10;
}
}
package staticTest;
public class Student extends Person{//监控Student被实例化了几个对象
{
System.out.println("这是一个子类块");
}
static
{
System.out.println("这是一个子类静态块");
}
String name;
int age;
public Student(){
System.out.println("这是一个子类构造函数");
}
public static void doStudy(){
System.out.println("正在学习");
//冒泡排序
//单例模式
//jdbc模板代码
//三段代码背下来
}
}
package staticTest;
public interface CommonInfo {
//标准声明常量方式
public static final double PI = 3.1415926;
}
package staticTest;
public class Test01 {
public static void main(String[] args) {
Person zhangsan = new Student();
System.out.println(CommonInfo.PI);
}//静态块只调用一次,在第一次创建时调用,以后再也不创建
//用来初始化静态属性
}