欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2022-12-29 14:50:15
一、权限修饰符 1.1 四类权限修饰符 public 公开的 protected 受保护的 private 私有的 默认的(不写其它修饰符时); 1、public修饰的成员变量,任何人都可以访问,都可以修改,可能导致不安全。 2、private修饰的成员变量为私有属性,只有本身才能去操作相关的信息。 ......

一、权限修饰符

1.1 四类权限修饰符

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

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

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

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

具体参考:权限修饰符: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

Java面向对象(三):Java权限修饰符—static关键字
 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

Java面向对象(三):Java权限修饰符—static关键字
 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

Java面向对象(三):Java权限修饰符—static关键字
 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代码块>构造代码块>构造函数