Java的面向对象

17-属性可以赋值的位置

2021-07-06 610 0

简介 Java中属性可以赋值的位置有以下5种: ①默认初始化 ②显式初始化/⑤在代码块中赋值 ③构造器中初始化 ④有了对象以后,可以通过"对象.属性"或"对象.方法"的方式,进行赋值

了解Java中对象的属性可以赋值的位置之前,先了解下Java代码块。

1. 代码块的使用


    使用的频率不高, 源码中用的多

    代码块(或初始化块)

     代码块的作用:用来初始化类、对象

    代码块如果有修饰的话,只能使用static. 不能使用权限修饰符修饰

    分类:静态代码块和非静态代码块


    静态代码块

    内部可以有输出语句

    随着类的加载而执行,而且只执行一次

    作用:初始化类的信息

    如果一个类中定义了多个静态代码块,则按照声明的先后顺序执行,其实也没必要定义多个, 合并为一个即可

    静态代码块的执行要优先于非静态代码块的执行

    静态代码块内只能调用静态的属性、静态的方法,不能调用非静态的结构(非静态结构,new 对象的时候才初始化,此时还没有对象)


    非静态代码块

    内部可以有输出语句

    随着对象的创建而执行

    每创建一个对象,就执行一次非静态代码块

    作用:可以在创建对象时,对对象的属性等进行初始化

    如果一个类中定义了多个非静态代码块,则按照声明的先后顺序执行

    非静态代码块内可以调用静态的属性、静态的方法,或非静态的属性、非静态的方法

//BlockTest.java
package com.ylaihui.oop10;

class Person{
    	private static String nation;
    	private int age;
    	
    	static{
    		System.out.println("static block");
		nation = "chinese";
	}
	
	{
		System.out.println("non static block");		
		age = 10;
	}
	
	public static void breath(){
		System.out.println("Person breath...");
	}
}

public class BlockTest {
	public static void main(String[] args) {
		System.out.println("BlockTest");
		
		// 静态代码块随着类的加载而执行,而且只执行一次
		Person.breath();
		Person.breath();
		
		// 非静态代码块每创建一个对象,就执行一次非静态代码块
		Person p1 = new Person();
		Person p2 = new Person();
	}
}


2.  属性可以赋值的位置

    ①默认初始化

    ②显式初始化/⑤在代码块中赋值

    ③构造器中初始化

    ④有了对象以后,可以通过"对象.属性"或"对象.方法"的方式,进行赋值

    执行的先后顺序:① - ② / ⑤ - ③ - ④, ②和⑤,哪个代码在前面,哪个先执行,最后的值就是后执行的代码指定的值了。

//BikeTest.java
package com.ylaihui.oop2;

class MiniBike{
    	String name;
    	double weight = 11.11;
    	{
    		weight =22.22;
    	}
	// 如果代码块在weight的定义之前,竟然不报错? 
	// 非静态代码块,随着对象的创建而执行的,所以不会报错了...
    //	double weight = 11.11;
}

class Bike{
	String name;
	double weight = 10.2;
	
	public Bike(){}
	public Bike(double w){
		weight = w;
	}
	void setWeight(double w){
		weight = w;
	}
}

public class BikeTest {
	public static void main(String[] args) {
		Bike b = new Bike();
		System.out.println(b.name);
		System.out.println(b.weight);
		
		Bike b1 = new Bike(22.3);
		System.out.println(b1.weight);

		b1.setWeight(33.3);
		System.out.println(b1.weight);
		
		MiniBike mb = new MiniBike();
		System.out.println(mb.weight);
	}
}


点赞 0

文章评论

欢迎您:

纸上得来终觉浅,绝知此事要躬行!

112 文章 57756 浏览 3 评论

联系我

  •   QQ:    361352119
  •  Email:  lisimmy@sina.com
  • 微信: