认识面向对象
 Java是一门纯面向对象的语言(Object Oriented Program, OOP),在面向对象的世界里,一切皆为对象。面向对象是解决问题的一种思想,主要依靠对象之间的交互完成一件事情。
  面向过程和面相对象并不是一门语言,而是解决问题的方法,没有那个好坏之分,都有其专门的应用场景。
一、类定义和使用
2.1 类的定义
基本概念:类是用来对一个实体(对象)来进行描述的,主要描述该实体(对象)具有哪些属性(外观尺寸等),哪些功能。
类的定义格式
  在java中定义类时需要用到class关键字,类的定义格式如下:
// 创建类
class ClassName{
	field; // 字段(属性) 或者 成员变量
	method; // 行为 或者 成员方法
}
 
其中,class为定义类的关键字,ClassName为类的名字, { }中为类的主体。
类名采用大驼峰定义。
比如定义一个类
public class Person {
    private String name;
    private int age;
    
	// 狗的属性
	public void barks() {
		System.out.println(name + ": 说话");
	}
    // 人的行为
	public void wag() {
	System.out.println(name + ":吃饭");
}
}
 
注意事项:
- 一般一个文件当中只定义一个类;
 - main方法所在的类一般要使用public修饰;
 - public修饰的类必须要和文件名相同。
 
1.2 类的实例化
我们通常使用到int、char、double等这些类型,都是Java中自带的内置类型。而类是用户定义的一个新的类型,有了这些自定义类型之后,就可以使用这些类型来定义实例(对象),用这些类类型来创建对象的过程,就叫做类的实例化(简单地说就是创建一个对象)。在Java中是采用new关键字,配合类名来实例化对象。
 
比如,我们根据前面定义的Person实例化一个新对象
Person person = new Person();   //实例化一个新对象
Person person1 = new Person();   
Person person3 = new Person();   //可以实例化多个对象
 
然后使用 . 就可以访问对象中的属性和方法:
public static void main(String[] args) {
        Person person = new Person();
        person.name = "张三";
        person.age = 20;
        person.barks();
        person.wag();
    }
-----------------------------------------------
输出:
张三: 说话
张三:吃饭
 
注意事项:
- new 关键字用于创建一个对象的实例;
 - 使用 . 来访问对象中的属性和方法;
 - 同一个类可以创建对个实例;
 
二、初始化和构造方法
两种常规的初始方法有两种,可分为:就地初始化和默认初始化。
2.1默认初始化
public class Date {
	public int year;
	public int month;
	public int day;
	public Date(int year, int month, int day) {
	// 成员变量在定义时,并没有给初始值, 为什么就可以使用呢?
	System.out.println(this.year);
	System.out.println(this.month);
	System.out.println(this.day);
}
public static void main(String[] args) {
	// 此处a没有初始化,编译时报错:
	// Error:(24, 28) java: 可能尚未初始化变量a
	// int a;
	// System.out.println(a);
	Date d = new Date(2021,6,9);
}
}
 
2.2 就地初始化
class Person{
    public String name = "张三";
    public int age = 10;
    public String sex = "男";
    public void sleep(){
        System.out.println(name+"正在睡觉");
    }
}
 
2.3 构造方法(重点)
基本概念:
构造方法(也称为构造器)是一个特殊的成员方法,名字必须与类名相同,在创建对象时,由编译器自动调用,并且在整个对象的生命周期内只调用一次。
    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }
 
public class Date {
	public int year;
	public int month;
	public int day;
	
	// 无参构造方法
	public Date(){
	this.year = 1900;
	this.month = 1;
	this.day = 1;
	
	// 带有三个参数的构造方法
	public Date(int year, int month, int day) {
		this.year = year;
		this.month = month;
		this.day = day;
	}
	/**
	*两个构造方法名字相同,参数列表不同,因此构成了方法重载
	*/
	public void printDate(){
		System.out.println(year + "-" + month + "-" + day);
	}
	public static void main(String[] args) {
		Date d = new Date();
		d.printDate();
	}
}
 
构造方法的特性:
- 名字必须与类名相同;
 - 没有返回值类型,设置为void也不行;
 - 创建对象时由编译器自动调用,并且在对象的生命周期内只调用一次(相当于人的出生,每个人只能出生一次);
 - 构造方法可以重载(用户根据自己的需求提供不同参数的构造方法)
 
三、this引用
3.1 this的基本概念
 this引用指向当前对象(成员方法运行时调用该成员方法的对象),在成员方法中所有成员变量的操作,都是通过该引用去访问。只不过所有的操作对用户是透明的,即用户不需要来传递,编译器自动完成。
 参考实例:
public class Person {
    private String name;
    private int age;
    public Person(String name, int age) {
        this.name = name;
        this.age = age;
        System.out.println("名字是: "+name+""+"年龄是: "+age);
 }
 
this引用的特性
- this的类型:对应类类型引用,即哪个对象调用就是哪个对象的引用类;
 - this只能在"成员方法"中使用;
 - 在"成员方法"中,this只能引用当前对象,不能再引用其他对象;
 - this是“成员方法”第一个隐藏的参数,编译器会自动传递,在成员方法执行时,编译器会负责将调用成员方法对象的引用传递给该成员方法,this负责来接收。
 
3.2 使用this的三种情况
3.2.1 this访问成员变量
this.name;   //访问成员变量
 
3.2.3 this访问成员方法
this.fun(); //访问成员方法
 
3.2.3 this调用构造方法
    public Person(String name, int age) {
        this.name = name;
        this.age = age;
        System.out.println("名字是: "+name+""+"年龄是: "+age);
 }
 
总结
以上就是今天要讲的内容,本文仅仅介绍了类和对象的定义、this引用、构造方法。下一节我们将会讨论类的封装。




















