构造函数

来源:互联网 发布:网络剧 有毒 第一集 编辑:程序博客网 时间:2024/06/08 20:01


                                                构造函数

特点:

  1. 函数名和类名相同

  2. 不用定义返回值类型

  3. 没有具体的返回值

作用:

给对进行初始化

注意:;

  1. 默认构造函数的特点

  2. 多个构造函数是以重载的形式存在的。


                                                        构造函数——概述

class   Person{

        private  String  name;

        private   int   name;//定义perosn类的构造函数。

        Person()//构造函数,而且是空参数的。

        {

                System.out.println("preson  run");

        }

        public void speak()//一般函数

        {

                System.out.println(name+":"age);

        }

}

class   ConsDemo{

        public static void main(String[] args){

                Person  p=new  Person;//构造函数,构建创造对象时调用的函数。

                //作用:可以给对象进行初始化。

                p.speak();

        }//创建对象都必须要通过构造函数初始化。

}//一个类中如果没有定义过构造函数,那么该类中会有一个默认的空参数构造函数。

如果类中定义了指定的构造函数,那么类中的默认构造函数就没有了。



一般函数和构造函数有什么区别呢?

构造函数:对象创建时,就会调用与之对应的构造函数,对对象进行初始化。

一般函数:对象创建后,需要函数功能时才调用。


构造函数:对象创建时,会调用只调用一次。

一般函数:对象创建后,可以被调用多次。

例:Person  p=new  Person();//这是构造函数

            p.speak();//这是一般函数,可以调用多次

            p.speak();


什么时候定义构造函数呢?

在描述事物时,该事物已存在就具备的一些内容,这些内容都定义在

构造函数中。

构造函数可以有多个,用于对不同的对象进行针对性的初始化。

多个构造函数在类中是以重载的形式来体现的。


                                                        this关键字

特点:this代表其所在函数的所属对象的引用

换言之:this代表类对象的引用


什么时候使用this关键字呢?

当在函数内需要用到调用该函数的对象时,就用this。


当成员变量和局部变量重名,可以使用关键字this来区分。


this:代表对象,代表那个对象呢?当前对象。

        this就是所在函数所属对象的引用。

简单说:哪个对象调用this所在的函数,this就代表哪个对象。

this也可以用于构造函数中调用其他构造函数。(例1)

注意:只能定义在构造函数的第一行,因为初始化动作要先执行。

例1:

Person(String name){

    this.name=name;

}

Person(String name,ing age){

    this(name);//调用上面的构造函数。

    this.age=age;

}

this(这个对象的意思)


                                                    this关键字——应用

例:判断是否是同龄人

public boolean compare(person  p){

        return  this.age==p.age

}

class  ThisDemo{

        public static void main(String[] args){

            Person   p1=new  Person("aa",30);

            Person  p2= new  Person("zz",12);

            P2.compare(p1);

        }

}

compare(比较的意思)


                                            static(静态)关键字

static的特点:

  1. static是一个修饰符,用于修饰成员。

  2. static修饰成员被所有的对象所共享。

  3. static优先于对象存在,因为static的成员随着类的加载就已经存在了。

  4. static修饰的成员多了一种调用的方式,就可以直接被类名所调用。

类名 . 静态成员

   5.static修饰的数据是共享数据,对象中的存储的是特有数据。


成员变量和静态变量的区别?

1,两个变量的生命周期不同。

成员变量随着对象的创建而存在,随着对象的被回收而释放。

静态变量随着类的加载而存在,随着的类的消失而消失。

2,调用方不同

成员变量只能被对象调用

静态变量可以被对象调用,还可以被类名调用。

3,别名不同

成员变量也称实例变量。

静态变量称为类变量。

4,数据存储的位置不同

成员变量数据存储在堆内存的对象中,所以也叫对象的特有数据。

静态变量数据存储在方法区(共享数据区)的静态区,所以也叫数据的共享数据。

例:

class   Person{

        String  name;//成员变量,也叫实例变量

        static String country="CN"//静态变量,类变量

        public void show{

                System.out.println(country+":"+name);

        }

}

class StaticDemo{

        public static void main(String[] args){

                Person  p=new  Person();//注:p类类变量

                p.name("小孩");

                p.name();

                System.out.println(p.country);//类名直接调用

                System.out.println(Person.country);//类名直接调用

        }

}

