面向对象:
1先考虑事物中存在哪些对象
2再建立对象与对象的关系
对象
概念:真实存在的事物称为对象
类
概念:多个对象抽取其共同点形成的概念
生活中先有对象后有类,生产生活中先有类后有对象
类与对象的关系:一个类可以有多个对象,多个对象可以属于同一个类.
类的组成:
1 属性:
概念:描述事物静态特征
2 方法:
概念:描述事物动态特征
3 构造函数:
作用:创建对象的特殊方法
类的定义:
访问权限修饰符 class 类名(){
1属性
作用:描述事物的静态特征
别名:成员变量
定义位置:类中方法外
语法格式:访问权限修饰符 [修饰符] 数据类型 属性名;
因为堆内存中的数据都有默认值所有属性有属性值基本数据类型默认为0引用数据类型默认为null
2方法(函数,成员函数,成员方法)
作用:描述事物的动态特征
定义在类中的方法又叫成员函数,成员方法
定义位置:类中方法以外
语法格式:访问权限修饰符 [修饰符] 返回值类型 方法名(形参列表){
方法体;
}
3构造函数(构造器,构造方法)也是一种方法
作用:创建该类对象的特殊方法
定义位置:类中方法外
语法格式:访问权限修饰符 构造函数名 (形参列表){
方法体
}
注:构造函数没有返回值类型,所以没有返回值
构造函数名必须与类名一致(大小写一致)
构造函数是一种特殊的方法
没有形参列表的构造函数称为无参构造
有全部属性的构造函数是全参构造
重载:同一个类中方法名一样形参列表不同的方法称为重载,同一个类中多个构造函数之间是重载关系.
如果一个类中没有构造函数,系统(JVM)会为其提供一个无参构造函数,如果写了构造函数jvm将不会为其生成无参构造函数.
}
例:猫类,属性有姓名,毛色,性别,会叫,会抓老鼠.
/*
* 猫类
* */
public class Cat {
public String name ;
public String color ;
public char sex;
public Cat(){
}
public Cat(String name,String color,char sex){
this.name=name;
this.color=color;
this.sex=sex;
}
public void getMouse(){
System.out.println(name+"抓老鼠");
}
public void call(){
System.out.println(name+"喵喵叫");
}
}
创建对象:
声明语法:数据类型 对象名
注:引用数据类型的类名就是他的数据类型
创建语法:
对象名 = new 构造函数名(实参列表)
声明并创建对象:构造函数名 对象名 = new 构造函数名(实参列表)
构造函数使用new调用
多个对象,对象之间的属性互不影响,每个对象的属性都是自己的因为每new一个就会在堆中创立一个新的区域
对象调用属性
获取属性值:语法:对象名.属性名
修改属性值:语法:对象名.属性名 = 值;
对象调用属性方法:
语法:对象名.属性名
this关键字:
谁调用this所在的方法this就代表谁
使用1 在本类方法中调用本类其他属性或方法,此时this可以省略
使用2 当局部变量与属性名相同时,系统优先使用局部变量(Java近者优先),如果要区分就要用this,this.属性名为属性,变量名 表示局部变量
使用3 在本类构造函数中调用本类其他构造函数(不能自己调自己)
语法;this(形参列表);
使用3注意:不能形成递归
必须在构造函数的第一行
创建对象时做了哪些事?步骤是什么?
1使用new关键字在堆内存中开辟一片空间
2给对象的属性赋初值
3执行调用的构造函数中的代码
4将堆中的地址赋值给栈中引用