首页 > 编程语言 > 详细

1-4-2 Java面向对象--static和代码块

时间:2020-07-10 17:34:00      阅读:59      评论:0      收藏:0      [点我收藏+]

static

静态成员和非静态成员

静态成员

静态成员是属于整个类的,由类所进行维护,仅在类初次加载时会被初始化,在类销毁时回收。
通过该类实例化的所有对象都共享类中静态资源,任一对象中信息的修订都将影响所有对象。
由于静态成员在类加载期间就已经完成初始化,存储在Java Heap(JDK7.0之前存储在方法区)中静态存储区,因此优先于对象而存在,可以通过类名和对象名两种方式访问。

非静态成员

非静态成员属于对象独有,每个对象进行实例化时产生各自的成员,随着对象的回收而释放。
对象对各自成员信息的修订不影响其他对象
只能通过对象名访问。

注意:

类外可应用“类名.成员名”或“对象名.成员名”的方式访问非私有静态成员,更推荐用“类名.成员名”体现其特性。应用“对象名.成员名”时会出现警告,但不影响程序运行。
类内可应用“类名.成员名”或“this.成员名”或“成员”的方式访问,应用“this.成员名”时会出现警告,但不影响程序运行。

静态方法和非静态方法

静态方法:用static修饰的成员方法,通常也称为静态方法、类方法、全局方法等。

非静态方法:没有被static修饰的成员方法,也称为叫做非静态方法、实例方法,对象方法等。

特征

与静态成员相似,静态方法属于整个类的,由类所进行维护,优先于对象而存在,因此可以通过类名和对象名两种方式访问,也因此在静态方法中无法直接访问同类中的非静态成员。

总结

静态方法中不能直接访问同一个类的非静态成员,只能调用同一个类静态成员.
只能通过对象实例化后,对象.成员方法的方法访问.
静态方法不能使用this.

静态代码块

概念

静态代码块:被static修饰的,定义在类内部,用{}括起的代码段。
构造代码块:没有被static修饰的,定义在类内部,用{}括起的代码段。
普通代码块:定义在方法内部,用{}括起的代码段。

特征

静态代码块:
只能出现在类内,不允许出现在方法内。
可以出现多次,按顺序在类加载时执行。
无论该类实例化多少对象,只执行一次。

构造代码块:
可以在类内出现多次,按顺序在每个对象实例化时执行。
执行优先级:晚于静态代码块,高于构造方法。
每次执行对象实例化时,均会执行一次。

普通代码块:
可以在方法内出现多次,按顺序在方法调用时执行。

应用

静态代码块:基于性能优化的考量,多适用于需要在项目启动时执行一次的场景,譬如项目资源整体加载等。
构造代码块:多适用于类中每个对象产生时都需要执行的功能封装。与构造方法的区别在于,构造方法是在new执行时有选择性的调用带参或者无参构造,而构造代码块则是,在每个对象实例化时都一定会执行。
普通代码块:适用于在方法内进行代码功能拆分。

 1 public class Car {
 2     static String field;
 3 
 4     static {
 5         field = "字段1";
 6         System.out.println("我是静态代码块1");
 7     }
 8 
 9     static {
10         field = "字段2";
11         System.out.println("我是静态代码块2");
12     }
13 
14     {
15         field = "字段3";
16         System.out.println("我是构造代码块1");
17     }
18 
19     {
20         field = "字段4";
21         System.out.println("我是构造代码块2");
22     }
23 
24     public Car() {
25         System.out.println("我是构造方法");
26     }
27 
28     public void show() {
29         System.out.println("字段show:" + field);
30     }
31 
32 }
 1 public class CarTest {
 2 
 3     public static void main(String[] args) {
 4         Car one = new Car();
 5         one.show();
 6         System.out.println("******************************");
 7         Car two = new Car();
 8         two.show();
 9         //我是静态代码块1
10         //我是静态代码块2
11         //我是构造代码块1
12         //我是构造代码块2
13         //我是构造方法
14         //字段show:字段4
15         //******************************
16         //我是构造代码块1
17         //我是构造代码块2
18         //我是构造方法
19         //字段show:字段4
20     }
21 }

 

1-4-2 Java面向对象--static和代码块

原文:https://www.cnblogs.com/mingmingn/p/13279711.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!