注:country:国籍的意思


静态使用的注意事项:

1,静态方法只能访问静态成员。(非静态既可以访问静态,又可以访问非静态)。

2,静态方法中不可以使用this或者super关键字。

3,主函数是静态的。举例3

例3:

class  StaticDemo{

        int  num=4;

        public static void main(String[] args){

                new.StaticDemo().show();

        }

        public void show(){

                System.out.println(num);

        }

}


主函数特殊之处:

1,格式是固定的

2,被Jvm所识别和调用。


public:因为权限必须最大的。

static:不需要对象,直接用主函数所属类名调用即可。

void:主函数没有具体的返回值。

main:函数名,不是关键字,只是一个Jvm识别的固定的名字。

String[] args:这是主函数的参数列表,是一个数组类型的参数,而且元素都是字符串类型。

class  MainDemo{

        public static void main(String[] args)//new  String[0]

        {

                System.out.println(args);//[Ljava.Lang.String;@c17164

        }                                                注:这个数组里存的是一个字符串类型的元素。

}


内存图解

例:

class Person{

        Private String name;//成员变量

        Private int  age;//成员变量

       

         static String country="CN";//静态变量

        

        public Person(String name;int age)

        {

                this.name=name;//提供一个构造函数,同时初始化姓名和年龄

                this.age=age;//提供一个构造函数,同时初始化姓名和年龄

        }

        public void show()//非静态方法,显示出姓名,年龄,国籍

        {

                System.out.println(Person.country+":"+this.name+":"+this.age);

        }        

        public static void method()//静态方法,显示国籍

        {

                System.out.println(Person.country);

        }

}

class  StaticDemo2{

        public static void main(String[] args){

                Person.method();//用类名的形式,调用一次静态方法

                Person  p=new  Person();//创建了该类的对象

                p.show();//调用非静态的方法

        }

}


静态什么时候用?

1,静态变量:

当分析对象中所具备的成员变量的值都是相同的。

这时这个成员就可以被静态修饰(String)。

只要数据在对象中都是不同的,就是对象特有数据,必须存储在对象中,是非静态的。

如果是相同的数据,对象不需要做修饰,值需要使用即可,不需要存储在对象中,定义成静态的。

2,静态函数:

函数是否用静态修饰,就参考一点,就是该函数功能是否有访问到对象中的特有数据。

简单说,从源代码看,该功能是否需要访问非静态的成员变量,如果需要,该功能就是非

静态的。如果不需要,就可以将该功能定义成静态。当然,也可以定义成非静态。但是非

静态需要被对象调用,而仅创建对象调用非静态的没有访问特有数据的方法,该对象的创建

是没有意思的。


静态代码块:

随着类的加载而执行,而且只执行一次。

作用:用于给类进行初始化。

class  staticCode{

        static  int  num;

        static

        {

                num=10;//静态代码块,给类进行初始化

                System.out.println("haha");//静态代码块,给类进行初始化

        }

        static  void show()

        {

                System.out.println(num);

        }       

}

class  StaticCodeDemo{

        public static void main(String[] args){

                Static Code.show();

        }

}

注:有非静态的一般不用初始化,因为对象可以初始化,根据对象的不同,

初始化的内容不同。而且如果全是静态,不需要对象,这个时候类构造静

态代码块,来进行初始化。


class  Person{

        private  String name;

        {        //构造代码块,可以给所所有对象进行初始化的

                cry();

        }

        Person()//构造函数是给对应的对象进行针对性的初始化

        {

                name="baby";

        }

        Person(String name)

        {

                this.name=name;

        }

        public void cry()

        {

                System.out.println("哇哇");

        }

        public void spek()

        {

                System.out.println(name+":"+name);

        }

        static void show()

        {

                System.out.println("show  run");

        }

}

class  StaticCodeDemo{

        static

        public static void main(String[] args){

                Person  p1=new  Person;

                p1.speak();

                Person  p2=new  Person("旺财");

                p2.speak();

                new  Person();

        }

}

注:构造代码块,静态代码块,构造函数同时操作同一个变量的静态,

问操作的顺序是什么?

