面向对象 day1
Java 面向对象 day1
类和对象
1.定义
- 类: 一系列对象的的共同特征的归纳总结,是一种概念的定义叫做类,是创建对象的模板,一种自定义的数据类型;
- 对象: 世界上不管看得到看不到,但是真实存在的个体,叫做对象,是类的具体体现,类的实例。 “万事万物皆对象”
2.代码演示
创建person类
/**
* 人类
* 生活中的特征和行为,在Java中形成模板
*/
class Person {
//静态特征,在java中称为属性(全局变量)
String name;
String sex;
int age;
double height;
double weight;
//动态行为 在Java中称之为方法
public void eat() {
System.out.println("吃火锅");
}
public void drink() {
System.out.println("喝酒");
}
public void read() {
System.out.println("读书");
}
public void doDaiMa() {
System.out.println("敲代码");
}
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", sex='" + sex + '\'' +
", age=" + age +
", height=" + height +
", weight=" + weight +
'}';
}
}
创建person类的对象
public class TestPerson {
public static void main(String[] args) {
//将person看为一个整体,这是可以将person作为类型使用,这个类中包含属性和方法
Person person = new Person();//创建了一个新的人的对象(实例)
//为其附上具体数据
person.name = "张三"; //.的作用在引用对象中的属性进行赋值
person.sex = "男";
person.age = 28;
person.height = 1.89;
person.weight = 120.5;
//打印对象的属性
System.out.println(person.toString());
//调用对象中的方法
person.eat();
person.drink();
person.read();
person.doDaiMa();
}
}
输出结果
Person{name='张三', sex='男', age=28, height=1.89, weight=120.5}
吃火锅
喝酒
读书
敲代码
创建对象数组
public class StudentArray {
public static void main(String[] args) {
//定义了一个以Person类为类型的数组,长度为5,这个数组能装5个人,每个元素的初始值为null
Person[] ps = new Person[5];
//Java中,只有对象才可以使用属性和方法
Person p1 = new Person();
p1.name = "张三";
p1.sex = "男";
p1.age = 19;
//将创建好的对象,放入数组中
ps[0] = p1;
//Java中,只有对象才可以使用属性和方法
Person p2 = new Person();
p2.name = "李四";
p2.sex = "女";
p2.age = 25;
ps[1] = p2;
Person p3 = new Person();
p3.name = "王五";
p3.sex = "男";
p3.age = 29;
ps[2] = p3;
//从数组中获取对象并输出
for (int i = 0; i < ps.length; i++) {
if (ps[i] != null) {
System.out.print("name:" + ps[i].name + " ");
System.out.print("sex:" + ps[i].sex + " ");
System.out.print("age:" + ps[i].age);
System.out.println();
}
}
}
}
输出结果
name:张三 sex:男 age:19
name:李四 sex:女 age:25
name:王五 sex:男 age:29
数组
1.数组的定义
public class ArrayDemo01 {
public static void main(String[] args) {
//数据类型[] 名称 = new 数据类型[长度]
//1.先声明,后赋值
int[] num1 = new int[3];
num1[0] = 3;
num1[1] = 1;
num1[2] = 2;
//2.声明数组的同时为其赋值,元素的个数就是数组的长度
int[] num2;
num2 = new int[]{45, 96, 72};
//3.直接为数组赋值
int[] num3 = {65, 959, 626};
}
}
2.给数组赋值,并遍历数组
public class ArrayDemo02 {
public static void main(String[] args) {
//Scanner类:这是一个用于扫描输入文本的新的实用程序
Scanner in = new Scanner(System.in);
//定义数组
int[] num = new int[5];
for (int i = 0; i < num.length; i++) {
System.out.println("请输入第" + (i + 1) + "个元素:");
//接收键盘输入的数据
num[i] = in.nextInt();
}
System.out.print("数组元素为:");
//遍历数组
for (int nums : num
) {
System.out.print(nums + " ");
}
}
}
3.数组的工具类
3.1 asListDemo
import java.util.Arrays;
import java.util.List;
/**
* 将一个数组转变成一个List,注意这个List时定长的,企图添加或者删除数据都会报错
*/
public class asListDemo {
public static void main(String[] args) {
Integer[] arrint = new Integer[]{156,99,75,62,47,53};
List<Integer> li = Arrays.asList(arrint);
System.out.println(li);
}
3.2 binarySearchDemo
import java.util.Arrays;
/**
* 通过二分查找法对己排序的数组进行查找
*/
public class binarySearchDemo {
public static void main(String[] args) {
String str[] = {"s2","s4","s1","s3"};
Arrays.sort(str);
System.out.println(Arrays.toString(str));
//ans:返回的值为查询的目标在数组中的下标
int ans = Arrays.binarySearch(str,"s1");
System.out.println(ans);
}
}
3.3 copyOfDemo
import java.util.Arrays;
/**
* 数组拷贝
*/
public class copyOfDemo {
public static void main(String[] args) {
String str[] = {"s2","s4","s1","s3"};
String str2[] = Arrays.copyOf(str,str.length);
System.out.println(Arrays.toString(str2));
}
}
3.4 copyOfRangeDemo
import java.util.Arrays;
/**
* 数组拷贝,指定一定的范围
*/
public class copyOfRangeDemo {
public static void main(String[] args) {
String str[] = {"s2","s4","s1","s3"};
String str2[] = Arrays.copyOfRange(str,1,3);//[1,3)
System.out.println(Arrays.toString(str2));
}
}
3.5 fillDemo
import java.util.Arrays;
/**
* 给数组赋值。填充数组之用。
*/
public class fillDemo {
public static void main(String[] args) {
String str[] = {"s2","s4","s1","s3",null};
System.out.println(Arrays.toString(str));
Arrays.fill(str,"s5");
System.out.println(Arrays.toString(str));
}
}
3.6 sortDemo
import java.util.Arrays;
/**
* 数组排序
*/
public class sortDemo {
public static void main(String[] args) {
//基础类型
int a[] = new int[]{15,86,45,35,93,96,31};
Arrays.sort(a);
System.out.println(Arrays.toString(a));
//String类型(Object)
String str[] = {"s2","s4","s1","s3"};
Arrays.sort(str);
System.out.println(Arrays.toString(str));
}
}
常见的排序法
1.冒泡排序法
代码
public class MaoPao {
/**
* 冒泡排序法
* @param args
*/
public static void main(String[] args) {
//1.准备需要排序的数组
int arr[] = {56, 86, 18, 38, 95, 75, 32, 85};
System.out.print("冒泡排序前的数据为:");
for (int arrs1 : arr
) {
System.out.print(arrs1 + " ");
}
System.out.println();
//2.准备一个中间变量,用于交换数据
int temp = 0;
for (int i = 0; i < arr.length - 1; i++) { //冒泡排序法,循环的轮数为数组长度-1
for (int j = 0; j < arr.length - i - 1; j++) { //随着轮数的增加,比较的次数在递减
//相邻的数据进行比较
//前一个数据与后一个数据进行比较,比较后交换
if (arr[j] > arr[j + 1]) { //当前一个数据大于后一个时,替换,末尾为最大数
temp = arr[j + 1];
arr[j + 1] = arr[j];
arr[j] = temp;
}
}
System.out.print("第" + (i + 1) + "次冒泡排序后的结果为:");
for (int arrs2 : arr
) {
System.out.print(arrs2 + " ");
}
System.out.println();
}
System.out.print("冒泡排序后的最终结果为:");
for (int arrs : arr
) {
System.out.print(arrs + " ");
}
}
}
执行结果
冒泡排序前的数据为:56 86 18 38 95 75 32 85
第1次冒泡排序后的结果为:56 18 38 86 75 32 85 95
第2次冒泡排序后的结果为:18 38 56 75 32 85 86 95
第3次冒泡排序后的结果为:18 38 56 32 75 85 86 95
第4次冒泡排序后的结果为:18 38 32 56 75 85 86 95
第5次冒泡排序后的结果为:18 32 38 56 75 85 86 95
第6次冒泡排序后的结果为:18 32 38 56 75 85 86 95
第7次冒泡排序后的结果为:18 32 38 56 75 85 86 95
冒泡排序后的最终结果为:18 32 38 56 75 85 86 95
2.插入排序法
public class InsertSort {
/**
* 插入排序法
* @param args
*/
public static void main(String[] args) {
int arr[] = {56, 86, 18, 38, 95, 75, 32, 85};
System.out.print("排序前的数据值为:");
for (int i : arr
) {
System.out.print(i+" ");
}
System.out.println();
for (int i = 1; i < arr.length; i++) {
//定义插入数据
int insertVal = arr[i];
//定义数据对应的下标
int index = i - 1;
//寻找最小的数据
//insertVal为后一个元素 arr[index]为前一个元素
while (index >= 0 && insertVal < arr[index]) {
arr[index + 1] = arr[index];
index--;
}
//当元素大于前一个值时,直接赋值在前一个值的后一个元素
arr[index + 1] = insertVal;
}
System.out.print("插入排序的结果为:");
for (int i : arr
) {
System.out.print(i+" ");
}
}
}
3.选择排序法
public class SelectSort {
/**
* 选择排序法:每次将循环的第一个元素获取出来,到剩余元素中进行比较,找到最大或最小值,替换到每次循环
* 的第一个元素中
*/
public static void main(String[] args) {
//1.准备需要排序的数组
int arr[] = {56, 86, 18, 38, 95, 75, 32, 85};
System.out.print("选择排序前的数据为:");
for (int i : arr) {
System.out.print(i + " ");
}
System.out.println();
int temp = 0;
for (int i = 0; i < arr.length; i++) {
//选择区域的第一个元素
int minIndex = i;
int minVal = arr[i];
//寻找选择区域中的最小值
for (int j = i + 1; j < arr.length; j++) {
if (minVal > arr[j]) {
minVal = arr[j]; //记录最小值
minIndex = j; //记录最小值下标
}
}
temp = arr[i];
arr[i] = minVal;
arr[minIndex] = temp;
}
System.out.print("选择排序后的结果为:");
for (int i : arr) {
System.out.print(i + " ");
}
}
}
作业
通过代码实现一个简易的商城,数据缓存,不包含数据库内容
MyShop.java
import java.util.Scanner;
public class MyShop {
public static void main(String[] args) {
//商品1
shop s1 = new shop();
s1.shopId = 1;
s1.shopName = "TCL彩电 ";
s1.shopPrice = 2100;
s1.shopNum = 20;
s1.shopAddress = "中国";
s1.buyNum = 0;
//商品2
shop s2 = new shop();
s2.shopId = 2;
s2.shopName = "飞利浦油烟机";
s2.shopPrice = 3600;
s2.shopNum = 5;
s2.shopAddress = "德国";
s2.buyNum = 0;
Scanner sc = new Scanner(System.in);
System.out.println("----------------登录注册----------------");
System.out.println(" 1.登录 ");
System.out.println(" 2.注册 ");
System.out.println("----------------------------------------");
System.out.print("请选择:");
int num1 = sc.nextInt();
System.out.println();
switch (num1) {
case 1:
break;
case 2:
MyShop myShop = new MyShop();
myShop.register(s1,s2);
break;
default:
}
}
public void view(shop s1,shop s2) {
System.out.println("======================大利嘉商城=========================");
System.out.println("编号 名称 单价 数量 原产地");
System.out.println(s1.toString());
System.out.println(s2.toString());
System.out.println("========================================================");
System.out.print("请选择你要购买的商品:");
}
public void register(shop s1,shop s2) {
Scanner in = new Scanner(System.in);
System.out.print("请输入用户名:");
String uName = in.next();
System.out.print("请输入密码:");
String uPwd = in.next();
System.out.print("请输入余额宝金额:");
int uMoney = in.nextInt();
System.out.println("注册成功!");
int sum = 0;
boolean flag = true;
while (flag) {
MyShop ms2 = new MyShop();
ms2.view(s1,s2);
int num2 = in.nextInt();
switch (num2) {
case 1:
sum += 2100;
s1.buyNum++;
s1.shopNum--;
System.out.println("您刚才选择了TCL彩电,请问您要购买的数量:1");
System.out.print("请问您要继续购物吗?");
String check1 = in.next();
char check2 = check1.toCharArray()[0];
switch (check2) {
case 'y':
break;
case 'n':
ms2.view2(s1,s2,sum, uMoney);
flag = false;
break;
}
break;
case 2:
sum += 3600;
s2.buyNum++;
s2.shopNum--;
System.out.println("您刚才选择了飞利浦油烟机,请问您要购买的数量:1");
System.out.print("请问您要继续购物吗?");
String check3 = in.next();
char check4 = check3.toCharArray()[0];
switch (check4) {
case 'y':
break;
case 'n':
ms2.view2(s1,s2,sum, uMoney);
flag = false;
break;
}
break;
}
}
}
public void view2(shop s1,shop s2,int sum, int umoney) {
Scanner sc2 = new Scanner(System.in);
System.out.println("您的购买清单");
//购买清单
System.out.println("======================大利嘉商城=========================");
System.out.println("编号 名称 单价 数量 原产地");
System.out.println(s1.toString2());
System.out.println(s2.toString2());
System.out.println("========================================================");
System.out.print("请选择你要购买的商品:");
System.out.println("本次购物您共消费:¥" + sum + " 请问你要现在支付吗?");
String check5 = sc2.next();
char check6 = check5.toCharArray()[0];
switch (check6) {
case 'y':
if (umoney > sum) {
System.out.println("恭喜付款成功,您还剩:¥" + (umoney - sum));
} else {
System.out.print("你的余额宝余额不足,请问你要充值吗?");
String check7 = sc2.next();
char check8 = check7.toCharArray()[0];
switch (check6) {
case 'y':
System.out.print("请输入充值金额:");
int conMoney = sc2.nextInt();
umoney += conMoney;
System.out.println("确认付款吗?");
String queren = sc2.next();
if (queren.equals("y")) {
System.out.println("恭喜付款成功,您还剩:¥" + (umoney - sum));
break;
}
case 'n':
System.out.println("付款失败!");
break;
}
}
break;
case 'n':
System.out.println("付款失败!");
break;
}
}
}
shop.java
class shop {
int shopId;
String shopName;
int shopPrice;
int shopNum;
String shopAddress;
int buyNum;
public shop() {
}
public shop(int shopId, String shopName, int shopPrice, int shopNum, String shopAddress, int buyNum) {
this.shopId = shopId;
this.shopName = shopName;
this.shopPrice = shopPrice;
this.shopNum = shopNum;
this.shopAddress = shopAddress;
this.buyNum = buyNum;
}
@Override
public String toString() {
return " "+shopId +
"\t\t" + shopName +
"\t\t" + shopPrice +
"\t\t" + shopNum +
"\t\t" + shopAddress;
}
public String toString2() {
return " "+shopId +
"\t\t" + shopName +
"\t\t" + shopPrice +
"\t\t" + buyNum +
"\t\t" + shopAddress;
}
}
运行演示
----------------登录注册----------------
1.登录
2.注册
----------------------------------------
请选择:2
请输入用户名:admin
请输入密码:123456
请输入余额宝金额:2000
注册成功!
======================大利嘉商城=========================
编号 名称 单价 数量 原产地
1 TCL彩电 2100 20 中国
2 飞利浦油烟机 3600 5 德国
========================================================
请选择你要购买的商品:2
您刚才选择了飞利浦油烟机,请问您要购买的数量:1
请问您要继续购物吗?y
======================大利嘉商城=========================
编号 名称 单价 数量 原产地
1 TCL彩电 2100 20 中国
2 飞利浦油烟机 3600 4 德国
========================================================
请选择你要购买的商品:1
您刚才选择了TCL彩电,请问您要购买的数量:1
请问您要继续购物吗?n
您的购买清单
======================大利嘉商城=========================
编号 名称 单价 数量 原产地
1 TCL彩电 2100 1 中国
2 飞利浦油烟机 3600 1 德国
========================================================
请选择你要购买的商品:本次购物您共消费:¥5700 请问你要现在支付吗?
y
你的余额宝余额不足,请问你要充值吗?y
请输入充值金额:5000
确认付款吗?
y
恭喜付款成功,您还剩:¥1300
Process finished with exit code 0
总结
以上就是今天要讲的内容,本文仅仅简单介绍了面向对象的使用,数组的方法,常用排序法的理解。通过作业对今日所学内容进行了总结和复习。