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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© keys 中级黑马   /  2015-3-18 20:36  /  1425 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

三、构造函数

特点:
对象一建立就会调用与之对应的构造函数。
作用:
可以用于给对象进行初始化

构造函数的小细节:
当一个类中没有定义构造函数是,那么系统会默认给该类加入一个空参数的构造函数

当在类中自定义了构造函数之后,默认的构造函数就没有了

举例:
class Person{
        Person(){
                System.out.println("person run");
        }
}

class PersonDemo2{
        public static void main(String[] args){
                Person p = new Person();
        }
}

构造函数重载:

举例:
class Person{
        private String name;
        private int age;
        /*Person(){
                System.out.println("A:name = "+name+",age="+age);
        }*/
        Person(String n ){
                name = n;
                System.out.println("B:name = "+name+",age="+age);
        }
       
        Person(String n ,int a){
                name = n;
                age = a;
                System.out.println("B:name = "+name+",age="+age);
        }
       
       
       
}

class PersonDemo2{
        public static void main(String[] args){
                Person p1 = new Person();
               
                Person p2 = new Person("lisi");
               
                Person p3 = new Person("lisi",10);
        }
}
注意:如果把下面的两句以及无参构造函数都注释掉的话,编译会报错
原因:因为Person类中已经有了构造函数,所以不会再默认添加无参构造函数。所以找不到无参构造函数
Person p2 = new Person("lisi");
               
Person p3 = new Person("lisi",10);

构造函数与一般函数的区别:
(1)写法上不同。
(2)在运行上也不同,构造函数是在对象一建立就运行,给对象初始化。
而一般方法是对象调用才执行。
(3)一个对象建立,构造函数只运行一次。
而一般方法可以被该对象调用多次。

什么时候定义构造函数?
当分析事物时,改事物存在具备一些特性或者行为,那么将这些内容定义在构造函数中
例如:人一出生就得有姓名。


构造代码块:
作用:给对象进行初始化。
对象一建立就运行,而且优先于构造函数执行。
和构造函数的区别:
构造代码块是给所有对象进行统一初始化,
而构造函数是给对应的对象的初始化。

构造代码块中定义的是不同对象共性的初始化内容。

举例:
class Person{
        private String name;
        private int age;
        //构造代码块(不同对象的共性放在构造代码块)
        {
                System.out.println("person code run!");
        }
       
        /*Person(){
                System.out.println("A:name = "+name+",age="+age);
        }*/
        Person(String n ){
                name = n;
                System.out.println("B:name = "+name+",age="+age);
        }
       
        Person(String n ,int a){
                name = n;
                age = a;
                System.out.println("B:name = "+name+",age="+age);
        }
       
       
       
}

class PersonDemo2{
        public static void main(String[] args){
                Person p1 = new Person();
               
                Person p2 = new Person("lisi");
               
                Person p3 = new Person("lisi",10);
        }
}
四、this 关键字


1、this:表面上,是用于区分局部变量和成员变量同名的情况。即this代表着当前对象的引用。

this为什么可以解决这个问题?
this到底代表是什么呢?

this:代表本类的对象,那到底代表哪一个?
this代表它所在函数所属对象的引用
简单说:哪个对象在调用this所在的函数,this就代表哪个对象

注意:变量出现同名情况下必须的加,在同一个类里的方法调用另外一个方法(同一个类),可以省略this

2.this的用法
当定义类中功能时,活该函数内部要用到调用该函数的对象是,这时候用this来表示这个对象

但凡本类功能内部使用了本类对象,都用this表示

举例:
class Person{
        private int age;
        Person(int age ){
                        this.age = age;
                }
        /*
        需求:给人定义一个用于比较年龄是否相同的功能。也就是是否是同龄人
        */       
        public boolean compare(Person p){
                return this.age == p.age
        }       
}

class PersonDemo3{
        public static void main(String[] args){
                Person p1 = new Person(20); //给p1(this.age)的对象赋值20岁(age)
               
                Person p2 = new Person(25);//给p2(this.age)的对象赋值25岁(age)
               
                boolean b= p1.compare(p2); //这时compare()方法里的this代表了p1(因为this和p1指向同一个地址,指向了同一个对象)
               
                System.out.println(b);
        }
}

总结:1.先要看懂this代表什么
          2.再具体用代码去实现
          
3.this关键字在构造函数间调用

说明:1.构造函数之间饿相互调用只能用this
          2.this语句只能定义在构造函数的第一行,因为初始化要先执行。
          
注意:1.不允许两个构造函数间相互调用this语句,否则会出现死循环。

        2.一般函数中不能定义this语句。

Class Person{
        private String name;
        private int name;
        Person(String name){
                this.name = name;
        }
        Person(String name,int age){
                this(name);//代表调用只有一个参数的构造函数,也相当于p(name)
                                   //但不能直接写Person(name);
                this.age = age;
        }
}

Class PersonDemo4{
        public static void main(String[] args){
       
                Person p = new Person("lisi",30);
                Person p1 = new Person("lisi2",36);
        }
}

评分

参与人数 1技术分 +1 收起 理由
万合天宜 + 1

查看全部评分

8 个回复

正序浏览
我想弱弱问一句,这里的每个字都是一个一个码的?
回复 使用道具 举报
抓晴天,战雨天,努力奋斗45天。有了压力才有动力,一起加油吧
回复 使用道具 举报
很好,继续加油哦!
回复 使用道具 举报
楼主还有很长路要走,加油啊
回复 使用道具 举报
学习了!!
回复 使用道具 举报
尚巾仁杰 发表于 2015-3-18 22:05
老毕的视频内容,赞

嗯嗯,打基础够用了:lol
回复 使用道具 举报
尚巾仁杰 来自手机 中级黑马 2015-3-18 22:05:21
藤椅
老毕的视频内容,赞
回复 使用道具 举报
第五天内容不多,感觉良好,第六天准备开始,加油!给自己赞一个
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马