静态代码块先执行,如果有对象,构造代码块先执行,然后构造函数。


                                                构造函数

特点:

  1. 函数名和类名相同

  2. 不用定义返回值类型

  3. 没有具体的返回值

作用:

给对进行初始化

注意:;

  1. 默认构造函数的特点

  2. 多个构造函数是以重载的形式存在的。


                                                        构造函数——概述

class   Person{

        private  String  name;

        private   int   name;//定义perosn类的构造函数。

        Person()//构造函数,而且是空参数的。

        {

                System.out.println("preson  run");

        }

        public void speak()//一般函数

        {

                System.out.println(name+":"age);

        }

}

class   ConsDemo{

        public static void main(String[] args){

                Person  p=new  Person;//构造函数,构建创造对象时调用的函数。

                //作用:可以给对象进行初始化。

                p.speak();

        }//创建对象都必须要通过构造函数初始化。

}//一个类中如果没有定义过构造函数,那么该类中会有一个默认的空参数构造函数。

如果类中定义了指定的构造函数,那么类中的默认构造函数就没有了。



一般函数和构造函数有什么区别呢?

构造函数:对象创建时,就会调用与之对应的构造函数,对对象进行初始化。

一般函数:对象创建后,需要函数功能时才调用。


构造函数:对象创建时,会调用只调用一次。

一般函数:对象创建后,可以被调用多次。

例:Person  p=new  Person();//这是构造函数

            p.speak();//这是一般函数,可以调用多次

            p.speak();


什么时候定义构造函数呢?

在描述事物时,该事物已存在就具备的一些内容,这些内容都定义在

构造函数中。

构造函数可以有多个,用于对不同的对象进行针对性的初始化。

多个构造函数在类中是以重载的形式来体现的。


                                                        this关键字

特点:this代表其所在函数的所属对象的引用

换言之:this代表类对象的引用


什么时候使用this关键字呢?

当在函数内需要用到调用该函数的对象时,就用this。


当成员变量和局部变量重名,可以使用关键字this来区分。


this:代表对象,代表那个对象呢?当前对象。

        this就是所在函数所属对象的引用。

简单说:哪个对象调用this所在的函数,this就代表哪个对象。

this也可以用于构造函数中调用其他构造函数。(例1)

注意:只能定义在构造函数的第一行,因为初始化动作要先执行。

例1:

Person(String name){

    this.name=name;

}

Person(String name,ing age){

    this(name);//调用上面的构造函数。

    this.age=age;

}

this(这个对象的意思)


                                                    this关键字——应用

例:判断是否是同龄人

public boolean compare(person  p){

        return  this.age==p.age

}

class  ThisDemo{

        public static void main(String[] args){

            Person   p1=new  Person("aa",30);

            Person  p2= new  Person("zz",12);

            P2.compare(p1);

        }

}

compare(比较的意思)


                                            static(静态)关键字

static的特点:

  1. static是一个修饰符,用于修饰成员。

  2. static修饰成员被所有的对象所共享。

  3. static优先于对象存在,因为static的成员随着类的加载就已经存在了。

  4. static修饰的成员多了一种调用的方式,就可以直接被类名所调用。

类名 . 静态成员

   5.static修饰的数据是共享数据,对象中的存储的是特有数据。


成员变量和静态变量的区别?

1,两个变量的生命周期不同。

成员变量随着对象的创建而存在,随着对象的被回收而释放。

静态变量随着类的加载而存在,随着的类的消失而消失。

2,调用方不同

成员变量只能被对象调用

静态变量可以被对象调用,还可以被类名调用。

3,别名不同

成员变量也称实例变量。

静态变量称为类变量。

4,数据存储的位置不同

成员变量数据存储在堆内存的对象中,所以也叫对象的特有数据。

静态变量数据存储在方法区(共享数据区)的静态区,所以也叫数据的共享数据。

例:

class   Person{

        String  name;//成员变量,也叫实例变量

        static String country="CN"//静态变量,类变量

        public void show{

                System.out.println(country+":"+name);

        }

}

class StaticDemo{

        public static void main(String[] args){

                Person  p=new  Person();//注:p类类变量

                p.name("小孩");

                p.name();

                System.out.println(p.country);//类名直接调用

                System.out.println(Person.country);//类名直接调用

        }

}

