Java的面向对象
17-属性可以赋值的位置
2021-07-06 697 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); } }