一.面向对象
1.1 面向对象介绍
java编程核心就是面向对象开发(oop)
面向对象:做一件事情,调用对象来完成
面向对象的三大特性
封装
继承
多态
抽象
接口
1.2 面向对象开发前提
- 类
- 解释:类就是具有相同属性和行为的一系列对象的集合
- 方法(动词)
- 解释:即完成一些功能的动作行为
- 简单说,就是java中的方法
- 属性(名词)
- 解释:即描述这一类的特征(即学生有学生证,班级)
- 对象
- 解释:对象就是类的具体体现
类,属性,行为,对象 什么关系??
- 类包含属性和行为(人类有身高体重年龄属性,吃饭的行为)
- 类创建对象,或者说对象由类产生(通过new类创建出对象)
- 对象也有属性和行为,而且属性还有具体值,行为还能具体体现(张三这个人的对象,具体身高180cm,体重50kg,年龄18,还能具体表现出吃饭的行为)
1.3 练习
- 1.定义一个手机类
- 2.有属性:颜色,价格,品牌
- 3.有方法:打电话,玩游戏
//手机类 public class Phone { /** * 属性,其实就是变量 * [修饰符] 数据类型 属性名 --- 声明 * 前面的修饰符可写可不写:public等其他三个 */ String color;//颜色 double price;//价格 String brand;//品牌 /** * 方法,与之前写的方法基本一致 * 【修饰符】 返回值 方法名(){方法体} * 前面的修饰符可写可不写 * 只有一处不一样,就是不需要定义static */ //打电话的方法 public void call(int num){ System.out.println("给"+ num+"打电话"); } //玩游戏的方法 public String playGame(){ System.out.println("玩游戏"); return "Victory"; } }
1.4 创建对象
创建对象的语法:
类名 对象名 = new 类名();
练习:创建出手机类对象
//测试类 public class Demo1_oop { public static void main(String[] args) { //类名 对象名 = new 类名(); //创建手机类对象 Phone phone = new Phone(); /** * Phone 是自己定义的类名 * phone 对象名,即变量名,随便定义 * = 赋值 * new 新建对象,固定格式 * Phone(),是类名(),固定格式 */ } }
1.5 使用 对象
- 属性
- 使用属性语法:对象名.属性;
- 给属性赋值:对象名.属性 = 值;
- 取出属性值:数据类型 变量 = 对象名.属性;
- 方法
- 使用方法语法:对象名.方法;
练习:对手机类的属性进行取值与赋值 ,并调用其方法
public class Demo2_oop { public static void main(String[] args) { //创建手机类对象 Phone phone = new Phone(); //-----------使用属性--------------- /** * ----- 使用属性 ----- * 属性取值 * 数据类型 变量 = 对象名.属性; * (创建对象后,属性都是默认值) * 属性赋值 * 对象名.属性 = 值; */ //属性取值 -- 若该属性没有赋值,则会返回该属性的默认类型值 String brand = phone.brand;//取出对象phone的brand属性值 System.out.println(brand);//null String color = phone.color;//手机颜色 System.out.println(color);//null double price = phone.price;//手机价格 System.out.println(price);//0.0 //属性赋值 phone.brand = "小米"; phone.color = "黑色"; phone.price = 6999.0; //再次查看属性 System.out.println(phone.brand); System.out.println(phone.color); System.out.println(phone.price); /** * ----- 使用方法 ----- * 对象名.方法名(); * 1) 如果方法有参数,就必须传入实参 * 2) 如果方法有返回值,建议接收 */ //调用call方法 phone.call(110); //调用playGame方法 String result = phone.playGame(); System.out.println("游戏结果:"+result); } }
1.6 创建对象的内存
java的数据类型基本类型
- 基本类型
- 引用类型:数组,接口,类
public class Demo4 { /** * 创建对象的内存 * 1.编写java代码 * 2.idea自动编译成class文件 * 3.程序运行,Demo4.class字节码文件就会加载到内存 * 4.main方法执行,进栈 * 5.main方法内需要使用Phone类,此时会加载Phone.class文件 * 6.声明手机p变量,创建Phone对象 * 6.1 会在堆中开辟空间,分配地址,对象属性初始化 * 6.2地址值赋值了对象名(即变量p),也就是引用 */ public static void main(String[] args) { //创建对象 Phone p = new Phone(); System.out.println(p);//com.qf.oop.Phone@1b6d3586 是地址值 //取值 -- 如果未赋值,则会默认返回数据类型的默认值 String color = p.color; System.out.println(color);//null p.color = "红色"; System.out.println(p.color);//红色 p.call(119); } }
1.7 一个类创建多个对象
需求:创建多个手机对象,每个对象属性赋不同的值
//一个类创建多个对象 public class Demo5 { public static void main(String[] args) { //创建第一个对象 Phone p1 = new Phone();//在堆中开辟出一块地址赋值给p1 System.out.println(p1);//com.qf.oop.Phone@1b6d3586 是地址值 p1.color = "黑色"; p1.price = 3000.0; //创建第二个对象 //只要有new,就会在堆中开辟空间,分配地址,属性初始化(即给变量第一次赋值) Phone p2 = new Phone(); //会在堆中开辟出一块新地址赋值给p2 System.out.println(p2.color);//null System.out.println(p2.price);//0.0 } }
结论:
1.一个类可以创建多个对象
2.每创建一个对象就会在堆中开辟一块空间,都会有一个属于自己的地址值.
即每个对象都会有属于自己的属性和方法,每个对象间属性和方法互不影响.
1.8 多个引用指向同一个对象
//多个引用指向同一个对象 public class Demo6 { public static void main(String[] args) { Phone p1 = new Phone(); p1.color = "红色"; p1.price = 3000.0; Phone p2 = p1;//引用传递 //p1和p2两个引用指向内存的同一个对象 --- 即p1和p2使用同一个地址值 System.out.println(p2.color);//红色 System.out.println(p2.price);//3000.0 p2.color = "白色"; p2.price = 2000.0; System.out.println(p2.color);//白色 System.out.println(p2.price);//2000.0 } }
应用场景就是,方法的参数列表是类名