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

原创 2016年10月11日 14:55:09

转载请标明出处:
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.实参这个对象传到方法中后,可以在方法里调用它的方法

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

java提高篇(九)-----详解匿名内部类

在java提高篇-----详解内部类中对匿名内部类做了一个简单的介绍,但是内部类还存在很多其他细节问题,所以就衍生出这篇博客。在这篇博客中你可以了解到匿名内部类的使用、匿名内部类要注意的事项、如何初始...

面向对象基础续2(static关键字、理解main方法、代码块、构造方法私有化(单例模式)) .

static关键字如果现在希望一个属性被所有对象所共同拥有,则可以将其声明为static类型,声明static类型的属性或方法之后此属性或方法也成为类方法,可以由类型直接调用。使用static声明属性...

JAVA基础再回首(五)——static关键字、main方法、java Api帮助文档的使用、Math类、代码块

JAVA基础再回首(五)——static关键字、main方法、java帮助文档的使用、Math类、代码块、static关键字 可以修饰成员变量和成员方法 static关键字特点 随着类的加载而加载 ...

Java基础---面向对象(面向对象,类,对象,匿名对象,封装,构造函数,构造代码块,this,static,main,帮助文档,静态代码块,单例)

面向对象概念:面向对象其实是一种思考的思想,早期思想是面向过程。 面向过程注重的是过程,过程所涉及的行为,也就是功能。【实例】:面向过程: 1. 把冰箱打开 2. 把大象放入 3. 冰箱关起来  ...
  • yecjl
  • yecjl
  • 2015-04-15 20:12
  • 940

Java基础之面向对象(二)--static、静态代码块、Main函数、单例模式

/* 静态:static。 用法:是一个修饰符,用于修饰成员(成员变量,成员函数). 当成员被静态修饰后,就多了一个调用方式,除了可以被对象调用外, 还可以直接被类名调用。类名.静态成员。 sta...

java中静态代码块、静态方法、static关键字详解

最近在准备面试,复习java基础知识,对java中和static关键字相关的静态方法、静态代码块、非静态代码块、静态成员变量的用法进行了详细的总结。 1. 静态成员变量 声明为static关键词修饰的...

[2014-02-27]JAVA笔记_Static关键字、代码块{}、main()、final关键字

在程序中使用static声明属性,则此属性称为全局属性(或成为静态属性). 例1:使用static声明属性 class Person{ String name; int age; static ...

黑马程序员——JAVA基础之主函数main和静态static,静态代码块

------- android培训、java培训、期待与您交流! ----------

JAVA基础第六天学习日记_static关键字、文档、静态代码块、单例开发模式

---------------------- android培训、java培训、期待与您交流! ---------------------- 静态变量,方法函数存放在方法区。 静态变量...

JAVA中静态代码块的用法 static关键字用法详解 类的加载顺序

转自:http://www.cnblogs.com/guanghuiqq/archive/2012/10/09/2716898.html java中静态代码块的用法 static用法详解...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)