目录
一、代码块的作用
用来初始化类、对象。(要修饰代码块的话,就只能使用static修饰)
二、代码块的分类:静态代码块和非静态代码块
2.1静态代码块
① 内部可以有输出语句
② 随着类的加载而执行,并且只执行一次
③ 作用:初始化类的信息
④ 当一个类中有多个静态代码块,则这些代码块会按照声明的先后顺序执行
⑤ 静态代码块的执行,优先于非静态代码块的执行
⑥ 静态代码块内只能调用静态的属性、静态的方法,无法调用非静态的结构
2.2非静态代码块
① 内部可以有输出语句
② 随着对象的创建而执行
③ 每创建一个对象,就执行一次非静态代码块
④ 作用:可以在创建对象时,对对象的属性等进行初始化
⑤ 如果一个类中,定义了多个非静态代码块,则按照声明的先后顺序执行
⑥ 非静态代码块内可以调用静态的属性、静态的方法,或非静态的属性、非静态的方法。
三、代码块的具体实现
package cn.spilt_charging.contact;
public class BlackTest {
public static void main(String[] args) {
black black1 = new black();
System.out.println(black1.toString());
}
}
class black{
//构造器
public black(){
super();
}
public black(String name,int age) {
this.name = name;
this.age = age;
}
//属性
String name;
int age;
static String content = "我是一个爱国青年";
@Override
public String toString() {
return "Person[name = " + name + ",age = " +age + "]";
}
//方法(非静态)
public void eat() {
System.out.println("吃东西");
}
//静态的方法
public static void test() {
System.out.println("我爱我的祖国");
}
//static的代码块(静态代码块)
static {
System.out.println("first");
//调用静态结构
content = "我是一名中国人";
test();
//不能调用非静态结构
//eat();
//name = "Tom";
}
static {
System.out.println("second");
}
//非static的代码块(非静态代码块)
{
System.out.println("third");
}
{
System.out.println("four");
//调用非静态结构
age = 1;
eat();
//调用静态结构
content = "我为我是中国人而自豪";
test();
}
}
输出结果:
四、final关键字
final可以修饰:类、方法、变量。
① final修饰一个类:该类不能被其他类所继承。如:String类、System类
② final修饰一个方法:final标记的方法不能被子类重写。如:Object类中的getClass()。
③ final修饰变量:此时的变量(成员变量或局部变量)就是一个常量。名称大写,且只能被赋值一次。
④ final修饰属性,可以考虑赋值的位置:显示初始化、代码块中初始化、构造器中初始化
⑤ final修饰局部变量:在使用final修饰形参时,表示此形参是一个常量,当我们调用此方法时,给常量形参赋值一个实参,一旦赋值后,就只能在方法体内使用此形参,但不能进行重新赋值。
⑥ static final 用来修饰:全局变量。
4.1 final关键字的实现
package cn.spilt_charging.contact;
public class FinalTest {
final int WIDTH = 0;
final int LEFT;
final int RIGHT;
{
LEFT = 1;
}
public FinalTest() {
RIGHT = 2;
}
public FinalTest(int n) {
RIGHT = n;
}
public void dowidth() {
//WIDTH = 20; //无法修改
}
public void show() {
final int NUMBER = 100; //常量
//NUMBER += 100; //无法修改
}
}
final class AAA{
}
//class BBB extends AAA{ //无法继承
//}
class CCC{
final public void something(){
}
}
class DDD extends CCC{
// final public void something() { //无法重写
// }
}
最后到这里,文章就结束了,如果在内容上有问题,恳请各位大佬指出。