构造器、this关键字、封装以及JavaBean
这是Java面向对象的语言特征,也是后期在项目开发中应该遵守的约定
构造器:
无参构造器
有参构造器
*ps在进行封装的时候,如果出现了有参构造器则也同时一定需要无参构造器
*
this关键字
结合代码来说,会更加具体一些。参考下面这段代码:
public class Student{
String name;
private void SetName(String name){
this.name = name;
}
}
这段代码中,创建了一个类Student,有成员变量name与成员方法SetName(String name),由于成员方法接收的形参名称与成员变量相同,都是name,所以,这里可以使用this关键字来调用本类中的成员变量。其作用可以简单的这么理解:this关键字就是调用本类中的成员变量。
但是这样简单的理解并不准确,this其实是当前类对象的引用,通过当前这个类实例化的对象的引用来访问对象的成员变量。
注意:
this关键字访问类的成员变量和成员函数时不受访问权限的控制,可以访问本类中所有的成员变量和方法,包括private的成员变量和方法。也可以通过this访问本类的static成员,不过由于static成员可以通过类名直接访问,如果通过this来访问会有“The static field ××× should be accessed in a static way”的警告信息。不能在类的static成员或static块中使用this。
封装
封装时可以采用快捷方式!
JavaBean
JavaBean代表了实物类
例如test等测试类则不属于javabean
JavaBean改造的购物车案例
Goods商品类代码
package ObjectOriented;
public class Goods {
private int id; //商品编号
private String name; //商品名称
private double price; //商品价格
private int buynumber; //商品购买数量
//无参构造器
public Goods() {
}
//有参构造器
public Goods(int id, String name, double price, int buynumber) {
this.id = id;
this.name = name;
this.price = price;
this.buynumber = buynumber;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
public int getBuynumber() {
return buynumber;
}
public void setBuynumber(int buynumber) {
this.buynumber = buynumber;
}
}
购物车测试类代码
package ObjectOriented;
import java.util.Scanner;
//JavaBean方式进行改造
public class ShopCar {
public static void main(String[] args) {
//定义商品类,用于后期创建商品对象
//定义一个购物车对象,使用一个数组表示
Goods[] shopCar = new Goods[100]; //Goods为新建的类名,也是所创建购物车数组的类型名
//搭建操作架构
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":
addGGoods(shopCar,sc);
break;
case "query":
queryGoods(shopCar);
break;
case "update":
updateGoods(shopCar,sc);
break;
case "pay":
payGoods(shopCar);
break;
default:
System.out.println("没有该功能!");
}
}
}
private static void payGoods(Goods[] shopCar) {
//显示购物车内的商品信息
queryGoods(shopCar);
//定义一个变量来承接购物车累加总金额
double money = 0;
//遍历购物车数组,并且使每个商品的数量*单价进行求和
for (int i = 0; i < shopCar.length ;i++) {
Goods g = shopCar[i];
if(g != null){
money += (g.getBuynumber() * g.getPrice());
}
else{
break;
}
}
System.out.println("购物车内订单的总金额为" + money);
}
private static void updateGoods(Goods[] shopCar,Scanner sc) {
//让用户输入要修改的商品id ,根据id查询出要修改的商品对象
//单独写出一个方法进行实现
while (true) {
System.out.println("请输入要修改的商品信息的id");
int id = sc.nextInt();
Goods g = getGoodsbyid(shopCar,id);
if(g == null){
System.out.println("抱歉没有查找到所对应编号的商品");
}
else{
//说明该商品存在
//进行更改
System.out.println("请输入"+g.getName()+"的最新购买数量");
int buyNumber = sc.nextInt();
g.setBuynumber(buyNumber);
System.out.println("修改完成");
queryGoods(shopCar);
break;
}
}
}
//单独的方法根据id查找商品信息
public static Goods getGoodsbyid(Goods[] shopCar,int id){
for (int i = 0; i < shopCar.length; i++) {
Goods g = shopCar[i]; //用变量进行承接,后期表示简单方便
if(g!=null){
//判断这个商品是不是我们要找的
if(g.getId() == id){
return g;
}
else{
return null;
}
}
}
return null; //代表找完了100个商品都没有找的id一样的商品
}
private static void queryGoods(Goods[] shopCar) {
//查询购物车信息并展示
System.out.println("=======查询信息如下==========");
System.out.println("编号\t\t名称\t\t\t价格\t\t\t购买数量");
for (int i = 0; i < shopCar.length; i++) {
Goods g = shopCar[i];
if(g != null){
//展示商品对象
System.out.println(g.getId()+"\t\t"+g.getName()+"\t\t"+g.getBuynumber()+"\t\t"+g.getPrice());
}
else{
break;
}
}
}
private static void addGGoods(Goods[] shopCar,Scanner sc) {//上方已经存在一个录入扫描器,使用参数承接则无需在方法中再次建立扫描器
//录入商品商品的信息
System.out.println("请录入购买商品的信息:");
System.out.println("请输入商品的编号:");
int id = sc.nextInt();
System.out.println("请录入购买商品的名称:");
String name = sc.next();
System.out.println("请录入所需商品的数量:");
int buynumber = sc.nextInt();
System.out.println("请录入要购买商品的价格");
double price = sc.nextDouble();
//把这个购买的商品信息封装成一个商品对象
Goods g = new Goods();
g.setId(id);
g.setName(name);
g.setBuynumber(buynumber);
g.setPrice(price);
//把商品对象添加到购物车数组中去
for (int i = 0; i < shopCar.length; i++) {
if(shopCar[i] == null){
//说明此位置没有元素存入
shopCar[i] = g;
break;//商品添加成功
}
}
System.out.println("您的商品" + g.getName() + "已经成功加入购物车");
}
}
以上介绍的几种语法则是Java的一种语法特点
也是后期工程开发的一种标准
我们应该尊重语言特点,规范语言书写!
明天见!