首页 > 其他分享 >代码块、final关键字

代码块、final关键字

时间:2022-11-15 00:33:43浏览次数:75  
标签:静态 代码 System public 关键字 println final out

目录

代码块

代码块的作用:用来初始化类、对象
代码块如果有修饰的话,只能使用static

分类:静态代码块  vs  非静态代码块
静态代码块:
 	  内部可以有输出语句
 	  随着类的加载而执行,而且只执行一次
 	  作用:初始化类的信息
	  如果一个类中定义了多个静态代码块,则按照声明的先后顺序执行
 	  静态代码块的执行要优先于非静态代码块的执行
 	  静态代码块内只能调用静态的属性、静态的方法,不能调用非静态的结构
非静态代码块:
 	  内部可以有输出语句
 	  随着对象的创建而执行,每创建一个对象,就执行一次非静态代码块
 	  作用:可以在创建对象时,对对象的属性等进行初始化
 	  如果一个类中定义了多个非静态代码块,则按照声明的先后顺序执行
 	  非静态代码块内可以调用静态的属性、静态的方法,或非静态的属性、非静态的方法
public class BlockTest {
	public static void main(String[] args) {
		
		String desc = Person.desc;
		System.out.println(desc);
		
		Person p1 = new Person();
		Person p2 = new Person();
		System.out.println(p1.age);
		
		Person.info();
	}
}
class Person{
	//属性
	String name;	
	int age;
	static String desc = "我是一个人";
	
	//构造器
	public Person(){
		
	}
	public Person(String name,int age){
		this.name = name;
		this.age = age;
	}
	
	//非static的代码块
	{
		System.out.println("hello, block - 2");
	}
	{
		System.out.println("hello, block - 1");
		//调用非静态结构
		age = 1;
		eat();
		//调用静态结构
		desc = "我是一个爱学习的人1";
		info();
	}
	//static的代码块
	static{
		System.out.println("hello,static block-2");
	}
	static{
		System.out.println("hello,static block-1");
		//调用静态结构
		desc = "我是一个爱学习的人";
		info();
		//不可以调用非静态结构
//		eat();
//		name = "Tom";
	}
	
	//方法
	public void eat(){
		System.out.println("吃饭");
	}
	@Override
	public String toString() {
		return "Person [name=" + name + ", age=" + age + "]";
	}
	public static void info(){
		System.out.println("我是一个快乐的人!");
	}	
}

由父及子,静态先行

class Root{
	static{
		System.out.println("Root的静态初始化块");
	}
	{
		System.out.println("Root的普通初始化块");
	}
	public Root(){
		super();
		System.out.println("Root的无参数的构造器");
	}
}
class Mid extends Root{
	static{
		System.out.println("Mid的静态初始化块");
	}
	{
		System.out.println("Mid的普通初始化块");
	}
	public Mid(){
		super();
		System.out.println("Mid的无参数的构造器");
	}
	public Mid(String msg){
		//通过this调用同一类中重载的构造器
		this();
		System.out.println("Mid的带参数构造器,其参数值:"
			+ msg);
	}
}
class Leaf extends Mid{
	static{
		System.out.println("Leaf的静态初始化块");
	}
	{
		System.out.println("Leaf的普通初始化块");
	}	
	public Leaf(){
		//通过super调用父类中有一个字符串参数的构造器
		super("尚硅谷");
		System.out.println("Leaf的构造器");
	}
}
public class LeafTest{
	public static void main(String[] args){
		new Leaf(); 
		System.out.println();
		new Leaf();
	}
}

对属性可以赋值的位置:

  1. 默认初始化
  2. 显式初始化/
  3. 构造器中初始化
  4. 有了对象以后,可以通过"对象.属性"或"对象.方法"的方式,进行赋值
  5. 在代码块中赋值

执行的先后顺序:① - ② / ⑤ - ③ - ④

public class OrderTest {
	public static void main(String[] args) {
		Order order = new Order();
		System.out.println(order.orderId);
	}
}

class Order{
	//对属性赋值的先后顺序取决于显示赋值和代码块赋值的先后顺序	
	int orderId = 3;
	{
		orderId = 4;
	}		
}

final关键字

