Java-面向对象--方法的重载--构造方法--this关键字--------(十五)

一、什么是对象

        面向对象的思想(Object Oriented Programming):

                一切客观存在的事物都是对象,万物皆对象

                任何对象,一定具有自己的特征行为

                       →        特征:→ 属性,一般为名词,代表对象有什么

                对象

                       →        行为:→ 方法,一般为动词,代表对象能做什么

二、什么是类

        在一组相同或类似的对象中,抽取出共性的特征和行为,保留所关注的部分。

                同一个类,都有不同的特征属性和行为方法

                属性:

                        通过变量表示,又称实例变量

                        数据类型  属性名;         Stringname;        int age;

                        属性定义在类的内部,方法的外部

                方法:

                        通过方法表示,又称实例方法

                        public 返回值类型 方法名(){

                                //主体方法

                        }

public class Dog {		//类名
	String name;		//属性的定义
	int age;
	String sex;
	String furColor;
	
	public void eat() {		//定义行为方法1
		System.out.println("eat........");
	}
	public void sleep() {	//定义行为方法2
		System.out.println("sleep.......");
	}
}

三、对象的创建

        

public class Test {
	public static void main(String args[]) {
		Dog dahuang=new Dog();
		
		dahuang.name="大黄";		//访问属性,赋值
		dahuang.age=2;			//对象名.属性名=值;
		dahuang.sex='母';
		dahuang.furColor="黄色";
		
		dahuang.eat();		//调用方法,  对象名.方法名();
		dahuang.sleep();
	}
}

四、对象和类的关系

        类:        定义了对象应具有的特征和行为,类是对象的模板。

        对象:     拥有多个特征和行为的实体,对象是类的实例。

        一个类可以对应多个对象实例

        比如说   "狗"  这个类就可以有很多个对象,比如说对象1:大黄,对象2:旺财。。。。

        每一个对象都有类该有的属性,而各个对象属性的值都各有不同

五、实例变量

实例变量不会因为未赋值而出现编译错误,他们都有自己的默认值。

实例变量的默认值:

        整数:        0                

        小数:        0.0

        字符:        \u0000(空格)

        布尔:        false

        其他:        null

        也就是说在创建对象后未给对象对应的属性值赋值时,此时输出对象属性都会显示上述的默认值。

        实例变量存在于类的内部,方法的外部,仅在本类有效,实例变量不允许重名,可以与局部变量重名,局部变量优先。

        

六、实例的方法

对象的实例方法包含两部分:方法的声明和方法的实现

        方法的声明:

                代表对象能做什么

                组成:修饰符  返回值类型  方法名(形参列表)

        方法的实现:

                代表对象怎么做:级如何实现相对应的功能

                组成:{逻辑代码}   

七、方法的重载

        在有些情况下,对象的同一种行为可能存在多种实现过程

        例如:

                人对象的“吃”行为就存在差异,吃饭和吃药的过程就存在差异。

public class Person {		
	
	public void eat(食物a) {	
		//吃食物
		//咀嚼
		//咽下
	}
	public void eat(药物a) {	
		//吃药
		//喝水
		//咽下去
	}
}

重载:一个类中定义多个相同名称的方法

要求:

        方法名称相同

        参数列表不同(参数的类型、个数、顺序不同都算)

        与访问修饰符、返回值类型无关

调用带有重载的方法时,需要根据传入的实参去找到与之匹配的方法

好处:灵活,方便、屏蔽使用差异

public class Person {	
    //四种都算重载
	public void eat(){
		
	}	
	public void eat(String food) {	
	
	}
	public void eat(String food,int i) {	
	
	}
    public void eat(int i,String food) {	
	
	}
}

八、构造方法

        构造方法:

                类中的特殊方法,主要用于创建对象。

        特点:

                名称与类名完全相同

                没有返回值类型

                创建对象时,触发构造方法的调用,不可通过句点手动调用

        注意:

                如果没有在类中显示定义的构造方法,则编译器默认提供无参的构造方法。

