非原创,为方便自己后期复习

目录

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());}}}
}

(day3)自学Java——面向对象相关推荐

  1. JAVA面向对象的基础知识快速通过---自学笔记(一)

    网上的教学很多,看视频非常浪费时间,看文字快点,快速捡起知识点,我只根据我学到的,集各种教学学习,把精华提取出来,把主要概念通俗的展示出来,基本常识就不介绍了,其他的资料谁看了都能看懂,只是java特 ...

  2. Java自学笔记——Java面向对象——04.抽象类、接口、内部类

    Java 面向对象各节 Java自学笔记--Java面向对象--01.回顾方法 Java自学笔记--Java面向对象--02.构造器.类和对象 Java自学笔记--Java面向对象--03.封装.继承 ...

  3. 非零基础自学Java (老师:韩顺平) 第10章 面向对象编程(高级部分) 10.6 抽象类

    非零基础自学Java (老师:韩顺平) ✈[[零基础 快速学Java]韩顺平 零基础30天学会Java] 第10章 面向对象编程(高级部分) 文章目录 非零基础自学Java (老师:韩顺平) 第10章 ...

  4. Java自学基础 面向对象(下)

    Java面向对象(下) 前言 一.关键字:static 类变量(class Variable) 类方法(class method) **类属性.类方法的设计思想** 单例 (Singleton)设计模 ...

  5. 结合大学四年经验,带你揭秘高效自学Java的方法和路线(从认识、方法、反馈3个角度出发)

    首发公众号:bigsai 收藏不是真支持,点赞.关注三连才是真支持! 前言 大家好,我是bigsai 好久不见,甚是想念,文章同时收录在回车课堂.本文就自学Java的n个问题和n个方法做出一些建议,并 ...

  6. java如何对一个表达式开根号_作为一个零基础的新手,如何系统的自学Java和JavaEE开发技术?...

    0基础就找资料学习吧,建议不要看书,选择视频更好,对于新手来说,书本如果在没有人指导之下去看基本上很难看懂 在你学习Java之前一定要去了解一下这门语言,千万不要脑子热就选择来这行 如何系统的自学Ja ...

  7. java面向对象结课总结_java面向对象课程总结

    前言:从大一下学期接触java面向对象课程,到现在java面向对象课程也是告了一段落,到这一阶段我也学了java的大部分的知识,基本的我大概已经懂了,但是在学习java面向对象这个课程中也积累了很多学 ...

  8. java书籍_非科班,自学java需要把软件工程的课程全部学习完吗?

    问题一:非科班是否能自学Java.问题二:自学Java是否需要把软件工程课程全部学完?问题三:如何自学Java? 解决问题一:非科班是否能自学Java.不知道你是否有这个担心疑虑,从事Java技术开发 ...

  9. 电脑编程入门自学java_电脑编程入门自学Java指南

    随着Java近些年来的强劲发展,想要转行学习Java的初学者也越来越多了.然而,入门自学Java并不是一件轻松的事情.众所周知,万事开头难,尤其是没有编程语言基础的学习者,不仅仅需要付出更多的心血和汗 ...

最新文章

  1. 客快物流大数据项目(五十三):实时ETL模块开发准备
  2. mysql 5.7开启并行复制
  3. 计算首站到末站最小费用
  4. create-react-app 配置scss,ant-design,装饰器,代理,node支持最新语法,express es6 后端,链接mongodb...
  5. PMCAFF微课堂「已结束」| 测试兄弟CEO揭秘如何提高创初团队的产品质量
  6. [云炬创业基础笔记]第六章商业模式测试19
  7. 贝索斯的蓝色起源被21名员工投诉
  8. RPG Maker的引擎分析(一)(二)
  9. windows处理回车和Linux,linux与windows回车换行符的区别
  10. 计算机结构系统的发展趋势,计算机体系结构的现状及发展趋势.docx
  11. FFMPEG解码H264成YUV
  12. 计算机wifi共享怎么设置,笔记本电脑设置wifi热点共享教程
  13. (每日一练python)新浪微博热门话题
  14. 移动开发期末大作业-备忘录app
  15. SQL Server 按间隔时间查询记录
  16. php虚线_实现css虚线样式的两种方式:dotted和dashed(实例)
  17. lasso,lars算法详细推导过程-数学
  18. OCR财务报表识别方案应用
  19. 微信群管理工具哪个好?最安全的微信群管理工具推荐!
  20. html5 postMessage解决跨域、跨窗口消息传递 BY:色拉油啊油

热门文章

  1. flask异步操作_Flask实现异步非阻塞请求功能实例解析
  2. requests模块代理IP池搭建视频爬取
  3. Java实现二叉树的创建与四种遍历方式(前,中,后,层)
  4. Android-手机防盗
  5. 老版启用aero_在Windows Vista中启用慢动作Aero动画
  6. 扫描版页面自动切边工具 v1.1
  7. 从充电电路问题看笔记本的工作原理及维修
  8. vue 中使用element-ui的menu选中项高亮的问题
  9. 企业经营管理的核心是什么?
  10. 3Dmax如何根据固定比例放大缩小