精华内容
下载资源
问答
  • 静态属性、静态方法、静态代码块

    千次阅读 2019-05-10 11:30:11
    1.什么是静态属性、静态方法 用static修饰符修饰的属性和方法叫作静态属性和静态方法 静态属性和非静态属性的区别: 1.在内存中存放的位置不同:所有static修饰的属性和方法都存放在内存的方法区里,而非静态的都...

    1.什么是静态属性、静态方法

    用static修饰符修饰的属性和方法叫作静态属性和静态方法
    
    • 静态属性和非静态属性的区别:
      1.在内存中存放的位置不同:所有static修饰的属性和方法都存放在内存的方法区里,而非静态的都存在堆内存中
      2.出现的时机不同:静态属性和方法在没创建对象之前就存在,而非静态的需要在创建对象才存在
      3.静态属性是整个类都公用的
      4.生命周期不一样,静态在类消失后被销毁,非静态在对象销毁后销毁
      5.用法:静态的可以直接通过类名访问,非静态只能通过对象进行访问

    2.使用static的注意事项

    • 带静态修饰符的方法只能访问静态属性
    • 非静态方法既能访问静态属性也能访问非静态属性
    • 非静态方法不能定义静态变量
    • 静态方法不能使用this关键字
    • 静态方法不能调用非静态方法,反之可以

    3.父子类中静态和非静态的关系

    • 对于非静态属性,子类可以继承父类非静态属性,但是当父子类出现相同的非静态属性时,不会发生子类的重写并覆盖父类的非静态属性,而是隐藏父类的非静态属性
    • 对于非静态方法,子类可以继承并重写父类的非静态方法
    • 对于静态属性,子类可以继承父类的静态属性,但是如何和非静态属性一样时,会被隐藏
    • 对于静态方法,子类可以继承父类的静态方法,但是不能重写静态方法,同名时会隐藏父类的

    注:静态属性、静态方法、非静态属性都可以被继承和隐藏,但是不可以被重写,
           非静态方法可以被重写和继承

    4.静态代码块

    静态代码块只能写在类中方法外,不能写在方法中,它会随着类的加载而优先于各种代码块和构造方法的加载,并且只会
    加载一次,如果出现多个静态代码块,会按照书写顺序加载
    
    • 静态代码块的作用
      一般情况下,有些代码需要在项目启动的时候就执行,这时候就需要静态代码块,比如一个项目启动需要加载配置文件,或初始化内容等。
    • 静态代码块不能出现在任何方法体内
      对于普通方法:普通方法是需要加载类new出一个实例化对象,通过运行这个对象才能运行代码块,而静态方法随着类加载就运行了。
      对于静态方法:在类加载时静态方法也加载了,但是必须需要类名或者对象名才可以访问,相比于静态代码块,静态方法是被动运行,而静态代码块是主动运行
    • 静态代码块不能访问普通变量
      普通变量只能通过对象调用的,所以普通变量不能放在静态代码块中。

    5.普通代码块和构造代码块

    • 静态代码块和构造代码块在声明上少一个static关键字

    • 执行时机
      构造代码块在创建对象时被调用,每次创建对象都会调用一次,且优先于构造函数执行。
      注:不是优先于构造函数执行,而是依托于构造函数,如果不创建对象就不会执行构造代码块

    • 普通代码块和构造代码块的区别在于,构造代码块是在类中定于的,而普通代码块是在方法体中定义的,执行顺序和书写顺序一致。

    6.执行顺序

               静态代码块>构造代码块>构造函数>普通代码块

    展开全文
  • 静态属性、静态代码块、静态方法、构造方法、普通方法的执行顺序 一、 静态代码块: 是在当类被载入(内存)时,(最先被调用的),静态代码块被执行,且之被执行一次,静态块常用来执行类属性的...

    一、

    静态代码块:

    是在当类被载入(内存)时,(最先被调用的),静态代码块被执行,且之被执行一次,静态块常用来执行类属性的初始化。执行类的载入之前就会调用。

     

    非静态代码块:

    是在当类的对象被创建载入(内存)时,(最先被调用的),每创建一个对象,即每载入一个对象,非静态代码块都执行一次。执行类对象的载入之前就会调用。

     

    对象载入之前,一定要是类先被载入。

     

    静态方法、非静态方法:都是调用时,才执行的。静态方法属于类的,加载完类就可以调用静态方法;非静态方法是属于对象的,加载完对象就可以调用非静态方法。

     

    加载类的动作没有什么标志性,但是加载对象的标志动作就是new动作,会去执行

     

    更精简:

    静态代码块:类每次加载到内存中调用一次,并最先调用

    非静态代码块:类的对象每次加载到内存中调用一次,并最先调用,然后是调用对应的构造方法

    静态方法、非静态方法:都是进行方法调用时才执行,调用静态方法,前提是:类已经加载到内存中;调用非静态方法,前提是类的对象已经加载到内存中。

     

    那么,

    类什么时候被加载/类加载时机:【即类被使用时,就会加载】
    第一:生成该类对象的时候,会加载该类及该类的所有父类;
    第二:访问该类的静态成员的时候;
    第三:class.forName("类名");

     

    代码块是自动的,方法是被动的。

    作用:静态代码块可以用来初始化一些项目最常用的变量和对象;静态方法可以用作不创建对象也可以能需要执行的代码。

     

    引申:JVM(内存)主要分区:程序计数器、本地方法栈、堆(heap)虚拟机栈(stack)方法区(method)     

    堆:放对象实例

    栈:局部变量表、操作数栈、动态链接、方法出口(程序上下文)

    方法区:被虚拟机加载的类信息、常量、静态变量、及时编译器编译后的代码。

    http://www.tuicool.com/articles/eyI73u

     

    有类继承的情况也一样分析:先加载子类的类,那么要加载父类的类,之后new一个子类,那么之前也要new一个父类

     

     

     

     

     二、

    iterable接口:集合类实现了iterable接口,调用接口的iterator()方法可以生成一个迭代器。iterator迭代器也是一个接口,集合类不直接实现它的原因是调用iterator()方法可以生成下标从0开始的迭代器。

    enumeration接口:迭代器接口,类似于iterator。

    区别:enumeration只有hasMoreElements()、nextElement()两个方法,而iterator有hasNext()、next()、remove()三个方法,多了一个删除功能。

    vector可以使用enumeration,所有集合类都可以使用iterator。

     

     

    http://www.blogjava.net/seaairland/articles/44367.html

     

     三、

    在Java里面参数传递都是按值传递:(由不同角度考虑)

    按值传递是传递的值的拷贝,按引用传递其实传递的是引用的地址值,可以统称为按值传递。

     

    四、date

     

    五、

    java回调:

    就是说,被调用方在被调用时也会调用对方,这就叫回调。“If you call me, i will call back”。

     

    http://www.brieftools.info/

    http://www.hztarena.org/Html/soft/201212/1762.html

    http://www.51cto.com/specbook/24/6720.htm

    posted on 2014-07-29 00:46 踏上原路 阅读(...) 评论(...) 编辑 收藏

    转载于:https://www.cnblogs.com/cyh123/p/3874416.html

    展开全文
  • 静态属性静态代码块 按代码中定义先后顺序执行 这两者优于其他顺序 都只是在类初始化的时候,加载一次 非静态属性 在普通代码块之前加载 每次新建对象的时候,都会执行 普通代码块 在构造函数之前执行 每次新建...

    知识点

    1. 静态属性和静态代码块
      按代码中定义先后顺序执行
      这两者优于其他顺序
      都只是在类初始化的时候,加载一次
    2. 非静态属性普通代码块
      按代码中定义先后顺序执行
      在构造函数之前执行
      每次新建对象的时候,都会执行
    3. 构造函数

    总结:

    • 静态属性和静态方法,是在类初始化阶段执行的,属于 “类”这个级别的,只加载一次
    • 非静态属性、普通代码块和构造函数,属于“对象”级别的,每次新建对象都会加载一次

    例子:

    public class Test {
    
        public static void main(String[] args) {
    
            Zi z1 = new Zi();
    
            System.out.println("----------------------------");
    
            Zi z2 = new Zi();
        }
    }
    class Fu{
        private static Fu f1 = new Fu(); //Fu的静态属性
        private Other other = new Other(); //Fu的非静态属性
    
        public Fu(){
            System.out.println("Fu的构造函数");
        }
    
        static{
            System.out.println("Fu的静态代码块");
        }
    
        {
            System.out.println("Fu的普通代码块");
        }
    }
    
    class Zi extends Fu{
        private static Zi z1 = new Zi(); //Zi的静态属性
    
        public Zi(){
            System.out.println("Zi的构造函数");
        }
    
        static{
            System.out.println("Zi的静态代码块");
        }
    
        {
            System.out.println("Zi的普通代码块");
        }
    }
    
    class Other{
        public Other(){
            System.out.println("Other构造函数");
        }
    }
    

    结果:

    Other构造函数
    Fu的普通代码块
    Fu的构造函数
    Fu的静态代码块
    Other构造函数
    Fu的普通代码块
    Fu的构造函数
    Zi的普通代码块
    Zi的构造函数
    Zi的静态代码块
    Other构造函数
    Fu的普通代码块
    Fu的构造函数
    Zi的普通代码块
    Zi的构造函数
    ----------------------------
    Other构造函数
    Fu的普通代码块
    Fu的构造函数
    Zi的普通代码块
    Zi的构造函数
    

    结果分析:
    在这里插入图片描述

    展开全文
  • java静态代码块/静态属性、构造块、构造方法执行、main方法、普通代码块的顺序 这也是在笔试中的一个重要的考点,就有一个输出语句让你写出输出的结果。 理论知识: 静态代码块是:属于类的,在类加载时就...

    java静态代码块/静态属性、构造块、构造方法执行、main方法、普通代码块的顺序

    这也是在笔试中的一个重要的考点,就有一个输出语句让你写出输出的结果。

    理论知识:

    静态代码块是:属于类的,在类加载时就自动执行。静态代码块定义时不能添加作用域符。

    构造块是: 在类中定义的,且定义的位置与该类的其他的属性是相当的,就是不在该类的任何成员方法中,定义时直接用{ }包含即可,不用再添加其他任何的访问作用域符。构造块是每次创建对象都会执行一次构造块。

    普通代码块:定义位置实在方法内部,在方法体内用 { } 包含即可。

    下面给出测试的代码及测试结果,主要是查看执行的顺序,及多次创建对象时执行的顺序及结果。

    [java] view plain copy
    1. public class Test_Static_Class {  
    2.     //静态代码块  
    3.     static {  
    4.          
    5.        System.out.println("静态代码块");  
    6.    }  
    7.    {  
    8.        System.out.println("构造块1");  
    9.    }  
    10.    //构造方法  
    11.    public   Test_Static_Class() {  
    12.        System.out.println("执行了构造方法");  
    13. }  
    14.    //普通的成员方法  
    15.    public void test() {  
    16.        System.out.println("在方法中的普通代码块");  
    17.        //普通的代码块  
    18.        {  
    19.            System.out.println("普通代码块");  
    20.        }  
    21.         
    22. }  
    23.    public static void main(String[] args) {  
    24.     System.out.println("执行了主方法");  
    25.     System.out.println("--------------------");  
    26.     new Test_Static_Class();  
    27.     System.out.println("------第二次创建对象---------------");  
    28.     new Test_Static_Class();  
    29.     System.out.println("------第三次创建对象---------------");  
    30.     new Test_Static_Class().test();  
    31. }  
    32.    //构造块  
    33.    {  
    34.        System.out.println("构造块2");  
    35.    }  
    36. }  
    运行的结果:


    多次创建对象,静态代码块只执行一次,且最先执行。

    接下来执行的是构造快,构造块会每创建一个对象执行一次,且多个构造块会由上到下的执行。

    在接下来执行的是构造方法,构造方法也是每创建一个对象就会执行一次。

    在接下来就是调用普通的方法中的代码块,执行的顺序,在方法中没有什么特殊的。

    对于静态属性,与静态代码块一样,也是在类加载时就会被自动执行,属于整个类的属性。

    静态方法只能访问静态属性,一定不能访问非静态属性,但是注意这种说法的与我们通过对象来访问该静态属性,就是 对象名.非静态属性变量名, 这种方式就是我们通常在main方法中的一种访问方式。 这种访问的方式是可以的,但不能直接 非静态属性变量名 或静态属性方法。

    对于静态方法中也不能直接使用this对象。


    展开全文
  • java静态代码块/静态属性、构造块、构造方法执行、main方法、普通代码块的顺序 这也是在笔试中的一个重要的考点,就有一个输出语句让你写出输出的结果。 理论知识: 静态代码块是:属于类的,在类加载时就自动...
  • static关键字一、static二、静态属性1、属性根据是否使用static修饰,分为静态变量和实例变量...4、代码块1、代码块根据是否使用static修饰,分为 静态代码块和非静态代码块a、静态代码块b、非静态代码块2、静态代码块
  • 、静态方法在Java里,可以定义一个不需要创建对象的方法,这种方法就是静态方法。要实现这样的效果,只需要在类中定义的方法前加上static关键字。例如: 一般情况下,工具类里面的方法都会定义为静态方法,例如...
  • class Demo{ static String string="静态属性"; String string1="普通属性";...System.out.println("静态代码块"); } { System.out.println("普通代码块"); } public Demo(){ System.out.println("构造方法"); } public
  • 1.静态属性:用static修饰的属性称为静态属性静态属性是整个类共同持有的共享空间,任何对象去修改都会影响其他对象,静态属性可以直接通过(类名.属性名)调用。 2.静态方法:用static修饰的...3.静态代码块:类...
  • 栈里面存储的是堆里面的地址 一、什么是静态属性?? 静态属性是整个类共有的属性。举个例子才好理解:有一个学生Student类,里面有...静态属性名 访问静态属性 注意:使用变量来访问count,修改值也是可...
  • 1、静态属性--静态方法声明--静态 只加载类 无构造 2、动态属性--普通方法声明--构造 构造实例的时候 3、构造方法 类加载过程中 如存在父类 首先执行父类的 按上述方法执行。 package io.impTest
  • class B extends A ,然后A类也就是父类里面有静态代码块,普通代码块,静态方法,静态成员变量,普通成员变量,普通方法。 子类也是这样,然后继承之后,关于程序打印输出的结果。 涉及到Java类的各种成员的初始化...
  • 静态属性静态代码块,代码块,构造方法的执行顺序结论验证 结论 1.静态属性静态代码块按照编写的顺序依次执行,只会在第一次加载的时候执行一次 2.如果存在继承关系,先执行父类的静态属性静态代码块,再执行...
  • 关于静态块、静态属性、构造块、构造方法的执行顺序 总结: 1、类加载时,执行静态代码块和初始化静态变量。执行顺序跟代码顺序一致。 2、类实例化时,初始化变量、执行代码块、执行构造。其中...
  • 转载:http://www.cnblogs.com/aligege/p/7600477.html总结:1、类加载时,执行静态代码块和初始化静态变量。执行顺序跟代码顺序一致。2、类实例化时,初始化变量、执行代码块、执行构造。其中初始化变量和代码块的...
  • 1、静态方法(static修饰)和非静态方法 1.1、静态方法:通过类名直接调用,即可不需要创建对象。(类名.方法名) 1.2、非静态方法:通过对象调用,即必须创建对象。(对象名.方法名) 1.3、何时使用静态方法:当...
  • 先看父类构造方法、子类构造方法、子类属性赋值 class Father { public Father() { System.out.println("父类构造方法"); show(); } public void show() { System.out.println("父类show"); } ...
  • (3)代码块 (4)内部类 3、static修饰属性 用static修饰的属性,称之为静态变量、类变量。 静态变量和非静态变量的属性: (1)存储的位置不同 非静态属性:堆 静态变量:方法区 (2)值的初始化(赋值)的时机是...
  • Java中三目运算符的复杂用法,让程序看起来更加简洁,但是代码易读性会降低。大家根据实际情况使用哟! 代码: /** * @Title: ThreeEyeTest * @Description: * @author: 好,你来了 * @author`s blog: ...
  • 1 静态代码块:有些代码必须在项目启动的时候就执行,这种代码是主动执行的(当类被载入时,静态代码块被执行,且只被执行一次,静态块常用来执行类属性的初始化) 2 静态方法:需要在项目启动的时候就初始化,在不...
  • 请看下面小demo,这里有两个类SubClass和SupperClass,其中SubClass继承于SupperClass。   ...2.非静态属性和非静态代码块是在类创建实例的时候执行,优先于构造方法,执行顺序与代码顺序相同。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,376
精华内容 550
关键字:

静态属性、静态方法、静态代码块