面向对象
一种强调对象的编程思想
面向对象的三大思想特征【重要】
封装,继承,多态
什么是类
类:是一组相关属性和行为的集合。可以看成是一类事物的模板,使用事物的属性特征和行为特征来描述该类事物。
现实中,描述一类事物:
属性:就是该事物的状态信息,一定要这类事物都具备的。
行为:就是该事物能够做什么。
什么是对象
对象:是一类事物的具体体现(具体存在的)。对象是类的一个实例,必然具备该类事物的属性和行为。
对象是根据类来创建的,类中有什么,对象就有什么
成员变量和局部变量的区别
成员变量和局部变量定义的位置不同。
- 成员变量:定义在类中,方法外
- 局部变量:方法中或者方法声明上(形式参数)
作用范围不同
- 成员变量:类中
- 局部变量:方法中
初始化值不同
- 成员变量:有默认值
- 局部变量:没有默认值,不赋值不能使用
在内存中的位置不同
- 成员变量:堆内存
- 局部变量:栈内存
生命周期不同
- 成员变量:随对象创建而创建,随对象消失而消失
- 局部变量:随方法的的调用而存在,随方法的结束而消失
成员变量的调用
类名.方法名/变量名(静态)
定义一个类的格式
public class 类名{
成员变量(属性);(定义格式和普通变量定义格式一样,区别是位置在类中,方法外)
成员方法(行为);(定义格式和之前方法定义格式一样,区别是不用加static)
}
新建一个对象格式
类名 对象名 =new 类名()
使用对象访问类中的成员
对象名.成员变量;
对象名.成员方法();
当没有变量指向的对象,会被Java的垃圾回收机制回收
示例
class Student{
int nianLing;
String xingMing;
String xingBie="男"; //这里的 三个成员变量均可以赋值,赋值后,对象调用的时候,默认值即为这里赋值的值
}
class StudentDemo{
public static void main(String[] agrs){
Student s = new Student();
System.out.println(s.nianLing); //输出0
System.out.println(s.xingMing); //输出null
System.out.println(s.xingBie); //输出null
s.xingBie="女"; //给s.xingBie赋值
System.out.println("----------------");
Student s1 =new Student();
System.out.println(s.xingBie); //输出"女"
System.out.println(s1.xingBie);//输出 "男"
System.out.println("----------------");
Student s2 =s;
s2.xingBie="人妖";
System.out.println(s.xingBie); //输出"人妖",因为此时s2.xingBie和s.xingBie都指向同一个地址值,s2改变,s也会改变
System.out.println(s1.xingBie);//输出 "男",s1无影响
}
}
类可以作为方法的参数类型,使用同种类定义的对象,可以作为实参传到该方法使用,传递的数据是该对象堆内的地址值。
例:
class Student{
int nianLing;
String xingMing;
String xingBie;
public shuChu(Student i){
Ststem.out.println(xingMing);
}
}
class StudentDemo{
public static void main (String[] agrs){
Student s =new Student;
s.xingMing="蔡xk"
s.shuChu(s);//输出"蔡xk"
}
private
private是一个权限修饰符,代表最小权限。
可以修饰成员变量和成员方法。
被private修饰后的成员变量和成员方法,表示私有的,只在本类中才能访问,可以通过构造方法和本类中的方法来间接调取使用。
权限说明:
private(本类中使用) < default(默认,同一包使用) < protected(本类和子类使用) <public(全局使用)
setxxx/getxxx
指通过定义set/get方法,让外部使用本类时,可以访问类中私有(private)的成员变量。
this.命令
指所在类的当前对象的引用,即前面加了this的变量名,会调用当前类中该变量。(用作解决和外部参数同名冲突的问题)
谁调用this所在的方法,当前对象就是谁
构造方法
当一个对象被创建时候,构造方法用来初始化该对象,给对象的成员变量赋初始值。
系统会默认生成一个初始的无参构造方法,用无参构造方法,成员变量的赋值就会是成员变量的值(成员变量定义时未赋值即为空)
也可以自己写一个有参数返回的构造方法(果你提供了构造方法,系统将不再提供无参数构造方法),哪些成员变量需要参数返回赋值可以自己选择(方法可以重载)。格式是:
//无参构造方法
public 类名(){
}
//有参构造方法
public 类名(成员变量类型 成员变量名,......){
this.成员变量名=成员变量名;
.........
}
构造方法没有返回值,连void都没有
(sst/get/构造方法快捷键)
在idea里面,鼠标点所要生成构造方法的类里,按alt+insert键,可以快速生成set/get和构造方法
null不能调用方法