提到类与对象,不得不知道,Java的特点----面向对象编程。那么,面向对象有什么特点呢?
(1)封装性:内部操作对外部而言看不见。(保护性)
(2)继承性: 功能进行扩展。(复用性)
(3)多态性: 方法重载。
1.1 类:是一个共性的概念。例如:人类、犬类
1.2 对象: 是一个具体的,可以使用的事物。例如:人、泰迪
1.3 类与对象的区别与联系:
(1)有了类,才可以产生对象。
(2) 对象的所有的行为一定在类中进行了完整定义。
1.4 类的组成:(1) 属性(变量,用来描述每个对象的特点);(2)方法(函数,用来描述对象操作的行为);
定义类的语法是:
class 类名称{
属性;
方法;
}
抽象化一个人类:每个人都有姓名与年龄,身高,性别等用来描述某个人的属性特征。并且每个人都可以有一些行为:吃、玩,睡等等。将其抽象成一个类具体如下:
class Person{
//属性
public String name;
public int age;
public int height;
public String gender;
//方法
public void eat(){
system.out.println("吃饭");
}
public void play(){
system.out.println("玩耍");
}
public void sleep(){
system.out.println("睡觉");
}
}
构造方法是一种特殊的方法,它是一个与类同名,没有返回类型,也不能定义为void,在方法名前面不声明方法的方法。
对象的创建就是通过构造方法来完成,其功能主要是完成对象的初始化。
构造方法的特点:
(1)构造方法必须和类名相同
(2)构造方法没有返回值类型声明
(3)每个类至少存在一个构造方法,若没有明确声明,则有系统默认生成一个无参的构造方法。若有明确声明,则系统不会默认生成构造方法。
构造方法中还可以调用构造方法,但是必须将this()方法放在首行,否则无法进行正确编译。(下面举例说明)
上述Person类的构造方法可以有以下形式:(有参构造方法是无参构造方法的重载方法)
public Person(){
}
public Person(String name,int age){
//我的name 等于你给的 name
this.name =name;
this.age = age;
}
public Person(String name,int age,int height){
this(name,age);
this.height = height;
}
public Person(String name,int age,int height,String gender,){
this(name,age,height);//若使用这种方式,要把this()调用放在构造方法中的第一条;否则无法正确编译。
this.gender = gender;
}
//或者下面这种方式也可以
public Person(String name,int age,int height,String gender){
this.name = name;
this.age = age;
this.height = height;
this.gender = gender;
}
类名 对象名 = new 类名();
上述Person类可以产生对象:
//用有参构造方法创建对象
Person person2 = new Person("alice",23);//创建对象
//无参构造方法创建对象
Person person = new Person();
person.name = "jack";
person.age = 21;
类一般用public修饰,
因为类就是为了产生对象,若用private 修饰,再外域中看不到该类,则达不到产生对象的要求。
但是,再一个类的内部再创建类,可以是private修饰的。
属性一般用private修饰
this关键字的作用:
(1)this 调用本类属性:
当参数与类中属性相同时,类中属性无法被正确赋值,此时需要加上this 关键字便可以进行正常赋值。
(2)this 调用本类方法:
a 调用普通方法:this.方法名(参数) 当然不加this也可以正常调用,如果加上this 可以区别来自于哪,在继承中会体现这一点。
b 调用构造方法:this(参数)
1)调用this构造方法必须放在首行
2)构造方法调用不能成环
(3)this 表示当前对象:
只要对象调用了本类中的方法,这个this就表示当前执行的对象。
Static : 与对象实例化无关(重要)
修饰属性:称为静态属性(类属性),用于共享属性。Eg:country
修饰方法:成为静态方法(类方法),用于工具方法,java.util.Arrays.sort();
静态方法能否调用普通属性?一定不能。因为属性需要用对象来调用,但是static修饰的静态方法无法实例化对象,所以没有办法调用普通属性。
普通方法能否调用静态属性?可以。因为静态属性仍是属性,也需要对象来进行调用,普通方法可以实例化出来对象,所以可以调用静态属性。
在Java中,final称为终结器。
(1)final 修饰类、属性、方法
(2)final成员变量必须在声明的时候初始化或者在构造器中进行初始化,否则会发生编译报错。
(3)final一旦修饰一个类后,该类的所有方法都默认会以final修饰。(不包含成员变量)
(4)使用final定义的类不能有子类。