面向对象的初步认识
什么是面向对象
Java是一门纯面向对象的语言(Object Oriented Program简称OOP),在面向对象的世界里,一切皆为对象。面向对象是解决问题的一种思想,主要依靠对象之间的交互完成一件事情,用面向对象的思想来设计程序,更符合人们对事物的认识,对于大型程序的设计、扩展以及维护都非常友好。
面向对象与面向过程
面向对象:实体(对象)之间相互协作完成
面向过程:更注重过程
例如买电脑
面向对象:跟妈妈说要买电脑--->妈妈去买电脑--->使用
面向过程:查配置--->打开购物软件--->选电脑--->下单--->填地址--->取快递--->使用
类定义和使用
类是用来对一个实体(对象)来进行描述的,主要描述该实体(对象)具有哪些属性,有哪些功能,描述完成后计算机就可以识别了。
类的定义格式
class ClassName{
field; //字段(属性或成员变量)
method; //行为(成员变量)
}
class 是定义类的关键字ClassName为类的名字,{}中是类的主体。
类中包含的内容称为类的成员,属性主要是用来描述类的,称之为成员属性或者类成员变量。方法主要说明类具有哪些功能,称为类的成员方法。
例如:定义一个学生类
class Student{
//学生的属性(成员变量)
public String name; //成员变量不初始化会给默认值null
public String sex;
public int age;
public double score;
//学生的行为(成员方法)
public void AttendClass(){
System.out.println(name+"按时上课");
}
public void Study(){
System.out.println(name+"努力学习");
}
public void Exam(){
System.out.println(name+"参加考试");
}
}
注意:
1.类名注意采用大驼峰;
2.成员前写法统一为public;此处写的方法不带static关键字;
3.一般一个文件当中只定义一个类;
4.main方法所在的类一般要使用public修饰;public修饰的类必须和文件名相同;不要轻易修改public修饰的类的名称,如果要修改须通过开发工具修改
类的实例化
什么是实例化
定义了一个类,就相当于在计算机中定义了一种新的类型,与基本数据类型类似,只不过基本数据类型是Java语言自带的内置类型,而类是用户自定义的一个新的类型,有了这些自定义的类型之后,就可以使用这些类来定义实例(或者称为对象)
用类类型创建对象的过程,称为类的实例化,在Java中采用new关键字,配合类名来实例化对象。
public static void main(String[] args) {
//通过关键字new 实例化一个Student对象 对象其实就是一个实体
//类是用户自定义的一种新的类型
//可以通过这个新的类型去定义变量 --> 此时他的赋值需要new去实例化对象-->所以他是一个引用变量-->用来存对象的地址
//一个类可以实例化多个对象
Student student1 = new Student();
student1.name ="张三";
student1.age=18;
student1.sex="man";
student1.score=90;
System.out.println(student1.name+" "+student1.age+" "+student1.sex+" "+student1.score);
student1.Study();//在此之间已经对name赋值
Student student2 = new Student();
student2.Study();//在此之前未对name赋值
student2.name ="李四";
student2.age=18;
student2.sex="woman";
student2.score=90;
System.out.println(student2.name+" "+student2.age+" "+student2.sex+" "+student2.score);
}
注意:
1.new关键字用于创建一个对象的实例;
2.使用 . 来访问对象中的属性和方法
3.同一个类可以创建多个实例
类和对象的说明
- 类只是一个模型一样的东西,用来对一个实体进行描述,限定了类有哪些成员。
- 类是一种自定义的类型,可以用来定义变量。
- 一个类可以实例化出多个对象,实例化出的对象,占用实际的物理空间,存储类成员变量。
- 类实例化出对象就像现实中使用建筑设计图建造出房子,类就像是设计图,只设计出需要什么东西,但是并没有实体的建筑存在,同样类也只是一个设计,实例化出的对象才能实际存储数据,占用物理空间。
class Person{
public String name;
public int age;
public void eat(){
System.out.println(name+"吃饭");
}
public void show(){
System.out.println("姓名:"+name+" 年龄:"+age);
}
}
public static void main(String[] args) {
//引用指向对象 也就是说变量存该对象的地址
Person person1=new Person();
//通过引用可以对name和age赋值
System.out.println(person1.name);
//此时并未对name赋值但不会报错 因为他属于成员变量,编译器会给他们默认值
//如果是引用类型,那么默认值为null,Boolean默认值false,char默认值'\u0000'
person1.name="张三";
person1.age=18;
System.out.println(person1.name);
System.out.println(person1.age);
person1.show();
}
public static void main(String[] args) {
Person person = null; //代表person不指向任何对象
Person person1 = new Person();
Person person2 = new Person();
person1=person2; //代表person1这个引用指向了person2这个引用指向的对象
}
public static void main(String[] args) {
//此时并非是一个引用指向多个对象 最终person1直指向了最后一个对象,中间对象都被回收了
Person person1 = new Person();
person1 = new Person();
person1 = new Person();
person1 = new Person();
}
注意:1.当一个引用赋值为null时代表这个引用不指向任何对象;2.引用不能指向引用;3.一个引用不能指向多个对象
This引用
this引用指向当前对象(成员方法运行时调用该成员方法的对象),在成员方法中所有成员变量的操作,都是通过该引用去访问。只不过所有的操作对用户是透明的,即用户不需要来传递,编译器自动完成。
注意:this引用的是调用成员方法的对象。
public class DataUtil {
public int year;
public int month;
public int day;
//每个成员方法第一个参数默认是this // public void setDate(DataUtil this,int y,int m,int d)
public void setDate(int y,int m,int d){
year=y;// 还可写成 this.year=y; //加上this表示给当前的对象的属性赋值
month=m;
day=d;
}
//public void show(DataUtil)
public void show(){
//这样也对--> System.out.println("年:"+year+" 月:"+month+" 日:"+day);
System.out.println("年:"+this.year+" 月:"+this.month+" 日:"+this.day);
}
public static void main(String[] args) {
DataUtil dataUtil = new DataUtil();
dataUtil.setDate(2023,12,4);
dataUtil.show();
DataUtil dataUtil2 = new DataUtil();
dataUtil2.setDate(2023,12,5);
dataUtil2.show();
DataUtil dataUtil3 = new DataUtil();
dataUtil3.setDate(2023,12,6);
dataUtil3.show();
}
}
this引用的特性
1. this的类型:对应类类型引用,即那个对象调用就是那个对象的引用类型;
2. this只能在成员方法中使用;
3. 在成员方法中,this只能引用当前对象,不能再引用其他对象;
4. this是成员方法第一个隐藏的参数,编译器会自动传递,在方法执行时,编译器会负责将调用成员方法对象的引用传递给该成员方法,this负责来接收;