public class Test {
	public static void main(String args[]) {
		Dog dahuang=new Dog();	//new Dog();触发对象创建
		
		dahuang.name="大黄";		//访问属性,赋值
		dahuang.age=2;			//对象名.属性名=值;
		
		
		dahuang.eat();		//调用方法,  对象名.方法名();
		dahuang.sleep();
	}
}
class Dog{
	String name;
	int age;
	public Dog() {
		System.out.println();
	}
}

对象创建的过程:

        内存中开辟对象空间

        为各个属性赋予初始值

        执行构造方法中的代码

        [将对象的地址赋值给变量]

        

在上述代码块中dahuang(引用)中保存对象的地址,通过变量中的地址访问对象的属性和方法

九、构造方法的重载

        构造方法也可以重载,遵循重载规则

public class Test {
	public static void main(String args[]) {
		Dog dahuang=new Dog();	//new Dog();触发对象创建
		
		Dog wangcai=new Dog("wangcai");//创建对象时,传入参数,匹配对应的构造方法
		
		Dog huahua=new Dog("huahua",1);//创建对象的同时,传值进入构造方法
	}
}
class Dog{
	String name;
	int age;
	public Dog() {
		System.out.println();
	}
	public Dog(String name) {
		System.out.println(name);
	}
	public Dog(String name,int age) {
		System.out.println(name+"--"+age);
	}
}

在类中,如果没有显示定义构造方法,则编译器默认提供无参构造方法

如果手动添加构造方法,编译器就不会默认提供无参构造方法,

这是根据自己的需求手动添加无参构造方法。

十、this关键字

类是模板,可服务于此类的所有对象;this是类中的默认引用,代表当前实例;

当类服务于某个对象时,this则指向这个对象。

public class Demo {

	public static void main(String[] args) {
		Student s1=new Student();
		s1.sayHi();
		System.out.println(s1);
		Student s2=new Student();
		s1.sayHi();
		System.out.println(s2);
	}

}
class Student{
	String name;
	int age;
	
	public void sayHi() {
		System.out.println(this.name);
	}
}

Java-面向对象--方法的重载--构造方法--this关键字--------(十五)

上述代码块中,s1.sayHi()中调用的this指向的是s1开辟的地址空间块

                        com.qf.pro2103.day01.Student@15db9742

                        s2.sayHi()中调用的this指向的是s2开辟的地址空间块

                        com.qf.pro2103.day01.Student@6d06d69c
        访问时根据this的指向不同,得到不同的name。

 this用法(一):

        调用实例属性、实例方法。

        如:this.name        this.sayHi()

public class Demo {
	public static void main(String[] args) {
		Student s1=new Student();
		s1.sayHi();	
	}
}
class Student{
	String name="罗翔";
	int age;
	
	public void sayHi() {
		String name="张三";
		System.out.println(name);
		System.out.println(this.name);
	}
}

Java-面向对象--方法的重载--构造方法--this关键字--------(十五)

在上述代码中,实例变量和局部变量重名时,优先访问局部变量;

此时,如需访问实例变量,就需要添加this前缀。

不重名时可以省略this

 this用法(二):

调用本类中的其他构造方法。如:this()  this(实参)

class Student{
	String name;
	int age;
    int id;
	
	public Student() {
		
	}
	public Student(String name,int id) {
		this.name=name;
        this.id=id;
	}
	public Student(String name,int id,int age) {
		this(name,id);       //调用上面构造参数的逻辑代码this.name=name;和this.id=id;
		this.age=age;
	}
	public void sayHi() {
		System.out.println(name+"--"+age);
	}
}

在构造方法中,调用本类的其他构造方法,即可复用构造方法的逻辑代码

上面的第二个和第三个构造方法中,有name和id的冗余代码

this()调用无参构造

this(实参)调用有参构造

构造时必须写在构造函数的首行

上一篇:5、java Spring 使用注解开发


下一篇:Java面向对象:创建对象的内存分析