非原创,为方便自己后期复习
目录
1.类和对象
2.封装
3.就近原则和this关键字
4.构造方法
5.标准的javabean类
6.三种情况的对象内存图
7.基本数据类型和引用数据类型
8.this的内存原理
9.面向对象综合训练
(1)文字版格斗游戏
(2)两个对象数组练习
(3)对象数组练习——判断并统计
(4)复杂对象数组练习——添加和遍历
(5)复杂对象数组练习——删除和修改
Alt+左键(选中,批量修改)
Alt+insert(生成构造方法快捷方式)/Alt+Fn+insert——>constractor/grtter and setter——>全选
插件PTG,一秒生成标准javabean(在idea中的 setting——>plugins——>搜索ptg下载安装)
PTG用法:右键点击空白处——>ptg to javabean
1.类和对象
类就是描述一类事物,而对象就是这类事物在代码中的具体体现。
相当于生成随机数的过程,就是使用类的过程。
定义类的注意事项:
1.用来描述一类事物的类,专业方法叫做Javabean类。在Javabean类中,是不写main方法的。
2.在之前,编写main方法的类,叫做测试类。我们可以在测试类中创建javabean类的对象并进行赋值调用。
2.封装
封装就是告诉我们,如何正确设计对象的属性和方法。
对象代表什么,就要封装对应数据,并为数据提供相应行为。
3.就近原则和this关键字
成员变量:变量定义在方法内。
局部变量:变量定义在类中。
当两种变量同名,使用变量时,触发就近原则。 用this.age就打印的是局部变量的值。
形参name赋值给局部变量name。
4.构造方法
类名([参数列表]){
}
构造方法作用:创建对象的时候,由虚拟机自动调用(不是手动调用),给成员变量进行初始化。
成员方法与构造方法区别:
(1)构造方法主要用来给对象的数据进行初始化。
(2)成员方法一般实现对类中成员变量的操作(修改值,获取值),提供某些功能,有返回类型,可以为void类型。
(3)构造方法通过new运算符调用,成员方法通过对象调用。
5.标准的javabean类
Alt+insert(生成构造方法快捷方式)/Alt+Fn+insert——>constractor/grtter and setter——>全选
插件PTG,一秒生成标准javabean(在idea中的 setting——>plugins——>搜索ptg下载安装)
PTG用法:右键点击空白处——>ptg to javabean
6.三种情况的对象内存图
当所有都执行完后,study方法会先出栈,然后是main方法出栈,并且main里的变量会消失,因为没有变量再指向堆内存的这个空间(对象),这个空间也会消失。
创建第二个对象的时候,不会重新加载class文件,而且在堆内存开辟的空间与第一个对象开辟的堆内存互不影响。
7.基本数据类型和引用数据类型
基本数据类型:在变量中存储的是真实的数据值,存储在自己的空间中,与其它空间无关。
引用数据类型:创建的对象、数组,都是引用数据类型。引用其他空间数据。
8.this的内存原理
this的作用:区分局部变量和成员变量。
this的本质:所在方法调用者的地址值。
9.面向对象综合训练
(1)文字版格斗游戏
//角色类Role
import java.util.Random;
public class Role {
private String name;
private int blood;
public Role(){}
public Role(String name,int blood){
this.name=name;
this.blood=blood;
}
public void setName(String name) {
this.name = name;
}
public String getName(){
return name;
}
public void setBlood(int blood) {
this.blood = blood;
}
public int getBlood(){
return blood;
}
//攻击
public void attact(Role role){
Random r=new Random();
//造成1-20的伤害
int dropBlood=r.nextInt(20)+1;
int remainBlood=role.getBlood()-dropBlood;
remainBlood=remainBlood<0?0:remainBlood;
role.setBlood(remainBlood);
System.out.println(this.getName()+"打了"+role.getName()+"一拳掉血"+dropBlood+"剩余血量"+remainBlood);
}
}
//游戏测试
public class GameTest {
public static void main(String[] args) {
Role r1=new Role("小乔",100);
Role r2=new Role("妲己",100);
while (true){
r1.attact(r2);
if(r2.getBlood()==0){
System.out.println(r1.getName()+"ko了"+r2.getName());
break;
}
r2.attact(r1);
if(r1.getBlood()==0){
System.out.println(r2.getName()+"ko了"+r1.getName());
break;
}
}
}
}
(2)两个对象数组练习
- 定义数组存储3个商品对象。
- 商品属性:商品的id,名字,价格,库存。
- 创建三个商品对象,并把商品对象存入到数组当中去
//商品类
public class Goods {
private int id;
private String name;
private double price;
private int count;
public Goods() {
}
public Goods(int id, String name, double price, int count) {
this.id = id;
this.name = name;
this.price = price;
this.count = count;
}
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 getCount() {
return count;
}
public void setCount(int count) {
this.count = count;
}
}
//---------------------------------------------------------------------------------
//main方法测试
public class GoodTest {
public static void main(String[] args) {
Goods[] arr=new Goods[3];
Goods g1=new Goods(1,"粉饼",500.0,60);
Goods g2=new Goods(2,"睫毛膏",200.0,50);
Goods g3=new Goods(3,"散粉",300.0,100);
arr[0]=g1;
arr[1]=g2;
arr[2]=g3;
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i].getId()+","+arr[i].getName()+","+arr[i].getPrice()+","+arr[i].getCount());
}
}
}
- 定义数组存储3部汽车对象。
- 汽车属性:品牌,价格,颜色。
- 创建三个汽车对象,数据通过键盘录入而来,并把数据存入到数组当中。
键盘录入
两套体系不要混用。
//汽车类
public class Cars {
private String brand;
private int price;
private String colour;
public Cars() {
}
public Cars(String brand, int price, String colour) {
this.brand = brand;
this.price = price;
this.colour = colour;
}
public String getBrand() {
return brand;
}
public void setBrand(String brand) {
this.brand = brand;
}
public int getPrice() {
return price;
}
public void setPrice(int price) {
this.price = price;
}
public String getColour() {
return colour;
}
public void setColour(String colour) {
this.colour = colour;
}
//-----------------------------------------------------------------------------
//测试类,用main方法测试
import java.util.Scanner;
public class GarsTest {
public static void main(String[] args) {
Cars[]arr=new Cars[3];
Scanner sc=new Scanner(System.in);
for (int i = 0; i <arr.length ; i++) {
Cars car=new Cars();
System.out.print("请输入第"+(i+1)+"辆汽车品牌:");
String brand=sc.next();
car.setBrand(brand);
System.out.print("请输入第"+(i+1)+"辆汽车价格:");
int price=sc.nextInt();
car.setPrice(price);
System.out.print("请输入第"+(i+1)+"辆汽车颜色:");
String colour=sc.next();
car.setColour(colour);
arr[i]=car;
}
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i].getBrand()+","+arr[i].getPrice()+","+arr[i].getColour());
}
}
}
(3)对象数组练习——判断并统计
- 定义数组存储3部手机对象。
- 手机属性:品牌,价格,颜色。
- 要求,计算出三部手机的平均价格。
//手机类
public class Phone {
private String brand;
private int price;
private String colour;
public Phone() {
}
public Phone(String brand, int price, String colour) {
this.brand = brand;
this.price = price;
this.colour = colour;
}
public String getBrand() {
return brand;
}
public void setBrand(String brand) {
this.brand = brand;
}
public int getPrice() {
return price;
}
public void setPrice(int price) {
this.price = price;
}
public String getColour() {
return colour;
}
public void setColour(String colour) {
this.colour = colour;
}
}
//----------------------------------------------------------------------------
//手机测试类,main方法测试
public class PhoneTest {
public static void main(String[] args) {
Phone[]arr=new Phone[3];
Phone p1=new Phone("小米",1999,"红色");
Phone p2=new Phone("华为",4999,"蓝色");
Phone p3=new Phone("魅族",3999,"白色");
arr[0]=p1;
arr[1]=p2;
arr[2]=p3;
// for (int i = 0; i < arr.length; i++) {
// System.out.println(arr[i].getBrand()+","+arr[i].getPrice()+","+arr[i].getColour());
// }
int sum=0;
for (int i = 0; i < arr.length; i++) {
sum=sum+arr[i].getPrice();
}
// int avg=sum/arr.length;
double avg2=sum*1.0/arr.length;
// System.out.println("三部手机平均价格为:"+avg);
System.out.println("三部手机平均价格为:"+avg2);
}
}
(4)复杂对象数组练习——添加和遍历
- 定义一个长度为3的数组,数组存储1~3名学生对象作为初始数据,学生对象的学号,姓名各不相同。
- 学生属性:学号,姓名,年龄。
- 要求1:再添加一个学生对象,并在添加的时候进行学号的唯一性判断。
- 要求2:添加完毕之后,遍历所有学生信息。
- 要求3:通过id删除学生信息(如果存在,则删除;不存在,则提示删除失败)
- 要求4:删除完毕之后,遍历所有学生信息。
- 要求5:查询数组id为2的学生,如果存在,则将他的年龄+1岁。
//学生类
public class Student {
private int id;
private String name;
private int age;
public Student() {
}
public Student(int id, String name, int age) {
this.id = id;
this.name = name;
this.age = age;
}
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 int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
//学生测试类,main测试
//要求1:再添加一个学生对象,并在添加的时候进行学号的唯一性判断。
//要求2:添加完毕之后,遍历所有学生信息。
public class StudentTest {
public static void main(String[] args) {
Student[]arr=new Student[3];
Student p1=new Student(1,"张三",20);
Student p2=new Student(2,"李四",21);
Student p3=new Student(3,"王五",22);
arr[0]=p1;
arr[1]=p2;
arr[2]=p3;
// 1.要求一:再添加一个学生对象,并在添加的时候进行学号的唯一性判断。
Student p4=new Student(4,"小六",23);
//唯一性判断:已存在,不添加;不存在,添加。
boolean flag=contains(arr,p4.getId());
//添加学生对象到数组:1.数组存满(只能创建一个新数组,新数组长度=老数组+1);2.没存满,直接添加。
if(flag){
System.out.println("此id已存在,无法添加");
}
else{
//添加学生对象到数组,需要判断数组是否存满
int count=arrSpace(arr);
if(count<arr.length){
//数组未满,count的值就是需要的索引值,直接赋值即可
arr[count]=p4;
printArr(arr);
}
else if(count>=arr.length){
//如果数组满了,就需要创建一个新数组
Student []arrNew=ceateNewArr(arr);
arrNew[count]=p4;
printArr(arrNew);
}
}
}
//---------------------------------------
//1.要干嘛?
//2.做这件事,需要什么才能做?
//3.调用处是否需要结果返回
//方法:遍历数组
public static void printArr(Student[]arr){
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i].getId()+","+arr[i].getName()+","+arr[i].getAge());
}
}
//方法:判断唯一性
public static boolean contains(Student[]arr,int id){
for (int i = 0; i < arr.length; i++) {
//依次获取数组中的每一个学生对象
Student stu=arr[i];
//对象不能为空去调用get方法
if(stu!=null){
if(stu.getId()==id){
return true;
}
}
}
return false;
}
//方法:判断数组是否存满
public static int arrSpace(Student[]arr){
int count=0;
for (int i = 0; i < arr.length; i++) {
if(arr[i]!=null){
count++;
}
}
return count;
}
//方法:创建一个新数组
public static Student[] ceateNewArr(Student[]arr){
Student []arrNew=new Student[arr.length+1];
for (int i = 0; i < arr.length; i++) {
arrNew[i]=arr[i];
}
return arrNew;
}
}
(5)复杂对象数组练习——删除和修改
// 要求3:通过id删除学生信息(如果存在,则删除;不存在,则提示删除失败)
// 要求4:删除完毕之后,遍历所有学生信息。
public class StudentTest1 {
public static void main(String[] args) {
Student[] arr = new Student[3];
Student p1 = new Student(1, "张三", 20);
Student p2 = new Student(2, "李四", 21);
Student p3 = new Student(3, "王五", 22);
arr[0] = p1;
arr[1] = p2;
arr[2] = p3;
int index=getIndex(arr,3); //改id即可
if (index>=0){
arr[index]=null;
System.out.println("已删除id为"+(index+1)+"的学生信息");
printArr(arr);
}
else if(index==-1){
System.out.println("此id不存在,删除失败");
}
}
//方法:查找id的索引
public static int getIndex(Student[]arr,int id){
for (int i = 0; i < arr.length; i++) {
Student stu=arr[i];
if(stu!=null){
int stuId=arr[i].getId();
if (stuId==id){
return i; //存在就返回此id的索引
}
}
}
return -1; //如果不存在此id,就返回-1.
}
//方法:遍历数组
public static void printArr(Student[]arr){
for (int i = 0; i < arr.length; i++) {
if(arr[i]!=null){
System.out.println(arr[i].getId()+","+arr[i].getName()+","+arr[i].getAge());
}
}
}
}
//要求5:查询数组id为2的学生,如果存在,则将他的年龄+1岁。
public class StudentTest1 {
public static void main(String[] args) {
Student[] arr = new Student[3];
Student p1 = new Student(1, "张三", 20);
Student p2 = new Student(2, "李四", 21);
Student p3 = new Student(3, "王五", 22);
arr[0] = p1;
arr[1] = p2;
arr[2] = p3;
int index=getIndex(arr,2); //改id即可
if (index>=0){
int newAge=arr[index].getAge()+1;
arr[index].setAge(newAge);
printArr(arr);
}
else if(index==-1){
System.out.println("此id不存在,修改失败");
}
}
//方法:查找id的索引
public static int getIndex(Student[]arr,int id){
for (int i = 0; i < arr.length; i++) {
Student stu=arr[i];
if(stu!=null){
int stuId=arr[i].getId();
if (stuId==id){
return i; //存在就返回此id的索引
}
}
}
return -1; //如果不存在此id,就返回-1.
}
//方法:遍历数组
public static void printArr(Student[]arr){
for (int i = 0; i < arr.length; i++) {
if(arr[i]!=null){
System.out.println(arr[i].getId()+","+arr[i].getName()+","+arr[i].getAge());
}
}
}
}