A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© mlany 初级黑马   /  2017-12-27 16:27  /  1085 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 小石姐姐 于 2017-12-27 18:52 编辑

##static静态关键字
* 关键字用来修饰成员变量和成员方法
* 特点
                - 被所有的对象共享
                - 可以使用类名来调用
                - 静态所修饰的成员加载优先于对象随着类加载
        * 内存中的位置不同
                - 静态成员:方法区中的字节码区域的静态区中
                - 非静态成员:堆内存中
        * 初始化时机不同
                * 静态成员:类加载时初始化
                * 非静态成员:创建对象时加载
        
* 注意事项
        * 静态方法
                * 可以调用静态的成员变量和静态的成员方法
                * 不可以调用非静态的成员变量和成员方法
        * 非静态方法
                * 可以调用静态的成员和非静态的成员
* 静态方法中没有this,静态的方法或静态成员随着类加载,优先于所有对象

### static静态优缺点及应用场景
* static的优点
        * 对对象的共享数据提供单独空间存储,节省空间
        * 可以直接类名调用
* static的缺点
        * 引用的局限性,只能调用静态成员

* Math常用方法
                * static double  PI   圆周率
                * static double abs(double a)  绝对值
                * static double ceil(double a) 向上取整
                * static double floor(double a) 向下取整
                * static double round(double a) 四舍五入
                * static double max(double a,double b) 取最大值
                * static double pow(double a,double b) 计算a的b次幂
                * static double random() 随机数大于0并小于1的随机数

## 代码块
* 代码块分类
        * 局部代码块
                - 存在于方法中,控制变量的生命周期(作用域)
        * 构造代码块
                - 位置 类中方法外
                - 提取构造方法中的共性,每次创建对象都会执行,并且在构造方法执行之前执行
        * 静态代码块
                * 类中方法外,static修饰
                * 随着类的加载而加载,只加载一次,加载类的时候需要做的一些驱动
        *  同步代码块
        * 先执行静态代码块,因为static在类加载的时候就已经加载后行main方法,(程序的入口),再执行局部代码块,等new对象时执行,构造代码块,因为构造代码块先于构造方法执行最后执行构造方法
               
        * 先执行 静态代码块--> 构造代码块 --->构造方法


###  代码块执行流程示例

```java
/*
* 执行顺序
*         BlockTest静态代码块--Coder静态代码块--Coder构造代码块--Coder无参构造
*/
public class BlockTest {
        static {
                System.out.println("BlockTest静态代码块被执行");
        }

        {
                System.out.println("BlockTest构造代码块被执行");
        }

        public BlockTest() {
                System.out.println("BlockTest无参构造执行");
        }

        public static void main(String[] args) {
                Coder c = new Coder();
        }
}

class Coder {
        static {
                System.out.println("Coder静态代码块被执行");
        }

        {
                System.out.println("Coder构造代码块被执行");
        }

        public Coder() {
                System.out.println("Coder无参构造执行");
        }

}
```
               

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马