“面向对象”(英语:Object Oriented,简称OO)是一种以事物为中心的编程思想。 面向对象程序设计(英语:Object-oriented programming,缩写:OOP),是一种程序开发的方法。它将对象作为程序的基本单元,将程序和数据封装其中,以提高软件的重用性、灵活性和扩展性。
“面向过程”强调的是功能行为,面向过程”是一种以过程为中心的编程思想。“面向过程”他们不支持丰富的“面向对象”特性(比如继承、多态),分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了。面向过程在这一系列工作的执行中,强调的是工作的执行。
类是对对象所应当具有的特征的描述。 类是抽象的存在。 对象是具体的存在。
对象(object)代表现实世界中可以明确标识的一个实体。例如:一个学生、一张桌子、一间教室,一台电脑都可以看做是一个对象。每个对象都有自己独特的状态标识和行为
对象的属性(attribute,或者状态(state)),学生有姓名和学号,该学生特有的姓名和学号就是该学生(对象)的属性。 对象的行为(behavior),是由方法定义,调用对象的一个方法,其实就是给对象发消息,要求对象完成一个动作。可以定义学生对象具备学习的行为。学生对象可以调用学习的方法,执行学习的动作。
(1)使用已有的类 Java API提供了一些现成的类供我们使用,我们可以使用这些现有类来创建实例(对 象),比如: String Object 包装类Integer、Long… 集合类等等
(2)自定义类 格式
class 类名{ 成员变量(属性)定义; 成员方法(行为)定义; }约定俗称的命名规则 类名的首字母大写 变量名和方法名的首字母小写 采用驼峰命名标识
(3)属性 类的定义主要由属性和方法组成。属性是指类(这类事物)拥有的特征。属性,通常是名词。 定义属性的语法 [访问控制符] 数据类型 属性名 [=值]
public class Student { //属性(特征) ——名词 int id; //学号 String name; //姓名 String gender; //性别 int age; //年龄 }(4)方法 类的另一个成员,方法(动词)。方法,指一个类的行为(动词)。 方法的四个要素: 1、访问控制符(修饰符) 2、返回值类型——(方法调用结束之后,返回给调用者的信息) void(方法没有返回值) 3、方法名——调用的时候用来区分 4、参数列表——参数–方法运行时,需要的额外的信息.方法有返回值,在方法中就一定要有return
(5)创建实例(对象) 类创建对象的过程叫做实例化 语法 类名 对象名 = new 类名(); 单个对象内存分布图
多个对象内存分布图
(6)对象成员的调用 格式 使用new关键字创建了对象后,就要调用对象成员(属性、方法) 对象名.属性 = 值; 对象名.方法();
(7)成员变量和局部变量 成员变量 定义在类中方法外 局部变量 定义在方法中的变量和方法参数
成员变量与局部变量的区别 应用范围 成员变量在整个类内都有效 局部变量只在其声明的方法内有效 总结:变量的应用范围(作用域)就是定义这个变量的那对{} 生命周期 成员变量: 它属于对象,它随着对象的创建而创建,随着对象的消失而消失。被同一个类中的方法共享。可以不赋初值,有相应的默认值 (8)匿名对象 匿名对象: 没有名字的实体,也就是该实体没有对应的变量名引用 匿名对象的使用 1、当只使用一次时可以使用匿名对象。执行完毕到;后该对象就变成了垃圾。 new Car().run(); 2、执行方法时,可以将匿名对象作为实际参数,传递进去。 (9)形参和实参 形参:形式参数(声明方法时,方法中声明的参数) 实参:实际参数(调用方法时,实际传给方法的参数)
注意:形参的改变不会影响实参
提高数据安全性 将变化隔离 提高代码复用性
使用一个关键字private(私有的)对属性进行封装 封装后的属性将不能直接访问?那么如何访问? 每个被封装的属性,都应该提供相应的set和get方法(setter/getter)
public class Person { private int id; private String name; private int age; public void setId(int x){ id = x; } public int getId(){ return id; } public void setName(String str){ name = str; } public String getName(){ return name; } public void setAge(int x){ if(x<0){ System.out.println("你的赋值不合适,已经把年龄默认设置为18了"); age = 18; // 当非法赋值时,赋age为18 }else{ age = x; } } public int getAge(){ return age; } public void eat(){ System.out.println("吃饭...."); } }private是一个权限修饰符,代表最小权限。 可以修饰成员变量和成员方法。 被private修饰后的成员变量和成员方法,只在本类中才能访问。
隐藏了类的具体实现 操作简单 提高对象数据的安全性
构造方法是一个对象刚刚创建出来时,调用的第一个方法。 它一般从事一些初始化的工作。
名字必与类名相同。 参数可有可无,可多可少。 没有返回值,也不是void。 new 的时候被自动调用。创建对象时自动调用
构造方法作用:对对象进行初始化 案例
public class Teacher { private int id; private String name; private int age; public Teacher(){ // 构造方法 System.out.println("Teacher的对象出生了..."); id = 101; name = "张三丰"; age = 200; } public void setId(int x){ id = x; } public int getId(){ return id; } public void setName(String str){ name = str; } public String getName(){ return name; } public void setAge(int x){ age = x; } public int getAge(){ return age; } }2.在一个类中可以定义多个构造方法,以进行不同的初始化。多个构造方法存在于类中,是以重载的形式体现的。因为构造方法的名称都相同。
类似构造方法,也是用来初始化对象的成员变量的,是类里面可以定义的第四种成员。(前三种依次是成员变量、方法和构造方法)
格式
class 类名{ { 初始化块; } }初始化块初始化对象的时期优先于构造方法,所以当多个构造方法拥有同样的初始化语句时,可以把该语句统一提到初始化块中定义,以免相同的初始化语句分散到各个构造方法中引起代码重复、凌乱
this代表所在类的当前对象的引用(地址值),即对象自己的引用。 方法被哪个对象调用,方法中的this就代表那个对象。即谁在调用,this就代表谁。 this,当前对象的默认引用。(调用这个方法的对象的引用)
this.成员变量名;
public class user{ private int age; private String name ; public void setName(String name){//成员变量和方法参数重名 this.name = name;//this.name 成员变量 name 方法参数 } }在一个类中,其中一个构造方法调用其他构造方法可以使用this关键字。 格式 this() 或 this(参数) 注意:调用时,必须放在构造方法的第一句(非注释内容)
public User(int id,String name,int age){ //构造方法重载 this(); //必须放在第一行 System.out.println("User类的三个参数的构造方法"); this.id = id; this.name = name; this.age = age; }1、调用成员变量,用来解决成员变量和局部变量同名的问题。 2、调用方法,简化代码编写(IDE工具代码提示功能)。 3、在构造方法中调用其他构造方法。(注意:在构造方法中调用其他构造方法时,this语句必须方法在第一句)