前言
记录时间:2023.3.5
已坚持的第七天
java从入门到精通
学习java时间历程记录打卡
早上6:00到 12:00
下午1:00到6:00
java面向对象编程总结
完成代码练习
定义类来创建对象使用
1.类
package cn.vqqc.createobject;
public class Car {
/*
成员变量
*/
String name;
double price;
/*
方法
*/
public void start(){
System.out.println(name + "启动了");
}
public void run() {
System.out.println("价格是:" + price + "的" + name + "跑的很快");
}
}
2.定义类
package cn.vqqc.createobject;
public class Student {
public String name;
boolean flag;
}
class Animal{
}
class Dog{
}
3.运用定义类案例
package cn.vqqc.createobject;
public class Test1 {
public static void main(String[] args) {
//创建汽车对象
Car c = new Car();
c.name = "宝马";
c.price = 38.9;
System.out.println(c.name);
System.out.println(c.price);
c.start();
c.run();
System.out.println("-------------------");
Car c2 = new Car();
c2.name = "奔驰";
c2.price = 39.9;
System.out.println(c2.name);
System.out.println(c2.price);
//引用对象地址
System.out.println(c);
System.out.println(c2);
}
}
4.运用定义类案例2
package cn.vqqc.createobject;
public class Test2 {
public static void main(String[] args) {
Student s = new Student();
System.out.println(s.name);
System.out.println(s.flag);
}
}
2.构造器
1.构造器的类
package cn.vqqc.constructor;
public class Car {
String name;
double price;
/*
无参数构造器
*/
public Car(){
System.out.println("--无参数构造器被调用了--");
}
/*
有参数构造器
*/
public Car(String n, double p){
System.out.println("--有参数构造器被调用了--");
name = n;
price = p;
}
}
2.构造器案例
package cn.vqqc.constructor;
public class Test {
public static void main(String[] args) {
// //通过构造器得到对象
Car c = new Car();
c.name = "宝马";
c.price = 38.9;
System.out.println(c.name);
System.out.println(c.price);
//调用有参数构造器
Car c2 = new Car("奔驰", 39.8);
System.out.println(c2.name);
System.out.println(c2.price);
}
}
3.this关键字
1.关键字的定义类
package cn.vqqc.thisdemo;
public class Car {
String name;
double price;
/*
无参数构造器
*/
public Car(){
System.out.println("无参数构造器中的this" + this);
}
public Car(String name, double price){
this.name = name;
this.price = price;
}
public void goWith(String name){
System.out.println(this.name + "正在和" + name + "比赛");
}
public void run(){
System.out.println("这是方法中this" + this);
}
}
2.this关键字案例
package cn.vqqc.thisdemo;
import cn.vqqc.thisdemo.Car;
public class Test {
public static void main(String[] args) {
//创建汽车对象
Car c = new Car();
c.run();
System.out.println(c);
System.out.println("----------------");
Car c2 = new Car("奔驰", 39.9);
System.out.println(c2.name);
System.out.println(c2.price);
c2.goWith("宝马");
}
}
2.封装
1.定义类
package cn.vqqc.encapsulation;
public class Student {
//1.成员变量 使用private
private int age;
/*
2.提供成套的getter和setter方法暴露其取值和赋值
*/
public void setAge(int age){
if(age >= 0 && age <= 200){
this.age = age;
}else {
System.out.println("您的年龄数据有问题!");
}
}
public int getAge(){
return age;
}
}
2.封装案例
package cn.vqqc.encapsulation;
public class Text1 {
public static void main(String[] args) {
Student s = new Student();
s.setAge(23);
System.out.println(s.getAge());
}
}
3.javaBean
1.定义类
package cn.vqqc.javabean;
public class User {
//1.成员变量建议使用private私有
private String name;
private double height;
private double salary;
public User() {
}
// public User(String name, double height, double salary) {
// this.name = name;
// this.height = height;
// Salary = salary;
// }
public User(String name, double height, double salary) {
this.name = name;
this.height = height;
this.salary = salary;
}
/*
要求提供无参数构造器
*/
/*
2.必须为成员变量提供成套的setter和gettter方法
*/
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getHeight() {
return height;
}
public void setHeight(double height) {
this.height = height;
}
public double getSalary() {
return salary;
}
public void setSalary(double salary) {
this.salary = salary;
}
}
2.javabean的案例
package cn.vqqc.javabean;
public class Test {
public static void main(String[] args) {
//目标。记住javabean的书写要求
//1.无参数构造器创建对象封装一个用户信息
User u1 = new User();
u1.setName("try栈");
u1.setHeight(180.5);
u1.setSalary(1000.0);
System.out.println(u1.getName());
System.out.println(u1.getHeight());
System.out.println(u1.getSalary());
//2.有参数构造器创建对象封装一个用户信息
User u2 = new User("小明",3000,30000);
System.out.println(u2.getName());
System.out.println(u2.getHeight());
System.out.println(u2.getSalary());
}
}
4.内存机制
1.定义类
package cn.vqqc.memory;
public class Student {
String name;
char sex;
String hobby;
public void study(){
System.out.println("名称:" + name + ",性别:" + sex + ",爱好:" + hobby + "开始学习了 ");
}
}
2.内存机制案例
package cn.vqqc.memory;
import cn.vqqc.memory.Student;
public class Test {
public static void main(String[] args) {
//创建学生对象
Student s1 = new Student();
s1.name = "小明";
s1.sex = '男';
s1.hobby = "睡觉,游戏,学习";
s1.study();
//把s1的变量赋值给一个学生类型的变量s2
Student s2 = s1;
System.out.println(s2);
System.out.println(s1);
s2.hobby = "爱提问";
System.out.println(s2.name);
System.out.println(s2.sex);
System.out.println(s2.hobby);
s2.study();
}
}
5.面向对象实战案例
1.购物车案例
1.定义类
package cn.vqqc.demo;
public class Goods {
int id; // 编号
String name; // 名称
double price; // 价格
int buyNumber; // 购买数量
}
2.购物车案例
package cn.vqqc.demo;
import java.util.Scanner;
public class ShopCarTest {
public static void main(String[] args) {
//1.定义商品类,用于后期创建商品对象
//2.定义购物车在对象,使用一个数组对象中表示
Goods[] shopCar = new Goods[100]; // [null, null.....]
//3.搭建操作架构
while (true) {
System.out.println("请您选择如下命令进行操作:");
System.out.println("添加商品到购物车:add");
System.out.println("查询购物车商品展示:query");
System.out.println("修改商品购买数量:update");
System.out.println("结算购买商品金额:pay");
Scanner sc = new Scanner(System.in);
System.out.println("请您输入命令:");
String command = sc.next();
switch (command){
case "add":
//添加商品到购物车
addGoods(shopCar, sc);
break;
case "query":
queryGoods(shopCar);
//查询购物车商品展示
break;
case "update":
updateGoods(shopCar , sc);
//修改商品购买数量
break;
case "pay":
pay(shopCar);
//结算购买商品金额
break;
default:
System.out.println("没有该功能!");
}
}
}
public static void pay(Goods[] shopCar) {
//定义一个求和变量累加金额
double money = 0;
//2.遍历购物车数组中的全部商品对象,;累加单价+数量
for (int i = 0; i < shopCar.length; i++) {
Goods g = shopCar[i];
if(g != null) {
money += (g.price * g.buyNumber);
}else {
break;
}
}
System.out.println("订单的总金额:" + money);
}
public static void updateGoods(Goods[] shopCar , Scanner sc) {
//让用户输入要修改的商品id ,根据id 查询出要修改的商品对象
while (true) {
System.out.println("请您输入你需要修改的商品id:");
int id = sc.nextInt();
Goods g = getGoodById(shopCar, id);
if(g == null){
//没有该商品
System.out.println("对不起没有购买商品!");
}else {
//说明存在该商品对象,可以修改它了
System.out.println("请您输入:" + g.name + "商品最新购买数量:");
int buyNumber = sc.nextInt();
g.buyNumber = buyNumber;
System.out.println("修改完成!");
queryGoods(shopCar);
break;
}
}
}
public static Goods getGoodById(Goods[] shopCar ,int id){
//shopCar = [g1, g2, null, null, ....]
for (int i = 0; i < shopCar.length; i++) {
Goods g = shopCar[i];
if(g != null){
//判断这个商品对象id是否是我们要找的
if(g.id == id) {
return g;
}
}else {
return null;
}
}
return null; //找完100个商品都没有找到id一样的商品
}
/*
查询购物车中的商品对象信息,并展示出来
*/
public static void queryGoods(Goods[] shopCar) {
System.out.println("==============查询购物车信息如下================");
System.out.println("编号\t\t名称\t\t\t价格\t\t\t购买数量");
//shopCar = [g1, g2, null, null, ....]
for (int i = 0; i < shopCar.length; i++) {
Goods g = shopCar[i];
if(g != null){
//展示这个商品对象
System.out.println(g.id + "\t\t" + g.name + "\t\t\t" + g.price + "\t\t\t" + g.buyNumber);
}else {
//遍历结束
break;
}
}
}
/*
完成商品添加到购物车的功能
*/
public static void addGoods(Goods[] shopCar , Scanner sc) {
//1.录入用户输入的购买商品信息
System.out.println("请您输入购买商品的编号(不重复):");
int id = sc.nextInt();
System.out.println("请您输入购买商品的名称:");
String name = sc.next();
System.out.println("请您输入购买商品的数量:");
int buyNumer = sc.nextInt();
System.out.println("请您输入购买商品的价格:");
double price = sc.nextDouble();
//2.把这个购买商品的信息封装开商品对象
Goods g = new Goods();
g.id = id;
g.name = name;
g.buyNumber = buyNumer;
g.price = price;
//3.把这个商品对象添加到购物车数组中去
// shopCar = [ a, a2, null ....]
for (int i = 0; i < shopCar.length; i++) {
if(shopCar[i] == null){
//说明此位置没有元素存入,把我们新买的商品添加到此处即可
shopCar[i] = g ;
break; // 结束,因为商品已经成功存入了,不需要继续找位置
}
}
System.out.println("您的商品:" + g.name + "添加到购物车完成!");
}
}
1.电影展示案例
1.定义类
package cn.vqqc.demo;
public class Movie {
//1.成员变量
private String name;
private double score;
private String actor;
public Movie() {
}
//有参数的构造器
public Movie(String name, double score, String actor) {
this.name = name;
this.score = score;
this.actor = actor;
}
//2.getter + setter
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getScore() {
return score;
}
public void setScore(double score) {
this.score = score;
}
public String getActor() {
return actor;
}
public void setActor(String actor) {
this.actor = actor;
}
}
2.电影展示案例
package cn.vqqc.demo;
public class Test {
public static void main(String[] args) {
//完成电影信息的展示
//1.设计电影类
//2.创建三个电影对象来封装电影的信息
//3类型的数组,存储3部电影对象.定义一个电影
Movie[] movies = new Movie[3];
movies[0] = new Movie("《长津湖》" , 9.7 , "吴京");
movies[1] = new Movie("《我和我的父辈》" , 9.7 , "吴京");
movies[2] = new Movie("《扑水少年》" , 9.7 , "王川");
//4.遍历数组中的的每个电影对象,然后获取它的信息展示出来
for (int i = 0; i < movies.length; i++) {
Movie m = movies[i];
System.out.println(m);
System.out.println("电影名:" + m.getName());
System.out.println("得分:" + m.getScore());
System.out.println("主演:" + m.getActor());
}
}
}
视频总结
1.面向对象:概述
https://www.bilibili.com/video/BV1Cv411372m/?p=70
2.面向对象:设计对象、注意事项
https://www.bilibili.com/video/BV1Cv411372m/?p=71
3.面向对象:内存机制
https://www.bilibili.com/video/BV1Cv411372m/?p=72
4.面向对象实战:购物车案例[拓展]
https://www.bilibili.com/video/BV1Cv411372m/?p=73
5.面向对象:构造器、this
https://www.bilibili.com/video/BV1Cv411372m/?p=74
6.面向对象:封装
https://www.bilibili.com/video/BV1Cv411372m/?p=75
7.面向对象:Javabean、综合案例
https://www.bilibili.com/video/BV1Cv411372m/?p=76
8总结:面向对象基础部分
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END
暂无评论内容