第六章:面向对象
@对象:(什么是对象) 一切客观(不一定看的见摸的着)存在的事物都是对象,
#:对象的组成部分:1,属性 2,方法 对象的属性可以又是一个对象
计算机中的对象:一块连续的存储空间
#类是什么:1.类是大量对象共性的抽象 2,类是客观事物在人脑中的主观反映 3,类是创建对象的模板(类是主观存在,对象是客观存在的)完成了模板才能有对象
#定义类:class + 类名{}
#创建对象的两种方法:1.Student s1=new Student() 2. Student s1; s1=new Student();
#.OOP:Object oriented Programming 面向对象编程
XP:extreme Programm 极限编程
#实例变量;定义在类中,实际上属于对象的 1,不用先赋值,存在默认值,2,作用范围不用,至少在本类内有效,3,实例变量可以和局部变量命名冲突局部变量优先使用
#局部变量;特点:1,必须写在方法中 2,必须先赋值再使用,没有默认值,3,作用范围在一个代码块中
#方法: 方法的格式: 修饰符 返回值类型 方法名(参数1,参数2) 异常{方法体} (这个可以省)方法要在类的内部定义;
#.点运算符.是属于的意思,student.add(2) 方法
#,如果有多个函数与你传递的参数匹配,那么最精确的函数会被调用
#。构造方法的重载:特点:1,构造方法不能被手工调用,被自动调用 2,构造方法在对象构造时被启动调用一次,而且只会被调用一次
#创建对象:1,内存中分配空间,指定默认值,2,初始化属性,3,调用构造函数
#如果在一个类中没有定义构造函数,系统会默认提供一个公开的无参的空构造方法
#用构造方法给实例变量赋值
class student{
String name;
int age=20;
public student(){}
public student(int age){
this.age=age;
}
} student s=new student(10) 一个对象创建过程实例变量会发生三次变化,我们能改变的是第三次 ,实例变量存在默认值
@对象和引用
#引用的概念 Student s; s=new Student(); 1,对象类型的变量就叫做引用
2,引用存储的是对象内存空间的首地址
int a=10;
int b=a;
b++;
system.out.println(a) //a还是10,b为11 基本数据类型在内存中存的都是数据,没有地址
经典:student s1=new student();
student s2=s1; //相当于指针 s1指向student内存的首地址,s1把首地址赋给了s2,s2和s1同时指向了同一个对象同一块内存
s2.age=21;
system.out.println(s1.age)
#程序中传值问题
(1)int a=20;
m1(a);
system.out.println(a)//打印出a=10;等于把a的值复制给b ,a值不变
public static void m1(int b){
b++
}
(2)Student s1=new Student()
m2(s1);
system.out.println(s1.age);
pulbic void m2(Student stu){
stu.age++
}
class student{//打印出21 因为把首地址传了过去,直接操作了对象属性
int age=20;
}
还有种情况是 克隆: 拷贝一份和源对象状态一致的对象
Student student=new Student();
student.age=5;
Student Student2=(Student)student.clone(); //返回值是object对象
student2.age=10;
System.out.println(student.age);
class student implements Cloneable{
int age=2;
实现接口:
protected object clone() throws
return super.clone();
}
克隆的分类:1,深度克隆 :使用场合,如果我们想把一个对象的状态传递到方法中,而不想让方法影响到传入对象的状态,那么就可以考虑克隆 2,浅度克隆
使用方法:实现 Cloneable接口,重写clone方法;