黑马程序员技术交流社区

标题: 静态和构造函数的问题 [打印本页]

作者: 任增涛    时间: 2012-2-10 19:19
标题: 静态和构造函数的问题
在创建一个对象时,静态数据和构造函数的区别!
作者: 余海龙    时间: 2012-2-10 19:50
静态数据是随着类的加载而加载进内存(方法区中静态区)的,静态数据被对象共享。
构造函数是在创建对象的时候调用的。

作者: 林铁柱    时间: 2012-2-10 20:00
静态数据、静态代码块和静态方法都随着类的加载而加载,不需要被实例化,所以优先于构造函数和主函数执行。并且可以被共享,可以被子类继承。
构造函数只有在创建对象时才被调用。不可以被共享,不可以被子类继承。
作者: 魏腾飞    时间: 2012-2-10 20:17
public class staticDemo {
        public static void main(String[] args) {
                Person p = new Person("hah");
                Person.show();

                Person p1 = new Person("herh");
                p1.show();
        }

}

class Person {
        static String name;
        static String country = "CN";//country作为一个常量而且没有必要为每个对象开辟空间,所以定义为static静态的。
               /*static的方法和变量存储要搞明白。不同于栈和堆,static存储在方法区。这样节省了内存空间*/

        Person(String name) {//此处重写Person类的构造方法目的是赋值。
                this.name = name;
        }

        public static void show() {
                System.out.println(name + "::" + country);
        }

}
作者: 孙汇川    时间: 2012-2-10 21:09
静态和构造函数是两回事儿
例如:
class Person
{
       static  String  name;
     Person(){}
}


Person p = new Person();
时,只要一加载类,静态方法或者静态变量就随着类加载了,要先于对象的创建,对象创建时才调用对应的抽象方法,不是一回事儿。
作者: 何洪森    时间: 2012-2-10 21:27
静态数据属于全体对象,是所有对象共享的数据,或类数据。静态常量也称为类常量;静态变量也称类变量。在解决实际问题中经常会遇到类数据。
我们所用到的Math类中就存在许多静态数据,如Math.PI。而类的构造方法是在一个类要创建对象的时候才会被调用的,子类也不能继承,更不能
共享。
作者: 戴振良    时间: 2012-2-10 22:12
根据你的问题,我猜想你肯定是觉得对象一创建时就会自动执行静态数据和构造函数,既然都是一样会被自动执行,为什么要搞出两种方式呢?区别在哪里?如果你是这样想的话,那我就针对这个做个实例:
class test6
{
         static
     {
                 System.out.println("静态代码");
     }
        public test6()
        {
                System.out.println("构造函数");
        }
}
class test7
{
        public static void main(String args[])
        {
                new test6();
                new test6();
                new test6();
        }
}
输出结果为:
                       静态代码
                       构造函数
                       构造函数
                       构造函数

在这个例子里我们就可以看到一些不同了,如:
                                1、静态代码的执行要早于构造函数
                                2、不管创建对象多少次,静态代码只在第一次创建对象时执行一次
                                3、对象每创建一次,构造函数就执行一次
关于其他的不同还有很多,我就不多说了,按照黑马的视频看下去,再多敲代码,随着学习的深入我想你一定会慢慢的知道什么时候把代码写在静态代码块里比较好,什么时候写在构造函数里的比较好。
作者: 侯丽星    时间: 2012-2-13 10:45
个人认为,静态和构造函数没有可比性,因为静态是用来修饰成员(成员变量和成员函数)的,而构造函数是用来创建对象的。
当成员被static修饰后,就多了一个调用方式,除了可以被对象调用外,还可以直接被类名调用,格式:类名.静态成员

static特点:
1.随着类的加载而加载。也就是说,静态会随着类的消失而消失,说明它的生命周期最长。
2.优先于对象存在。
3.被所有对象所共享。
4.可以直接被类名所调用。

而构造函数仅供创建对象使用,若需要创建一个类A的对象,那么就用new A(无参或参数列表)来创建。
作者: 毛溯澜    时间: 2012-2-13 14:17
构造函数的作用是让您在构造对象的同时,可以初始化一些必要的信息。构造函数可以被重载,以满足对象生成时各种不同的初始需求。
静态数据与静态方法的作用通常是为了提供共享的数据或工具方法。
作者: 李杨    时间: 2012-2-13 19:30
其实。我想说是我来晚了,,不回答了。。呵呵。。他们都抢答了。。
作者: 钟保罗    时间: 2012-2-15 17:05
内类数据随着类的加载,就被加载到内存中的静态区中,静态数据被所以对象共享着,所以不管创建了多少个对象静态数据只有一份!
构造函数是在创建对象的时候,如果一个类中有多个构造函数,创建对象用是哪一个构造函数,一创建对象那个构造函数中的代码将被执行




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2