【Java基础】----static关键字、代码块、Main方法、匿名对象详解

转载请标明出处:
http://blog.csdn.net/lxy_cn/article/details/52788145
本文出自:【李晓阳的博客

1.static关键字

static简介

static是静态的意思,是一个修饰符,能够用于成员变量和成员属性。

特点

能够通过类名直接进行调用,被static修饰的成员属性变成了类属性,被static修饰的成员方法变成了类方法, 类属性 和 类方法能够不用创建对象直接被调用

//普通类
public class Persion {
    //static修饰后成为类属性
    public static String str="hello,sttaic";
    //static修饰后成为类方法
    public static void sleep(){
        System.out.println("好吧!,我睡了");
    }
}

//Main主线程
public static void main(String[] args) {
    //能够不用创建对象直接调用
    //类名.成员变量
    String aa=Persion.str;
    //类名.成员方法
    Persion.sleep();
}

静态属性被该类的说有对象所共享

静态变量(类变量)和非静态变量(实例变量)的区别

a.内存中的位置

类变量随着类的加载而存在于方法区中
实例变量随着对象的创建而存在于堆内存中

b.生命周期

静态变量的生命周期最长,随着类的加载而加载,随着类的消失而消失;实例变量的生命周期随着对象的创建而产生,消失而消失,静态属性要早于对象而存在。

c.所属关系不同

类变量所属于整个类,被类的所有对象所共有。
实例变量是对象的特有数据,仅仅属于某个对象。

优缺点

优点: 对于对象的共享数据提供单独的存储空间,节省了控件,没必要所有对象都存储一份。

缺点: 生命周期过于长,访问有一定的局限性,(静态方法只能访问静态属性)


2.代码块

说明

代码块就是被{ }包裹的部分,Java中的代码块分为:
普通代码块,又称为局部代码块,存在于方法体中

构造代码块,又称为初始化代码块,在使用new关键字创建对象时执行,且先于构造方法执行

静态代码块,被static直接修饰的代码块,在类被加载时就执行,只执行一次

public class CodeBlock {
    //1.静态代码块 类加载的时候进行执行
    static{
        System.out.println("这是静态代码块");
    }
    //2.构造代码块  创建对象的时候执行
    {
        System.out.println("这是构造代码块(初始化代码块)");
    }

    public CodeBlock(){
        System.out.println("这是构造方法");
    }
    public void hello(){
        //局部代码块   当方法被调用的时候开始执行
        {
            int i=100;
            System.out.println("这是普通代码块(局部代码块)");

        }
        int i=1;
    }



    //主函数
    public static void main(String[] args) {
        //1.在创建对象前 静态代码块首先执行
        //2.在创建对象时 构造代码块开始执行
        //3.在创建对象时 构造代方法开始执行(构造代码块先于构造方法执行)
        CodeBlock cb1=new CodeBlock();
        //4.方法被调用时 普通代码块执行
        cb1.hello();
        System.out.println("-------割-------");
        //静态代码块只在加载类的时候调用且只调用一次
        CodeBlock cb2=new CodeBlock();
        cb2.hello();
    }
}

当执行CodeBlock p = new CodeBlock(); 时,内存变化情况

1,将Person.class文件加载进内存
2,在方法区为静态属性分配内存并进行默认初始化
3,执行静态代码块,静态方法进方法区
4,p是对象(变量),那么在栈内存中开辟一个变量空间p
5,在堆内存中给对象分配空间,并分配内存地址值
6,普通方法进方法区
7,非静态属性进堆内存,并进行默认初始化
8,调用构造代码块(初始化代码块)
9,调用对应的构造方法进行对象初始化,对象初始化完毕
10,将对象内存地址赋值给p变量,让p变量指向该对象

3.Main方法

main方法是一个特殊的方法,作为程序执行的入口可以被JVM识别。

main方法是静态的,所以可以被JVM直接调用,非常方便。

main不是Java关键字,但用来被JVM识别为程序执行的入口。

4.匿名对象

  1. 没有名字的对象
  2. CodeBlock p=new CodeBlock(); p只是一个对象的名字(引用), newCodeBlock()才是创建出来的对象

  3. new Person().eat();
    缺点:同一个对象只能调用一次方法

  4. 作用:传参
    a.自定义的类型也可以作为参数的类型去使用
    b.形参的类型是Person,那么实参的类型也必须是Person
    c.实参在传参时可以匿名
    d.实参这个对象传到方法中后,可以在方法里调用它的方法

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值