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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 孙百鑫 于 2013-6-30 08:44 编辑

{:soso_e176:} 想听一下大家用自己的话对静态static的理解,
通俗易懂,求分享一下,谢啦,这里有点儿迷糊!!

6 个回复

倒序浏览
        (1)静态的意思,用来修饰成员变量和成员函数
        (2)静态的特点:
                随着类的加载而加载
                优先于对象存在
                对所有对象共享
                可以被类名直接调用
        (3)静态的注意事项
                A:静态方法只能访问静态成员
                        为什么:因为静态的内容是随着类的加载而加载,它是先进内存的。
                B:静态方法中不能使用this,super关键字
                C:主方法是静态的
                        public static void main(String[] args)
                        public:公共的意思,是最大权限修饰符。
                        static:由于jvm调用main方法的时候,没有创建对象。只能通过类名调用。所以,main必须用static修饰。
                        void:由于main方法是被jvm调用,不需要返回值。用void修饰。
                        main:main是主要的意思,所以jvm采用了这个名字。是程序的入口。
                        String[]:字符串数组
                        args:数组名
                        在运行的时候,通过java命令给args数组赋值。
        (4)静态变量和成员变量的区别
                A:调用方式
                        静态变量也称为类变量,可以直接通过类名调用。也可以通过对象名调用。
                        这个变量属于类。
                        成员变量也称为实例变量,只能通过对象名调用。这个变量属于对象。
                B:存储位置
                        静态变量存储在方法区长中的静态区。
                        成员变量存储在堆内存。
                C:生命周期
                        静态变量随着类的加载而存在,随着类的消失而消失。生命周期长。
                        成员变量随着对象的创建而存在,随着对象的消失而消失。
                D:与对象的相关性
                        静态变量是所有对象共享的数据。
                        成员变量是每个对象所特有的数据。
        (5)静态的优点和弊端
                优点:
                对对象的共享数据进行单独空间的存储,节省内存,没有必要每个对象都存储一份
                可直接被类名调用
                弊端:
                生命周期过长,随着类的消失而消失
                访问出现权限,即静态虽好但只能访问静态
        (6)什么使用使用静态呢?
                A:当所有对象共享某个数据的时候,就把这个成员变量定义为静态修饰的。
                B:当某个方法没有访问该类中的非静态成员,就可以把这个方法定义为静态修饰。

                静态的生命周期比较长,所以一般不推荐使用。
        (7)静态代码块
                A:它只执行一次,它比main还先执行。
                B:执行顺序
                        静态代码块--构造代码块--构造方法


评分

参与人数 1技术分 +1 收起 理由
刘凯 + 1 赞一个!

查看全部评分

回复 使用道具 举报
1、static变量
 按照是否静态的对类成员变量进行分类可分两种:一种是被static修饰的变量,叫静态变量或类变量;另一种是没有被static修饰的变量,叫实例变量。
两者的区别是:
 对于静态变量在内存中只有一个拷贝(节省内存),JVM只为静态分配一次内存,在加载类的过程中完成静态变量的内存分配,可用类名直接访问(方便),当然也可以通过对象来访问(但是这是不推荐的)。
 对于实例变量,没创建一个实例,就会为实例变量分配一次内存,实例变量可以在内存中有多个拷贝,互不影响(灵活)。
所以一般在需要实现以下两个功能时使用静态变量:
  在对象之间共享值时
  方便访问变量时

2、静态方法
静态方法可以直接通过类名调用,任何的实例也都可以调用,
因此静态方法中不能用this和super关键字,不能直接访问所属类的实例变量和实例方法(就是不带static的成员变量和成员成员方法),只能访问所属类的静态成员变量和成员方法。
因为实例成员与特定的对象关联!这个需要去理解,想明白其中的道理,不是记忆!!!
因为static方法独立于任何实例,因此static方法必须被实现,而不能是抽象的abstract。
例如为了方便方法的调用,Java API中的Math类中所有的方法都是静态的,而一般类内部的static方法也是方便其它类对该方法的调用。
静态方法是类内部的一类特殊方法,只有在需要时才将对应的方法声明成静态的,一个类内部的方法一般都是非静态的
3、static代码块
 static代码块也叫静态代码块,是在类中独立于类成员的static语句块,可以有多个,位置可以随便放,它不在任何的方法体内,JVM加载类时会执行这些静态的代码块,如果static代码块有多个,JVM将按照它们在类中出现的先后顺序依次执行它们,每个代码块只会被执行一次。例如:
public class Test5 {
private static int a;
private int b;
static{
Test5.a=3;
System.out.println(a);
Test5 t=new Test5();
t.f();
t.b=1000;
System.out.println(t.b);
}
static{
Test5.a=4;
System.out.println(a);
}
public static void main(String[] args) {
// TODO 自动生成方法存根
}
static{
Test5.a=5;
System.out.println(a);
}
public void f(){
System.out.println("hhahhahah");
}
}
运行结果:
3
hhahhahah
1000
4
5
 利用静态代码块可以对一些static变量进行赋值,最后再看一眼这些例子,都一个static的main方法,这样JVM在运行main方法的时候可以直接调用而不用创建实例。

4. static和final一块用表示什么
static final用来修饰成员变量和成员方法,可简单理解为“全局常量”!
对于变量,表示一旦给值就不可修改,并且通过类名可以访问。

用好了很好用的,不懂你可以再联系我,希望能给你解惑。

评分

参与人数 1技术分 +1 收起 理由
刘凯 + 1 赞一个!

查看全部评分

回复 使用道具 举报
各路大侠都已总结,我就只说些有的没的,O(∩_∩)O~。
个人认识,1、Java中凡是被静态static修饰的成员(变量、方法等),都会存储在内存的静态(/方法)区中,因此static成员都是随类加载而加载(加载类其实是获得类字节码,字节码也是存储在方法区,两者都是存储在方法区,因此加载时肯定就一起被加载),而其他的非静态成员就存储在堆栈中。
2、为什么static成员不能调用非静态成员呢?也就是生命周期的问题(加载的时间不同,消亡的时间也不同),类与static成员时程序一启动就加载,程序关闭才消亡,而非静态成员需要通过类实例对象调用,而实例对象只有程序执行到时才会加载进内存的堆栈区域,也可能中途没有被使用了就被Java垃圾回收机制回收(也就消亡了)。
以上内容有点唠叨且复杂(算是涉及思想方面的东西,且涉及到的知识点比较多,有些是高新技术课程才讲到的),权当理解吧,引用老师们的,记住有这么回事就可以了,O(∩_∩)O~

评分

参与人数 2技术分 +1 黑马币 +3 收起 理由
郑先明 + 3 学习了!!!!
刘凯 + 1 赞一个!

查看全部评分

回复 使用道具 举报
static用来修饰成员的。修饰的成员可以被类直接调用而不用创建对象。。并且类一加载static就在内存里了。。。
回复 使用道具 举报
楼主您好,帖子长时间没有动态我已经将您的帖子改成已解决。如有问题请私密我哦~
回复 使用道具 举报
看学习视频day06-01
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马