黑马程序员技术交流社区

标题: java基础--05天 (下)知识点记录 [打印本页]

作者: keys    时间: 2015-3-18 20:36
标题: java基础--05天 (下)知识点记录
三、构造函数

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

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

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

举例:
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);
        }
}

作者: keys    时间: 2015-3-18 20:38
第五天内容不多,感觉良好,第六天准备开始,加油!给自己赞一个
作者: 尚巾仁杰    时间: 2015-3-18 22:05
老毕的视频内容,赞
作者: keys    时间: 2015-3-18 22:34
尚巾仁杰 发表于 2015-3-18 22:05
老毕的视频内容,赞

嗯嗯,打基础够用了:lol
作者: huozifan11    时间: 2015-3-18 23:25
学习了!!
作者: 看丶小胖    时间: 2015-3-19 07:42
楼主还有很长路要走,加油啊
作者: 温暖的小白    时间: 2015-3-19 11:00
很好,继续加油哦!
作者: 忆丶残梦顾惜    时间: 2015-3-19 15:09
抓晴天,战雨天,努力奋斗45天。有了压力才有动力,一起加油吧
作者: 齐小灰同学    时间: 2015-3-19 15:41
我想弱弱问一句,这里的每个字都是一个一个码的?




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