黑马程序员Java教程学习笔记
Posted 末初mochu7
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了黑马程序员Java教程学习笔记相关的知识,希望对你有一定的参考价值。
学习视频:https://www.bilibili.com/video/BV1Cv411372m
如侵权,请私信联系本人删除
文章目录
黑马程序员Java教程学习笔记(三)
面向对象:设计对象、注意事项
OOP(Object Oriented Programming
):面向对象程序设计
类:是对象共同特征的描述
对象:是真实存在的具体实例
在Java中,必须先设计类,才能创建对象并使用
public class Car
// 属性(成员变量)
String name;
double price;
// 行为方法
public void start()
public void run()
创建对象
类名 对象名 = new 类名();
Car c = new Car();
使用对象
访问属性:对象名.成员变量
访问行为:对象名.方法名(...)
定义类的补充注意事项:
- 类名首字母建议大写,且有意义,满足”驼峰模式“
- 一个Java文件中可以定义多个class类,但只能一个类是public修饰,而且public修饰的类名必须成为代码文件名
(实际开发中建议还是一个文件定义一个class类) - 成员变量的完整定义格式是:
修饰符 数据类型 变量名称 = 初始化值;
一般无需指定初始值,存在默认值
面向对象:内存机制
Java虚拟机内存的三部分:栈内存、堆内存、方法区
多个对象使用时内存处理过程:
- 类会先加载到
方法区
,虚拟机会把方法区
中的类的main
方法加载到栈内存
中执行,在执行main
方法的过程中会把其中的对象加载到方法区
,然后对象中的属性(成员变量)会加载到栈内存
,而对象会在堆内存
开辟存储对象的信息的空间(属性,以及方法的引用地址(指向方法区
)),对象在堆内存
中的内存空间的地址赋值给栈内存
中的变量。
两个变量指向同一个对象内存图:
垃圾回收机制: 当堆内存中的对象,没有被任何变量引用(指向)时,就会被判定为内存中的”垃圾“。Java存在自动垃圾回收器,会定期进行清理
面向对象:编程训练-模拟购物车
1.需求分析、架构搭建
2.添加商品到购物车、查看购物车信息
3.修改购买数量
4.结算支付金额
package com.mochu.project2;
public class Commodity
// 商品类
int id;
String name;
double price;
int quantity;
package com.mochu.project2;
import java.util.Scanner;
public class ShoppingCart
// 定义商品类,用于创建购物车对象
public static void main(String[] args)
// 定义购物车对象,使用一个数组对象表示
Commodity[] shopcart = new Commodity[100];
while (true)
System.out.println("请您选择操作:");
System.out.println("添加商品到购物车:add");
System.out.println("查看商品到购物车:view");
System.out.println("修改商品购买数量:update");
System.out.println("结算商品的金额:pay");
Scanner sc = new Scanner(System.in);
System.out.print("请您输入命令:");
String command = sc.next();
switch (command)
case "add":
add(shopcart, sc);
break;
case "view":
view(shopcart);
break;
case "update":
update(shopcart, sc);
break;
case "pay":
pay(shopcart);
break;
default:
System.out.println("没有该功能");
public static void add(Commodity[] shopcart, Scanner sc)
// 录入商品信息
System.out.print("请输入购买商品编号:");
int id = sc.nextInt();
System.out.print("请输入购买商品的名称:");
String name = sc.next();
System.out.print("请输入购买商品的数量:");
int quantity = sc.nextInt();
System.out.print("请输入商品的价格:");
double price = sc.nextDouble();
// 把商品的信息分装成对象
Commodity cd = new Commodity();
cd.id = id;
cd.name = name;
cd.quantity = quantity;
cd.price = price;
// 把商品对象添加到购物车数组中
for (int i = 0; i < shopcart.length; i++)
if (shopcart[i] == null)
shopcart[i] = cd;
break;
System.out.println("您的商品已添加到购物车");
public static void view(Commodity[] shopcart)
// 查看购物车中的商品信息
System.out.println("=============购物车信息如下=============");
System.out.println("编号\\t\\t\\t名称\\t\\t\\t价格\\t\\t\\t数量");
for (int i = 0; i < shopcart.length; i++)
Commodity cd = shopcart[i];
if (cd != null)
// 展示商品信息
System.out.println(cd.id + "\\t\\t\\t" + cd.name + "\\t\\t\\t" + cd.price + "\\t\\t\\t" + cd.quantity);
else
break;
public static void update(Commodity[] shopcart, Scanner sc)
while (true)
System.out.print("请输入需要修改商品的ID:");
int id = sc.nextInt();
Commodity cd = getCommodityId(shopcart, id);
if (cd == null)
System.out.println("不存在该商品");
else
System.out.print("请您输入" + cd.name + "商品购买数量:");
int quantity = sc.nextInt();
cd.quantity = quantity;
System.out.println("商品购买数量修改完成");
view(shopcart);
break;
public static Commodity getCommodityId(Commodity[] shopcart, int id)
// 遍历寻找商品id与用户输入的id相同的商品
for (int i = 0; i < shopcart.length; i++)
Commodity cd = shopcart[i];
// 判断商品对象是否为空
if (cd != null)
if (cd.id == id)
return cd;
else
return null; // 不为空的商品对象中不存在与用户输入的商品id相同的商品,返回为空
return null; // 遍历完所有商品对象数组也没有找到相同的商品id,返回为空
public static void pay(Commodity[] shopcart)
view(shopcart);
double amount = 0;
for (int i = 0; i < shopcart.length; i++)
Commodity cd = shopcart[i];
if (cd != null)
amount += (cd.price * cd.quantity);
else
break;
System.out.println("购物车所有商品总金额为:" + amount + "元");
面向对象:构造器、this
构造器的作用:
- 定义在类型中,可以用于初始化一个类的对象,并返回对象的地址
构造器的格式:
修饰符 类名(形参列表)
...
public class Car
// 无参数的构造器
public Car()
...
// 有参数的构造器
public Car(String name, double price)
...
调用构造器得到对象的格式:
类 变量名称 = new 构造器;
构造器的分类和作用:
- 无参数构造器(默认存在的):初始化对象时,成员变量的数据均采用默认值
- 有参数构造器:在初始化对象的时候,同时可以接收参数为对象进行赋值
构造器注意事项:
- 任何类定义出来,默认就自带了无参数构造器,写不写都有。
- 一旦定义了有参数构造器,那么无参数构造器就没有了,如果还想用无参数构造器,就需要自己手写一个无参数构造器了。
this
关键字是什么
- 可以出现在构造器、方法中
- 代表当前对象的地址
this
关键字的作用:可以用于指定访问当前对象的成员变量,成员方法。
public Commodity(String name, double price)
this.name = name;
this.price = price;
面向对象:封装
- 面向对象的三大特征:封装、继承、多态
- 封装:告诉我们,如何正确设计对象的属性和方法
- 封装的原则:对象代表什么,就得封装对应的数据,并提供数据对应的行为
如何进行更好的封装?
- 一般建议对成员变量使用private(私有、隐藏)关键字修饰(private修饰的成员只能在当前类中访问)。
- 为每个成员变量提供配套public修饰的getter、setter方法暴露其取值和赋值
面向对象:标准JavaBean、综合案例
JavaBean
也可以称为实体类,其对象可以用于在程序中封装数据
标准JavaBean
需满足如下书写要求:
- 成员变量使用
private
修饰 - 提供成员变量对应的
setXxx()
、getXxx()
方法 - 需提供一个无参构造器;有参数构造器是可写不可写的
package com.mochu.JavaBean;
public class Test
public static void main(String[] args)
User user = new User();
user.setName("mochu7");
user.setHeight(180);
user.setSalary(2500);
System.out.println(user.getName());
System.out.println(user.getHeight());
System.out.println(user.getSalary());
System.out.println("-----------------");
User user2 = new User("Slevin", 185, 3000);
System.out.println(user2.getName());
System.out.println(user2.getHeight());
System.out.println(user2.getSalary());
package com.mochu.JavaBean;
public class User
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;
this.salary = salary;
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;
成员变量、局部变量的区别
package com.mochu.JavaBean;
public class Test
public static void main(String[] args)
Movie[] movies = new Movie[3];
movies[0] = new Movie("《长津湖》", 9.7, "吴京");
movies[1] = new Movie("《我和我的父亲》", 9.6, "吴京");
movies[2] = new Movie("《扑水少年》", 9.5, "王川");
for (int i = 0; i < movies.length; i++)
Movie m = movies[i];
System.out.println("电影名称:" + m.getName());
System.out.println("电影评分:" + m.getScore());
System.out.println("电影主演:" + m.getActor());
package com.mochu.JavaBean;
public class Movie
private String name;
private double score;
private String actor;
public Movie()
public Movie(String name, double price, String actor)
this.name = name;
this.score = price;
this.actor = actor;
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;
String概述、对象创建原理
Sting概述:
java.lang.String
类代表字符串,String类定义的变量可以用于指向字符串对象,然后操作该字符串。- Java程序中的所有字符串文字(例如“abc”)都为此类的对象。
String类的特点详解:
- String其实常被称为不可变字符串类型,它的对象在创建后不能被更改
package com.mochu.project1;
public class StringDemo
public static void main(String[] args)
// 推荐用法
String name = "末初";
System.out.println(name)以上是关于黑马程序员Java教程学习笔记的主要内容,如果未能解决你的问题,请参考以下文章