final:最终的

  1. final可以用来修饰的结构:类、方法、变量
  2. final 用来修饰一个类:此类不能被其他类所继承。
    比如:String类、System类、StringBuffer类
  3. final 用来修饰方法:表明此方法不可以被重写
    比如:Object类中getClass();
  4. final 用来修饰变量:此时的"变量"就称为是一个常量
  • final修饰属性:可以考虑赋值的位置有:显式初始化、代码块中初始化、构造器中初始化
  • final修饰局部变量:
    尤其是使用final修饰形参时,表明此形参是一个常量。当我们调用此方法时,给常量形参赋一个实参。一旦赋值以后,就只能在方法体内使用此形参,但不能进行重新赋值。

static final 用来修饰属性:全局常量

public class FinalTest {	
	final int WIDTH = 0;
	final int LEFT;
	final int RIGHT;
//	final int DOWN;
	
	{
		LEFT = 1;
	}
		
	public FinalTest(){
		RIGHT = 2;
	}	
	public FinalTest(int n){
		RIGHT = n;
	}
	
//	public void setDown(int down){
//		this.DOWN = down;
//	}
		
	public void doWidth(){
//		width = 20;
	}
	
	public void show(){
		final int NUM = 10;//常量
//		NUM += 20;
	}
	
	public void show(final int num){
//		num = 20;//编译不通过
		System.out.println(num);
	}
	
	public static void main(String[] args) {
		
		int num = 10;
		
		num = num + 5;
		
		FinalTest test = new FinalTest();
//		test.setDown(3);
		
		test.show(10);
	}
}

final class FinalA{
	
}

//class B extends FinalA{
//	
//}

//class C extends String{
//	
//}

class AA{
	public final void show(){
		
	}
}

class BB extends AA{
	
//	public void show(){
//		
//	}
}

本文由mdnice多平台发布

标签:静态,代码,System,public,关键字,println,final,out
From: https://www.cnblogs.com/CGB1804Great/p/16891070.html

相关文章

  • static关键字
    static关键字static:静态的static可以用来修饰:属性、方法、代码块、内部类使用static修饰属性:静态变量(或类变量)属性,按是否使用static修饰,又分为:静态属性vs非静态属......
  • 多态性、instanceof关键字
    目录多态性向下转型instanceof关键字多态性理解多态性:可以理解为一个事物的多种形态。何为多态性:对象的多态性:父类的引用指向子类的对象(或子类的对象赋给父类的引用)多......
  • 【补题】第 46 届 ICPC EC Final
    比赛题目:第46届ICPCECFinal(正式赛)榜单A.DFSOrder签到题容易发现对于一个点,它的最小位置就是从根走一条链直接到它,最大位置就是除了它的子树,其它全已经走过了。......
  • 动态代理简单代码
     /***业务接口*/publicinterfaceSubject{voidcall();} /***业务接口的实现(被代理的类)*/publicclassRealSubjcetimplementsSubject{......
  • 新生第二次考核代码
    A.HFUU(easyversion)字符串#include<stdio.h>chara[100];intn=9,m=32;intmain(){for(inti=0;i<n;i++){scanf("%s",a+1);/......
  • 重写、super关键字
    目录重写super关键字重写重写:子类继承父类以后,可以对父类中同名同参数的方法,进行覆盖操作。重写以后,当创建子类对象以后,通过子类对象调用子父类中的同名同参数的方法时,......
  • DOC,PDF,PPT文件转换为HTML代码记录
    pom文件引入<repositories> <repository> <id>com.e-iceblue</id> <url>http://repo.e-iceblue.cn/repository/maven-public/</url> </repository></repositories>......
  • 2022年度国内主流低代码平台介绍
    随着低代码发展越来越迅速,也出现了很多优秀的低代码平台,企业在做技术选型时难免会觉得眼花缭乱,不知该如何选择;现在就跟小编一起来看一下国内那些优秀的低代码平台吧。让......
  • 小新Java8-【final、权限、内部类、引用类型】
    一、final关键字1.概述final:不可改变。可以用于修饰类、方法和变量。类:被修饰的类,不能被继承。方法:被修饰的方法,不能被重写。变量:被修饰的变量,不能被重新赋值。2.......
  • C++初阶(命名空间+缺省参数+const总结+引用总结+内联函数+auto关键字)
    命名空间概述在C/C++中,变量、函数和后面要学到的类都是大量存在的,这些变量、函数和类的名称将都存在于全局作用域中,可能会导致很多冲突。使用命名空间的目的是对标识符的......