零、今日内容
一、作业
二、面向对象
一、作业
题目26
设计方法,在一个数组中,返回所有的 指定数据的下标
例如, 这个数组[1,2,8,4,5,7,8,7,8,9],找到其中元素8的下标[2,6,8]
public static void main(String[] args) {
int[] arr = {1,2,8,4,5,7,8,7,8,9};
int[] indexArr = findAllIndexByElement(arr,7);
System.out.println(Arrays.toString(indexArr) );
}
// 设计方法,在一个数组中,返回所有的 指定数据的下标
// 例如, 这个数组[1,2,8,4,5,7,8,7,8,9],找到其中元素8的下标[2,6,8]
public static int[] findAllIndexByElement(int[] arr,int e) {
// 创建一个数组存储下标,暂时创建最大长度数组
int[] tempArr = new int[arr.length];
int index = 0;
for (int i = 0; i < arr.length; i++) {
if(e == arr[i]){
tempArr[index] = i;
index++;
}
}
// 再创建一个找到下标个数大小的数组
int[] indexArr = new int[index];
System.arraycopy(tempArr,0,indexArr,0,index);
return indexArr;
}
二、面向对象【全是重点】
2.1 面向对象介绍
java编程核心就是面向对象开发(oop)
在此之前
- c 面向过程编程
- c++ 半面向过程半面向对象
- java 是面向对象编程
面向过程: 做一件事情,中间所有过程都需要考虑和实现
面向对象: 做一件事情,调用对象来完成
经典话术: 把大象装进冰箱
盖房子:
面向对象开发三大特点
- 封装
- 继承
- 多态
- 抽象
- 接口
2.2 面向对象开发的前提
- 类
- 解释: 类就是具有相同属性和行为的一系列对象的集合
- 简单说,类就是一个模板,是一个统称
- 举例: 人类
- 手机类
- 行为
- 解释: 即完成一些功能的动作行为
- 简单说,就是java中的方法
- 举例: 人类行为: 吃饭,睡觉,工作
- 手机类行为: 打电话,发短信,玩游戏,拍照
- 属性
- 解释: 属性即描述这一类的特征
- 简单说,就是java中变量
- 举例: 人类属性: 身高,体重,性别,肤色,人种
- 手机类属性: 品牌,价格,颜色
- 对象
- 解释: 对象就是类的具体体现
- 举例: 人类的对象: 邱哥
- 手机类的对象: 就是一会儿吃饭付钱的手机(雅川青,华为,打电话,发短信)
类,属性,行为,对象 什么关系?
- 类包含属性和行为 (人类有身高体重年龄属性,吃饭的行为)
- 类创建对象,或者说对象由类产生 (通过new 类创建出对象)
- 对象也有属性和行为,而且属性还有具体值,行为还能具体体现 (张三这个人的对象,具体身高180cm,体重50kg,年龄18岁属性值,还能具体表现出吃饭的行为)
2.3 定义类
面向对象编码在于使用对象,对象由类创建出来,类中有属性和方法
面向对象开发步骤
- 先定义类
- 在类中定义属性和方法
- 最后再由类创建出对象
- 使用对象
练习: 定义手机类 (属性: 颜色,价格,品牌, 行为: 打电话,打游戏)
/**
* public 修饰符,单词是公开的
* class 类标识符,标志这是一个类
* Phone 随意定义的类名,见名知意即可
* {} 类体,在其中定义属性和方法
*/
public class Phone {
/**
* 属性,其实就是变量
* [修饰符] 数据类型 属性名;
* 前面的修饰符可写可不写,写的话可以写public等其他三个
*/
public String color; // 颜色
double price;// 价格
String brand;// 品牌
/**
* 方法,与之前学习的方法基本一致
* 只有一处不一样,就是不需要定义static!
*/
public void call(int num){
System.out.println("给"+num+"打电话" );
}
void playGame() {
System.out.println("玩游戏" );
}
}
练习: 学生类(属性: 姓名,学号,专业;行为: 学习,吃饭)
public class Student {
String name;// 姓名
String stuNo; // 学号
String subject; // 科目
double score; // 分数
public void study(){
System.out.println("good good study" );
}
public void eat() {
System.out.println("吃饭" );
}
}
2.4 创建对象
创建对象的语法:
语法: 类名 对象名 = new 类名(); 例如: Scanner scanner = new Scanner(); int[] arr = new int[3];
练习: 创建出手机类对象
public class Demo1_oop {
public static void main(String[] args) {
// 数据类型 变量名 = 值;
// 类名 对象名 = new 类名();
// Scanner s = new Scanner();
// 创建手机类对象
Phone phone = new Phone();
/**
* Phone 是自己定义的类名
* phone 对象名,即变量名,随便定义
* = 赋值
* new 新建对象,固定格式
* Phone(), 是类名(),固定格式
*/
// 创建一个学生类的对象
Student s1 = new Student();
// 创建汽车类对象
Car car = new Car();
}
}
2.5 使用对象
使用对象,对象中有什么可以使用?
- 属性
- 使用属性语法: 对象名.属性;
- 给属性赋值: 对象名.属性 = 值;
- 取出属性值: 数据类型 变量 = 对象名.属性;
- 方法
- 使用方法语法: 对象名.方法();
public class Demo2_oop {
public static void main(String[] args) {
// 创建对象
Phone p = new Phone( );
// ----- 使用对象 -----
/**
* ----- 使用属性 -----
* 属性取值
* 数据类型 变量 = 对象名.属性;
* (创建对象后,属性都是默认值)
* 属性赋值
* 对象名.属性 = 值;
*/
// 属性取值
double price = p.price;// 取出对象p的price属性值
System.out.println(price);// 0.0
String color = p.color;
System.out.println(color);// null
String brand = p.brand;
System.out.println(brand );// null
//属性赋值
p.brand = "HUAWEI";
p.color = "雅川青";
p.price = 6999.0;
// 再取属性值查看
System.out.println(p.brand );
System.out.println(p.color );
System.out.println(p.price );
/**
* ----- 使用方法 -----
* 对象名.方法名();
* 1) 如果方法有参数,就必须传入实参
* 2) 如果方法有返回值,建议接收
*/
// 方法有参数要传实参
p.call(185909090);
// 方法有返回值要接收返回值
String result = p.playGame();
System.out.println("游戏结果: " + result );
//------- 回想之前学过的 ------------
// 创建Scanner对象
Scanner scanner = new Scanner(System.in);
// 使用scanner对象调用方法,返回结果
int n = scanner.nextInt();
}
}
练习: 创建学生对象,给学生属性赋值(姓名老六,学号666,科目java,分数99,调用方法让其执行)
package com.qf.oop;
/**
* @desc 练习
*创建学生对象,给学生属性赋值(姓名老六,学号666,科目java,分数99,调用方法让其执行)
*/
public class Demo3_oop {
public static void main(String[] args) {
// 创建学生对象
Student s = new Student();
// 属性赋值(对象.属性= 值)
s.name = "老刘";
s.stuNo = "6666";
s.subject = "PUBG";
s.score = 10.0;
// 属性取值 (对象.属性)
System.out.println(s.name );
System.out.println(s.stuNo );
System.out.println(s.subject );
System.out.println(s.score );
// 调用方法(对象.方法())
s.study();
s.eat();
}
}
练习: 创建汽车对象,给汽车属性赋值(品牌BYD,价格30w,调用方法让其执行)
public class Demo4_oop {
public static void main(String[] args) {
Car car = new Car();
car.price = 300000;
car.brand = "BYD";
System.out.println(car.price );
System.out.println(car.brand );
car.didi();
car.run();
}
}
2.6 创建对象的内存
java的数据类型
- 基本类型
- 引用类型: 数组,类,接口
/**
* 1 编写java代码
* 2 idea自动编译成class文件
* 3 运行程序,Demo5.class字节码文件就会加载到内存
* 4 main执行,进栈
* 5 main方法内需要使用Phone类,此时会加载Phone.class文件
* 6 声明Phone变量,创建Phone对象
* 6.1 会在堆中开辟空间,分配地址,对象属性初始化
* 6.2 地址值赋值了对象名(变量),也就是引用
*/
public static void main(String[] args) {
Phone p = new Phone();
System.out.println(p );// 135fbaa4是地址值
String color = p.color;
System.out.println(color );// null
p.color = "红色";
System.out.println(p.color );// 红色
p.call(119);
}
2.7 一个类创建多个对象
需求: 创建多个手机对象,每个对象属性赋不同的值
* @desc 一个类创建多个对象
*/
public class Demo6 {
public static void main(String[] args) {
// 创建第1个对象
Phone p1 = new Phone();
System.out.println(p1 );
p1.color = "红色";
p1.price = 2000;
//创建第2个对象
// 只要有new,就会开辟空间,分配地址,属性初始化
Phone p2 = new Phone();
System.out.println(p2.color );// null
System.out.println(p2.price );// 0.0
}
}
结论:
- 一个类可以创建多个对象的
- 每个对象都会有属于自己的属性和方法,每个对象间属性和方法互不影响
2.8 多个引用指向同一个对象
* @desc 多个引用指向同一个对象
*/
public class Demo7 {
public static void main(String[] args) {
Phone p1 = new Phone();
p1.color = "红色";
p1.price = 3000;
Phone p2 = p1;// 引用传递
// p1和p2两个引用指向内存的同一个对象
System.out.println(p2.price );// 3000
System.out.println(p2.color );// 红色
p2.color = "白色";
p2.price = 4000;
System.out.println(p1.color );// 白色
System.out.println(p1.price );// 4000
}
}
应用场景就是,方法的参数列表是类名