注:country:国籍的意思


静态使用的注意事项:

1,静态方法只能访问静态成员。(非静态既可以访问静态,又可以访问非静态)。

2,静态方法中不可以使用this或者super关键字。

3,主函数是静态的。举例3

例3:

class  StaticDemo{

        int  num=4;

        public static void main(String[] args){

                new.StaticDemo().show();

        }

        public void show(){

                System.out.println(num);

        }

}


主函数特殊之处:

1,格式是固定的

2,被Jvm所识别和调用。


public:因为权限必须最大的。

static:不需要对象,直接用主函数所属类名调用即可。

void:主函数没有具体的返回值。

main:函数名,不是关键字,只是一个Jvm识别的固定的名字。

String[] args:这是主函数的参数列表,是一个数组类型的参数,而且元素都是字符串类型。

class  MainDemo{

        public static void main(String[] args)//new  String[0]

        {

                System.out.println(args);//[Ljava.Lang.String;@c17164

        }                                                注:这个数组里存的是一个字符串类型的元素。

}


内存图解

例:

class Person{

        Private String name;//成员变量

        Private int  age;//成员变量

       

         static String country="CN";//静态变量

        

        public Person(String name;int age)

        {

                this.name=name;//提供一个构造函数,同时初始化姓名和年龄

                this.age=age;//提供一个构造函数,同时初始化姓名和年龄

        }

        public void show()//非静态方法,显示出姓名,年龄,国籍

        {

                System.out.println(Person.country+":"+this.name+":"+this.age);

        }        

        public static void method()//静态方法,显示国籍

        {

                System.out.println(Person.country);

        }

}

class  StaticDemo2{

        public static void main(String[] args){

                Person.method();//用类名的形式,调用一次静态方法

                Person  p=new  Person();//创建了该类的对象

                p.show();//调用非静态的方法

        }

}


静态什么时候用?

1,静态变量:

当分析对象中所具备的成员变量的值都是相同的。

这时这个成员就可以被静态修饰(String)。

只要数据在对象中都是不同的,就是对象特有数据,必须存储在对象中,是非静态的。

如果是相同的数据,对象不需要做修饰,值需要使用即可,不需要存储在对象中,定义成静态的。

2,静态函数:

函数是否用静态修饰,就参考一点,就是该函数功能是否有访问到对象中的特有数据。

简单说,从源代码看,该功能是否需要访问非静态的成员变量,如果需要,该功能就是非

静态的。如果不需要,就可以将该功能定义成静态。当然,也可以定义成非静态。但是非

静态需要被对象调用,而仅创建对象调用非静态的没有访问特有数据的方法,该对象的创建

是没有意思的。


静态代码块:

随着类的加载而执行,而且只执行一次。

作用:用于给类进行初始化。

class  staticCode{

        static  int  num;

        static

        {

                num=10;//静态代码块,给类进行初始化

                System.out.println("haha");//静态代码块,给类进行初始化

        }

        static  void show()

        {

                System.out.println(num);

        }       

}

class  StaticCodeDemo{

        public static void main(String[] args){

                Static Code.show();

        }

}

注:有非静态的一般不用初始化,因为对象可以初始化,根据对象的不同,

初始化的内容不同。而且如果全是静态,不需要对象,这个时候类构造静

态代码块,来进行初始化。


class  Person{

        private  String name;

        {        //构造代码块,可以给所所有对象进行初始化的

                cry();

        }

        Person()//构造函数是给对应的对象进行针对性的初始化

        {

                name="baby";

        }

        Person(String name)

        {

                this.name=name;

        }

        public void cry()

        {

                System.out.println("哇哇");

        }

        public void spek()

        {

                System.out.println(name+":"+name);

        }

        static void show()

        {

                System.out.println("show  run");

        }

}

class  StaticCodeDemo{

        static

        public static void main(String[] args){

                Person  p1=new  Person;

                p1.speak();

                Person  p2=new  Person("旺财");

                p2.speak();

                new  Person();

        }

}

注:构造代码块,静态代码块,构造函数同时操作同一个变量的静态,

问操作的顺序是什么?

静态代码块先执行,如果有对象,构造代码块先执行,然后构造函数。


1 0