zoukankan      html  css  js  c++  java
  • 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代码块>构造代码块>构造函数

  • 相关阅读:
    BZOJ-2462: [BeiJing2011]矩阵模板 (宇宙无敌超级大暴力~)
    BZOJ-3555: [Ctsc2014]企鹅QQ (hash)
    BZOJ-3098: Hash Killer II (未知)
    [SinGuLaRiTy] 2017 百度之星程序设计大赛 初赛A
    [SinGuLaRiTy] 树链问题
    [SinGuLaRiTy] 2017 百度之星程序设计大赛-资格赛
    [SinGuLaRiTy] NOIP模拟赛(TSY)-Day 2
    [SinGuLaRiTy] NOIP模拟赛(TSY)-Day 1
    [SinGuLaRiTy] 2017-07-26 综合性测试
    [SinGuLaRiTy] NOIP 膜你赛-Day 2
  • 原文地址:https://www.cnblogs.com/Kanekiyi/p/9507876.html
Copyright © 2011-2022 走看看