目录
学习面向对象内容的三条主线
面向过程与面向对象
面向过程(POP) 与 面向对象(OOP)
面向对象的三大特征
例子:人把大象装进冰箱
面向对象的思想概述
类和对象
面向对象的思想概述
Java类及类的成员
类的语法格式
创建Java自定义类
对象的创建和使用
类的访问机制:
对象的产生
对象的生命周期
内存解析
匿名对象
类的成员之一:属性
语法格式:
成员变量与局部变量
成员变量(属性)和局部变量的区别?
成员变量vs局部变量的内存位置
对象属性的默认初始化赋值
方 法(method)
什么是方法(method、函数):
方法的声明格式:
方法的分类:按照是否有形参及返回值
方法调用的过程分析
总结
Field = 属性 = 成员变量,Method = (成员)方法 = 函数
修饰符 class 类名 { 属性声明; 方法声明; } 说明:修饰符public:类可以被任意访问 类的正文要用{ }括起来
public class Person{
private int age ; //声明私有变量 age
public void showAge(int i) { //声明方法showAge( )
age = i;
}
}
public class Zoo{
public static void main(String args[]){
//创建对象
Animal xb=new Animal();
xb.legs=4;//访问属性
System.out.println(xb.legs);
xb.eat();//访问方法
xb.move();//访问方法
}
}public class Animal {
public int legs;
public void eat(){
System.out.println(“Eating.”);
}
public viod move(){
System.out.println(“Move.”);
}
}
如果创建了一个类的多个对象,对于类中 定义的属性,每个对 象都拥有各自的一套副本,且互不干扰
Person p1 = new Person();执行完后的内存状态。其中类定义如下:
class Person{
int age;
void shout(){
System.out.println(“oh,my god! I am ” + age);}
}
你要没有引用就会被回收
Person p1 = new Person();
p1.name = "Tom";
p1.isMale = true;
Person p2 = new Person();
sysout(p2.name);//null
Person p3 = p1;
p3.age = 10;
:new Person().shout();
public class Person{
private int age; //声明private变量 age
public String name = “Lila”; //声明public变量 name
}
在方法体外,类体内声明的变量称为成员变量。 在方法体内部声明的变量称为局部变量。
注意:二者在初始化值方面的异同:
class Person{//人类//1.属性String name;//姓名int age = 1;//年龄boolean isMale;//是否是男性public void show(String nation){//nation:局部变量String color;//color:局部变量color = "yellow";}
}
//测试类
class PersonTest{public static void main(String[] args){Person p = new Person();p.show(“USA”);}
}
public class Person{private int age;public int getAge() { //声明方法getAge()return age; }
public void setAge(int i) { //声明方法setAgeage = i; //将参数i的值赋给类的成员变量age}
}
修饰符 返回值类型 方法名(参数类型 形参1, 参数类型 形参2, ….){ 方法体程序代码 return 返回值; }其中: 修饰符:public,缺省,private, protected等 返回值类型:
方法通过方法名被调用,且只有被调用才会执行
/*
①
1.java类及类的成员,属性,方法,构造器,代码块 内部类
2.面向对象的三大特征:封装,继承 多态 抽象
3.其他关怀字 this. super. static final .abstract .interface packge import②
“大象装进冰箱”面向过程:强调的是功能行为,以函数为最小单位 考虑怎么做
1.把冰箱打开 2.把大象放进去 3.关上冰箱面向对象:强调了具体的功能对象 以类、对象为最小单位
人{
打开(冰箱){}
抱起(大象){}
关闭(冰箱){}
}冰箱{打开(){}关闭(){}
}
大象{
进入(冰箱){}
}③ 面向对象的两个要素
类:对一个事物的描述,概念上的定义
对象:是实际存在该类事物的某个个体,因而也称为实例(instance)
面向对象程序设计重点是类的设计④ 设计类就是设计类的成员
属性=成员变量=field=域,字段
方法 =成员方法 函数 methods
创建类的对象=类的实例化=实例化类⑤ 类和对象的使用
创建类 设计类的成员
创建类的对象
同过 对象.属性 对象.方法 调用对象结构⑥ 如果 创建了一个类的多个对象 则每个对象都独立的拥有一套类的属性(非static)意味着 如果我们修改一个对象的属性a,则不会影响另一个对象的属性a⑦ 类中属性的使用属性 成员变量 vs 局部变量相同点定义变量的格式 数据类型 变量名=变量值先声明,后使用变量都尤其对应的作用域不同点1.声明位置的不同成员变量:直接定义在{}内局部变量: 声明在方法内 方法形参 代码块 构造器形参 构造器内部变量2.关于权限修饰符的不同成员变量:可以在生命属性时,指名其权限,使用权限修饰符常用的权限修饰符 private. public. protected 缺省局部变量不可以使用权限修饰符3.默认初始值的情况成员变量 类的属性根据其类型,都有默初始化值整型( byte short int long)0浮点型( float double) 0.0字符型(char) 0或("\u000")布尔型 Boolean false引用数据类型 (类 数组 接口) null局部变量没有默认初始值意味着在调用局部变量之前,一定要显式赋值特别的 形参在调用时我们赋值即可4.在内存中加载的位置成员变量 加载到堆空间(非static)局部变量 加载到栈空间⑧类中方法的声明和使用
方法:描述类应该具备哪些方法
如:Scanner类 获取键盘 Math类 数学类 Arrays 数组类方法的声明 权限修饰符 返回值类型 方法名(形参列表){方法集}注意: static final abstract 来修饰方法的说明权限修饰符java规定四种权限修饰符 private public 缺省 protected返回值类型 :有返回值 vs 无返回值如果方法有返回值在,则必须在方法声明时 指定返回的类型 同时方法中需要使用return关键字返回指定类型的变量或常量如果方法没有返回值 则方法声明时 使用void表示 通常没有返回值的方法中就不需要使用return 如果使用的话 只能“return”表示结束此方法方法名 属于标识符,遵循标识符规则和规范形参列表 方法可以声明 0个 1个 多个(格式 数据类型1 形参1)⑨ return关键字的使用使用范围 使用在方法体中作用:结束方法 针对有返回值的方法 使用return 数据的格式返回数据注意不要使用执行语句⑩ 方法的使用中 可以调用当前类的属性或方法(可以递归调用)方法中不可以在定义方法*/
//测试类
public class person {public static void main(String[] args){//初始化people类的对象people p1=new people();//调用对象的结构属性方法//调用属性 对象.属性p1.name="Tom";p1.isMale=true;System.out.println(p1.name);//调用方法对象.方法p1.eat();//-------------people p2=new people();System.out.println(p2.name);//-------------//将p1变量保存的对象地址赋值给p3 导致p1和 p3指向了同一个堆空间地址people p3=p1;p3.age=18;System.out.println(p1.age);}}
class people{//属性String name;int age=1;boolean isMale;//方法public void eat(){System.out.println("人可以吃饭");}public void sleep( int hour){System.out.println("休息了"+hour +"小时");}public void talk(String languge){System.out.println("人可以吃饭"+languge);}public String getName(){return name;}public String getNation(String nation){String info="我的国籍"+nation;return info}`1
}