Java面向对象(三):Java权限修饰符—static关键字

一、权限修饰符

1.1 四类权限修饰符

public 公开的
protected 受保护的
private 私有的
默认的(不写其它修饰符时);

1、public修饰的成员变量,任何人都可以访问,都可以修改,可能导致不安全。
2、private修饰的成员变量为私有属性,只有本身才能去操作相关的信息。

1.2访问控制:当前类修饰的成员变量能否被其他不同类访问

具体参考:权限修饰符:http://www.runoob.com/java/java-modifier-types.html#protected-desc

参考例程:

Pack1:Father.java、 Son.java、 TextFather.java
Pack2:TextFather.java、Son.java

测试代码较多逻辑简单不贴了,另子类继承父类内容参考下一篇博客;

二、 static 关键字

1.1 static修饰成员变量即为静态变量

1、 静态变量与成员变量的区别:

访问方式:成员变量的访问通过创建对象后访问;引用名.成员变量
静态变量的访问可以直接通过类名访问;类名.静态变量,也可用对象的引用名但一般不建议。
存储位置:成员变量存储在堆内存,静态变量存储在方法区。
生命周期:成员变量随对象的创建而创建,对象的消失而消失;
静态变量随类的创建而创建,类的消失而消失;

2、注:静态变量为类下所有对象共有的,它的值决定于最后一次的改变值。成员变量每个对象都有对应的值,彼此不影响(存疑)
3、例程:

   Demo1.java

 1 package object_static;
 2 
 3 public class Demo1 {
 4     
 5     static String name ;
 6     static int age ;
 7     int tall ;
 8     private int weight ;
 9     public void show() {
10         System.out.println("我是非静态的"+name+age+tall);
11     }
12 
13      static void staticShow() {
14         System.out.println("我是静态的"+name+age);
15     //    System.out.println(tall);      静态方法不能访问非静态的变量
16     }
17 
18 }
View Code

     TextDemo1.java

 1 package object_static;
 2 /**
 3  *         1、对静态变量静态方法的操作
 4  *         2、静态变量用  类.变量  来改变,用  引用名.变量  也可以改变但不建议。其值取决于最后一次改变的值,
 5 *             在所有的实例中都是一样的。
 6 *    
 7  * */
 8 public class TextDemo1 {
 9     public static void main(String[] args) {
10         
11         Demo1 demo1 = new Demo1();
12         Demo1 demo2 = new Demo1();
13      //   demo1.weight = 53;
14         System.out.println(demo1.age);
15     
16         System.out.println(Demo1.age);
17         
18         //改变静态变量
19         Demo1.age = 3;                    
20     
21         //在所有的实例中都是一样的
22         demo1.age = 34;
23         demo1.tall= 178;
24         demo1.show();
25 
26         //对象调用静态方法
27         demo1.staticShow();
28         
29         //类调用静态方法
30         Demo1.staticShow();
31         
32         demo2.show();
33     }
34 
35 }
View Code

1.2 static 修饰成员方法即为静态方法

1、静态方法可直接通过类名访问,类名.静态方法;

2、静态方法只能访问静态变量,不能访问非静态的成员(包括成员变量和成员方法)。

3、main方法即为静态的。

1.3 static 代码块与代码块(掌握)

1、static 代码块

语法:
static{
  代码块;
}

2、构造代码块:

语法:
{
  代码块
}

3、例程 Demo2.java

 1 package object_static;
 2 /****
 3  * @author  Kanekiyi
 4  * 1、static代码块在类加载前就被执行,只执行一次,一般用于视频/音频/图片的加载;
 5  * 2、构造代码块只能在创建对象时被调用,创建一次对象执行一次,优先级高于构造函数。
 6  * 3、执行优先级:static代码块>构造代码块>构造函数
 7  * 
 8  * */
 9 
10 public class Demo2 {
11 
12     public static void main(String[] args) {
13     
14         Demo2 de = new Demo2();
15         System.out.println("—————————————————");       
16 
17         Demo2 de2 = new Demo2();
18 
19         System.out.println("我是main方法块");
20 
21 
22     }
23     
24     {
25         System.out.println("我是构造代码块4");       
26 
27     }
28     // 静态代码块在所有程序执行之前执行
29     static {
30         System.out.println("我是静态代码块");       
31     }
32     
33     public Demo2() {
34         System.out.println("我是无参代码块");       
35 
36     }
37 
38     // 构造代码块    通过new出来的对象调用,没用引用不会执行,执行优先级仅次于static代码块
39     {
40         System.out.println("我是构造代码块1");       
41 
42     }
43     {
44         System.out.println("我是构造代码块3");       
45 
46     }
47     
48 }
View Code

4、总结:

static静态代码块执行的优先级最高,先于类的加载,且只执行一次;一般用去图像、视频、音频等多媒体的加载;
构造代码块必须在创建对象之后才能被访问,在执行构造函数之前就被加载了。每创建一次加载一次;

5、思考题;

static 代码块、构造函数、构造代码块执行的优先级;
static代码块>构造代码块>构造函数

posted @ 2018-08-20 21:11  Kanekiyi  阅读(485)  评论(1编辑  收藏  举报