今日内容
零、 复习昨日
一、面向对象的概念
二、面向对象编程
三、内存图
零、 复习昨日
见晨考题
每日一数组题
写一个方法 用于合并两个int类型的数组 合并法则如下
{1,2,5,8,9}{1,3,0}---->{1,2,5,8,9,1,3,0}
package com.qf.array;
import java.util.Arrays;
/**
* --- 天道酬勤 ---
*
* @author QiuShiju
* @desc
*/
public class Homework {
/**
* 写一个方法 用于合并两个int类型的数组 合并法则如下
* {1,2,5,8,9}{1,3,0}---->{1,2,5,8,9,1,3,0}
*/
public static void main(String[] args) {
concat();
}
// 合并
public static void concat() {
int[] arr1 = {1,2,5,8,9};
int[] arr2 = {1,3,0};
// 创建新数组
int[] arr3 = new int[arr1.length + arr2.length];
System.out.println(Arrays.toString(arr3 ) );
// 手动拷贝
// for (int i = 0; i < arr3.length; i++) {
//
// if(i < arr1.length) {
// // 取出arr1中的元素
// arr3[i] = arr1[i];
// } else {
// arr3[i] = arr2[i - arr1.length];
// }
// }
// 工具拷贝
System.arraycopy(arr1,0,arr3,0,arr1.length);
System.arraycopy(arr2,0,arr3,arr1.length,arr2.length);
System.out.println(Arrays.toString(arr3 ) );
}
}
一、面向对象的概念
Java是一门面向对象的编程语言.
补充: c语言面向过程 c++ 半面向对象半面向过程
面向过程编程
开发过程中的所有细节都要编写.
假设: 使用一台电脑敲代码. 其中所有零件都需要自己去造.
面向对象编程
假设: 使用一台电脑敲代码. 找到卖电脑的人,告诉我需要一台电脑,商家就给我一台电脑,可以直接使用. (学会当老板,使唤人)
把大象装进冰箱怎么实现?
什么是类?
类: 人以类聚,一类商品
类: 类一组具有相同属性和行为的对象的集合.
神仙类;;;;;手机类
什么是对象?
对象: 将类实例化的一个具体体现.
对象能将属性和行为具体表现出来.
太上老君;;;;;手里正在拿的那个手机
什么是属性?
属性: 类的一些特点/特征
年龄非常大,不会死 ;;;; 品牌,重量,价钱,颜色等
什么是行为?
行为:就是方法,对象能做的动作
炼丹;;;; 发短信,打电话,玩游戏,聊天
总结
以上四个是什么关系?
- 类中有属性和方法
- 对象由类创建出来,对象内部有它自己具体的属性和方法
- 对象可以将属性和行为表现出来
二、面向对象编程
利用上面这些知识,完成面向对象编程(OOP)
2.1 类的定义
以手机为例,完成编程
package com.qf.oop;
/**
* --- 天道酬勤 ---
*
* @author QiuShiju
* @desc 手机类
*/
public class Phone {
// 属性定义:
// [访问修饰符] 数据类型 变量名;
// 访问修饰符,可写可不写
String brand; // 品牌
double price; // 价钱
String color; // 颜色
int memory; // 内存
/*
* String brand; 属性后要不要设置值?
* 不加值String brand; 这个手机类的这个属性不固定
* 加值 String brand = "华为"; 这个手机类型品牌属性固定,
* 意味着后面通过手机类创建出的手机对象的品牌属性直接就是"华为"
* ----------------------------------
* 其实属性设置不设置值,就是一个变量默认值的问题
*/
// 方法(今天往后类中的方法不要加static)
// (自己写练习题时加static)
public void call() {
System.out.println("打电话" );
}
public void play() {
System.out.println("打游戏");
}
}
练习: 车类
package com.qf.oop;
/**
* --- 天道酬勤 ---
*
* @author QiuShiju
* @desc 类中包含属性和方法
* 类的成员有属性和方法
*
* 类就将相当于模板
* 对象就是根据模板创建出的实例
*/
public class Car {
// 成员属性
String brand;
double price;
String color;
String num;
// 成员方法
public void run(){
System.out.println("跑" );
}
public void takePeople() {
System.out.println("载人" );
}
public void didi() {
System.out.println("滴滴" );
}
}
2.2 创建对象
创建对象又叫实例化
public static void main(String[] args) {
// 创建对象的语法
// 类名 对象名 = new 类名();
Phone phone = new Phone();
// 数据类型 变量名 = 值;
// int[] arr = new int[3];
}
2.3 使用对象
使用对象就是创建对象,使用对象内部的属性和方法
package com.qf.oop;
/**
* --- 天道酬勤 ---
*
* @author QiuShiju
* @desc
*/
public class TestOOP {
/**
* 主方法中测试
*/
public static void main(String[] args) {
// 创建对象的语法
// 类名 对象名 = new 类名();
Phone phone = new Phone();
// 数据类型 变量名 = 值;
// int[] arr = new int[3];
// 使用对象,即使用属性和使用方法
/*
* 使用属性:
* 1 获得属性值
* 数据类型 变量名 = 对象名.属性;
* (刚创建的对象内的属性都是该数据类型的默认值)
* 2 设置属性值
* 对象名.属性 = 值;
*/
// 属性取值
double price = phone.price;
System.out.println("手机的价格"+price );
String brand = phone.brand;
System.out.println("手机的品牌:"+brand );
String color = phone.color;
System.out.println("手机的颜色:"+color );
int num = phone.memory;
System.out.println("手机内存"+num+"G" );
// 属性赋值
phone.brand = "HUAWEI";
phone.price = 2999.0;
phone.color = "黑曜石";
phone.memory = 128;
// 再次取值看效果
double price2 = phone.price;
System.out.println("手机的价格"+price2 );
String brand2 = phone.brand;
System.out.println("手机的品牌:"+brand2 );
String color2 = phone.color;
System.out.println("手机的颜色:"+color2 );
int num2 = phone.memory;
System.out.println("手机内存"+num2+"G" );
// =================================================
// 使用方法,就是对象调用方法,让方法执行
// 对象名.方法名();
phone.call();
phone.play();
}
}
练习: 创建车的对象,调用属性,调用方法
public static void main(String[] args) {
// 对象创建
Car car = new Car( );
// 取出属性
System.out.println(car.price );
System.out.println(car.color );
System.out.println(car.brand );
System.out.println(car.num );
// 属性赋值
car.price = 190000;
car.brand = "BYD";
car.color = "玫瑰红";
car.num = "豫A66666";
System.out.println(car.price );
System.out.println(car.color );
System.out.println(car.brand );
System.out.println(car.num );
// 调用方法
car.run();
car.takePeople();
car.didi();
}
三、内存图
以创建对象过程画图.
凡是new,都会在内存
开辟空间,创建对象,会有地址值
在这同时,对象内部的属性和方法会初始化,赋默认值
完成对象创建,将地址值赋值给对象名
后续通过对象.属性找到堆中的对象的属性给其赋值
后续通过对象方法找到堆中对象的方法让其进栈执行
一个对象的内存图
一个类创建多个对象
/**
* 一个类可以创建出多个对象
* 每个对象内部都有属于自己的属性和方法,对象之间互不影响
*/
public static void main(String[] args) {
// 创建1个对象
Car car = new Car();
car.brand = "玛莎";
System.out.println(car.brand );
// 再创建1个
Car car2 = new Car();
car2.brand = "劳斯莱斯";
System.out.println(car2.brand );
// 再创建
Car car3 = new Car();
car3.brand = "宾利";
System.out.println(car3.brand );
}
多个引用(对象名)指向同一个对象
public static void main(String[] args) {
// 对象1
Car car1 = new Car( );
// 对象2
Car car2 = new Car();
car2.num = "豫A66666";
// car2被car1赋值,其实是被背后的地址赋值
// 赋值后,car2和car1执行同一个内存对象
car2 = car1;
car1.num = "豫A88888";
System.out.println(car1 );
System.out.println(car1.num );
System.out.println("--------" );
System.out.println(car2 );
System.out.println(car2.num );
}
作业
写12生肖类
完成作业pdfT10,T11
复习(看每天笔记大纲,每天昨天题抽1-2题再重复)
预习(下一周全是面向对象(构造方法,局部变量成员变量,this super static, 封装,继承,多态,抽象,接口))