面向对象
第一节:类
类 是一个模板
对象 是 根据模板创建而成的 一个个具体的实例。
两者直接的关系: 一对多关系 。 一个类能够创建多个对象
类组成:多个对象共性的特征和行为,包含属性和方法
类中成员变量的定义:
生活中:使用特征或状态描述一个事物属性。程序中:使用变量表示,通常叫成员变量
成员变量:成员变量也被称为属性、分为静态变量和非静态变量。
//此时,定义了一个类 //模板
public class Student {
/*
* 抽取的是共性的特征 和行为
* */
//1.特征== 属性
String name; //姓名
int age;//年龄
String sex; //性别
//2.行为 =》 方法 ==函数
public void study(){
System.out.println("学生在努力学习!");
}
public void play(){
System.out.println("学生在娱乐!");
}
}
第二节:如何创建对象
类的类型 对象名 = new 类名();
此时,对象名 指向了 实例
访问 对象名.属性 取值
对象名.属性 = 值 赋值
对象名.方法()
/*** 学生类
* 属性:学号,姓名,年龄,专业
* 方法:学习 考试
* @author wgy
**/
public class Student {
//属性
//学号
String stuNo;
//姓名
String name;
//年龄
int age;
//专业
String pro;
//方法
//学习
public void study() {
System.out.println(name+"正在好好学习,学号:"+stuNo);
}
//考试
public void exam() {
System.out.println(name+"要参加"+pro+"考试");
}
}
//演示对象的创建,跨类进行调用成员方法以及访问成员变量
//测试类:含有main函数得类被称为测试类
public class TestPerson {
public static void main(String[] args) {
//1.创建对象 //语法:类名 变量名称 = new 类名();
Person xiaoMing = new Person();
//2.调用对象属性 //语法:对象.属性名
xiaoMing.name = "小明";
xiaoMing.age = 10;
xiaoMing.gender = '男';
//3.调用对象方法 //语法:对象.方法名()
xiaoMing.eat(); }
}
//实体类:表示具有某些特征或者某些行为的类
//描述多个对象所具有的共同特征和共同行为
//需求:人类,具有姓名,年龄,性别等的特征,可以吃东西,可以奔跑,,,,
class Person {
//第一部分
//成员变量:特征【名词】
//非静态成员变量
String name;//null
int age;//0
char gender;//\u0000
//第二部分
//成员方法:行为【动词】
//非静态成员方法
public void eat() {
System.out.println("eating~~~~");
}
}
第三节:对象的内存分配
程序运行时,操作系统会分配三块主要的内存空间
-
栈:直接存放基本类型数据,和引用类型的地址
-
栈空间比较小,存取速度相对较快
-
先进后出
-
-
堆:存放引用类型的实际数据部分
- 堆空间比较大,存取速度相对较慢
-
方法区:保存类的信息(包括类的名称、方法信息、字段信息);方法区中有一块空间叫串池(常量池),用来存放字符串常量;另一块空间叫静态区用来存储静态数据。
在jdk1.7之后常量池、静态区作为堆中一部分,方法区的概念弱化。
第四节:构造方法的定义
- 定义:
构造方法也叫构造器,是指当实例化一个对象(创建一个对象)的时候,第一个被调用的方法
- 语法:
访问权限修饰符 类名(参数列表) {
//方法体
}
- 普通方法:
访问权限修饰符 其他的修饰符 返回值类型 方法名(参数列表) {
}
- 注意:
a.构造方法没有返回值类型,构造方法是在实例化对象的过程中自动调用的。
b.如果不写构造方法,系统会默认为我们提供一个无参的构造方法,如果添加了构造方法,系统不再提供默认的构造方法。
- 调用
//演示构造方法的使用
public class Test {
public static void main(String[] args) {
//创建动物
Animal dog=new Animal();
//使用属性
dog.color="黄色";
dog.nickname="旺财";
dog.age=3;
//使用方法
dog.eat();
}
}
public class Animal {
//颜色
String color;
//昵称
String nickname;
//年龄
int age;
//默认构造方法
public Animal() {
}
//吃
public void eat() {
System.out.println(nickname+"大口大口吃东西");
}
}
- 构造方法和普通方法的区别
a.构造方法是在创建对象的过程中自动调用的,普通方法只能手动进行调用
b.构造方法没有返回值类型【注意区别返回值void】,普通方法的返回值类型要么是确定的类型,要么为void
c.系统会默认为我们提供一个无参的构造方法,普通方法只能手动添加
d.构造方法的方法名称必须和对应的类名保持一致
e.构造方法在创建对象的过程中就会执行,而且每个对象只执行一次,对于普通方法而言,只有在需要使用的时候才被执行,并且一个对象可以调用多次
第五节:this关键字
this代表当前对象的引用
-
this.属性
访问本类的成员变量,为了区分成员变量和形参变量名一样的情况
-
this.方法
访问本类的中其他方法
-
示例
//演示this的使用
public class Test {
public static void main(String[] args) {
Cat maomao = new Cat("毛毛",10);
maomao.show1();
}
}
public class Cat {
String name;//昵称
int age;//年龄
String color;//颜色
//3.this()
public Cat() {
System.out.println("无参的构造方法被调用");
}
//1.this.属性
public Cat(String name,int age,String color) {
this.color = color;
this.name=name;
this.age=age;
System.out.println("带参2构造方法被调用");
}
//2.this.方法
//普通方法
public void show1() {
//在本类中调用方法时,this可以省略
this.show2();
}
public void show2() {
}
}
-
this()
访问本类中的其他构造方法
注意:
(1) this(参数)只能用在构造方法中,必须是第一条语句
(2) this(参数)只能调用一次