第一章 Java面向对象-对象和类
文章目录
- 面向对象
- 面向对象编程(OOP)
- 一、对象和类
- 1. 类
- 2. 对象
- (1)main方法在当前类中
- (2)main方法在其他类中
- 3. 初始化对象
面向对象编程(OOP)
什么是面向对象
面向对象编程的全称是Object Oriented Programing .要理解面向对象就要先理解面向过程,因为在面向对象出现之前只有面向过程。
面向对象就像是你想吃面,你告诉老板你是吃板面还是吃拉面,面向过程就是你自己准备食材一步步做饭。
面向过程需要一步步推进度,作完上一步才能做下一布;面向对象的特点是模块化,大家一人一个,谁也不用管谁。
面向对象的底层依然是面向过程,只不过是把过程抽象化一个个对象,封装成类,供我们调用。
一、对象和类
生活中有很多的对象,一个人,一棵树。类就是人类,数目这种抽象的类目、类别。类是对象的模板,对象是类的实例化,对象不止可以是现实中的实体也可以是虚拟化的事物。
1. 类package com.Fregata;
public class Person {
String name;
int age; //成员变量(实例变量),只能通过类的实例(对象)来访问
char sex;
static int data=1; //静态变量(类变量),可以直接被类访问。静态变量除了被声明为常量外很少使用。
public Person() {
//这是默认的构造方法,经过反编译可以看到。
}
public void sayHello(){
//这是一个方法(无参无返回值)
}
public void sayHi(){
}
}
类包含以下三项:
- 字段(Filed)
- 字段也称为成员变量,在类内部但在方法外部,方法内部的叫临时变量或局部变量。在上面的PersonTest类中包含4个成员变量,分别是name,age,sex和data,其中data是静态变量。
成员变量也叫做实例变量,其在编译时不占用内存空间,在运行时获取内存,也就是说,只有在对象实例化(new Person())后,字段才会获取到内存,这也正是它被称作“实例”变量的原因。
- 字段也称为成员变量,在类内部但在方法外部,方法内部的叫临时变量或局部变量。在上面的PersonTest类中包含4个成员变量,分别是name,age,sex和data,其中data是静态变量。
- 方法(Method)
- sayHi()和sayHello(),表示 Person这个对象可以做的事,也就是打招呼。
- 构造方法(Constructor)
- public Person() { } 这是一个默认的构造方法
关于以上三项接下来还会详细讲解。
一个类可以创建多个对象
类就是一种引用类型,是我们自己创造的一种类型,是自定义数据类型
2. 对象创建一个对象 创建对象需要使用new
public static void main(String[] args){
// 基本数据类型 变量名 = new
int[] arr = new int[10];
// 类 对象名 = new
// 引用类型 引用 指向 对象 引用全称引用类型变量
Person person = new Person();
// 声明了一个Person类型的引用 person ,指向了一个Person对象
// 相当于把对象赋给了引用类型变量person,后续用person这个引用指代对象。
//person 被称为对象 Person 的引用变量
person.name="wang";
person.age=13;
}
Person person = new Person();
包含两部分
1.Person person;
2.person = new Person();
Person person声明一个Person类型的变量person,这个变量和数组类似有两块内存,一块存放实际内容,一块存放实际内容的位置。声明变量本身只会分配存放位置的内存空间,这块空间还没有指向任何实际内容。
这种只存储实际内容的位置而不存储数据的变量被称为引用变量。
**person = new Person()**创建了一个实例或对象,然后复制给了变量person,实际做了两件事:
1)分配内存,来存储新对象的数据包括对象的属性。
2)给实例变量设置默认值。
通过对象来访问和操作其内部的数据是一种基本的面向对象思维。
上面我们用对象给变量进行了赋值,这是不提倡的。
一般情况下,应该通过对象的方法对实例变量进行操作。
通过Person类创建了person对象,所有对象在创建的时候都会在堆内存中分配空间。
对象创建需要在main方法中进行,main方法可以在当前类中,也可以在其他类中创建。
public class Person {
private String name;
private int age;
private int sex;
private void sayHi() {
}
private void sayHello() {
}
public static void main(String[] args){
Person person = new Person();
}
}
(2)main方法在其他类中
实际开发中,我们通常不在当前类中直接创建对象并使用它,而是放在使用对象的类中,比如说上图中的 StudentTest 类。
可以把 PersonTest 类和 Person 类放在两个文件中,也可以放在一个文件(命名为 PersonTest.java)中,就像下面这样。
public class PersonTest {
public static void main(String[] args) {
Person person = new Person();
}
}
class Person;
private String name;
private int age;
private int sex;
3. 初始化对象
new对象时会给所有成员变量赋默认值,规则如下
byte,short,int,long,char-------------------0 float,double-------------------------------0.0 boolean------------------------------------false 引用类型------------------------------------null
要给成员变量初始化才能在后续使用变量。
初始化对象有三种方法
- (1)通过对象的引用变量
person 被称为对象 Person 的引用变量
public class Student {
String name;
int age;
String address;
void study(){
System.out.println(name+"在学习");
}
void sayHi(){
System.out.println("雷猴,我叫"+name+"我的年龄是"+age+",我家在"+address);
}
public static void main(String[] args) {
Student student=new Student();
student.name="goog";
student.age=13;
student.address="china";
student.study();
student.sayHi();
}
}
- (2)通过方法初始化
public class Student {
String name;
int age;
String address;
public void introduce(String name1.int age1,String address1){
name=name1;
age=age1;
address=address1;
}
public static void main(String[] args) {
Student student=new Student;
student.introduce("李丽",12,"山东");
System.out.println(student.name);
System.out.println(student.age);
System.out.println(student.address);
}
}
- (3)通过构造方法初始化
这也是最标准的一种做法,直接在 new 的时候把参数传递过去。
public class Student {
String name;
int age;
String address;
public Student(String name.int age,String address){
this.name=name;
this.age=age;
this.address=address;
}
public static void main(String[] args) {
Student student=new Student("李丽",12,"山东");
System.out.println(student.name);
System.out.println(student.age);
System.out.println(student.address);
}



