(day3)自学Java——面向对象

news2024/11/24 17:48:29

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

目录

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/144163.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

产品上新|语音识别+主题抽取,Magic Data多人会议数据集助您打造领先智能会议系统

2020年以来&#xff0c;新冠加快了线下向线上搬迁的速度&#xff0c;使得线上办公、在线教育、远程会议得到飞速普及和发展。艾媒咨询数据显示&#xff0c;2021年中国视频会议行业市场规模达148.2亿元。各类视频会议产品价格较低、操作便捷高效&#xff0c;普及率越来越高&…

vsftp开启登录,上传,下载,删除等操作审计日志

vsftp开启登录&#xff0c;上传&#xff0c;下载&#xff0c;删除等操作审计日志 背景 今天业务告知说有人把前天下午和昨天一天的ftp上面的附件被人删除了&#xff0c;首先我是非常的惊讶&#xff0c;居然会发生这种事&#xff0c;但是好在这个ftp不是我们负责的&#xff0c;…

驱动之设备模型

1. 起源与新方案 1.1 起源 仅devfs&#xff0c;导致开发不方便以及一些功能难以支持 热插拔不支持一些针对所有设备的同意操作&#xff08;如电源管理&#xff09;不能自动mknod用户查看不了设备信息设备信息硬编码&#xff0c;导致驱动代码通用性差&#xff0c;即没有分离设…

终章:学习路线

说明 该文章来源于徒弟lu2ker转载至此处&#xff0c;更多文章可参考&#xff1a;https://github.com/lu2ker/ 文章目录说明一些废话成果路线第一阶段要点第二阶段要点第三阶段要点第四阶段要点最后一些废话 截至这篇文章前已经有150star了&#xff0c;虽然比不上大佬们K级的量…

【链表】leetcode203.移除链表元素(C/C++/Java/Js)

leetcode203.移除链表元素1 题目2 思路 (两种方式&#xff09;2.1 在原来链表上进行删除2.2 设置一个虚拟头结点删除3 代码3.1 C &#xff08;两种方式&#xff09;3.2 C版本&#xff08;两种方式&#xff09;3.3 Java版本&#xff08;两种方式&#xff09;3.4 JavaScript版本4…

Vue的组件、组件的创建、data、methods

一、组件 组件是vue的重要的特征之一&#xff0c;可以扩展html的功能&#xff0c;也可以封装代码实现重复使用。 二、组件的创建 1. 非脚手架方式下创建 ​ 第一步&#xff1a;使用Vue.extend创建组件 ​ 第二步&#xff1a;使用Vue.component注册组件 ​ …

OpenGov(三):新波卡治理机制有哪些可期待?

OpenGov维持波卡开创的信念投票&#xff0c;与以前相同的方式进行&#xff0c;使用WebAssembly和几个链上投票机制。也就是说&#xff0c;OpenGov通过降低障碍&#xff0c;来更好地管理网络的日常决策&#xff0c;将流程推向去中心化。真正的重点是使提案的范围与通过治理流程的…

企业数字化转型到底是什么?

企业的数字化转型单单是从基础设施上变更&#xff0c;更要从企业数据从文化上入手&#xff0c;培养企业的数据文化&#xff0c;以数据驱动来促进业务发展。大家都把数据基础设施讲的很详细了&#xff0c;那么我就从企业的数据化转型当中的数据文化是什么&#xff1f;以下来为大…

Python类型注解(十)

python学习之旅(十) &#x1f44d;查看更多可以关注查看首页或点击下方专栏目录 一.为什么需要类型注解 在代码中提供数据类型的注解&#xff08;显式的说明&#xff09;&#xff0c;使用时能获得相关提示 帮助第三方IDE工具&#xff08;如PyCharm&#xff09;对代码进行类型推…

想从事网络信息安全的工作,该如何自学?

前言 【一一帮助网络安全入门和提升学习点这里一一】 由于我之前写了不少网络安全技术相关的文章&#xff0c;不少读者朋友知道我是从事网络安全相关的工作&#xff0c;于是经常有人私信问我&#xff1a; 我刚入门网络安全&#xff0c;该怎么学&#xff1f;要学哪些东西&#…

第56篇-利用jsRpc获取某博的登录参数

声明:该专栏涉及的所有案例均为学习使用,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关!如有侵权,请私信联系本人删帖! 文章目录 一、前言二、JsRpc的基本使用1.准备工作2.简单使用三、使用jsRpc获取微博登录参数1.网站分析2.构建rpc一、前言 以前使用…

记录 一次 小米路由器4C 刷openwrt 过程

前言 起因是4C的性能不太行&#xff0c;用久了网络也不稳定&#xff0c;且100M带宽跑不满&#xff0c;然后就换了路由器&#xff0c;闲置的这个准备哪来跑个Linux挂个bot来着&#xff0c;结果可好&#xff0c;刷完发现内存小的可怜呀&#xff0c;架构也不是主流的&#xff08;…

低代码助力工业软件发展,提升智能制造“软”实力

在《“十四五”智能制造发展规划》中&#xff0c;将工业软件作为加强自主供给的一个重点任务进行单独部署&#xff0c;强调了工业软件的工业属性&#xff0c;明确了工业软件对于智能制造的核心支撑作用&#xff0c;凸显了我国补足工业软件短板、以工业软件助推智能制造发展的决…

跨境资讯 | 亚马逊三站点将更新供应链标准,1月19日生效

让我们一起来看看今日都有哪些新鲜事吧&#xff01;01 亚马逊将更新供应链标准 亚马逊美国站、欧洲站和日本站发布公告称2023年1月19日将更新供应链标准&#xff0c;在亚马逊销售的产品必须符合这些新标准。作为定期审查的一部分&#xff0c;这些标准每三年更新一次。亚马逊表…

虹科案例 | 解决ASRS系统的痛点问题居然这么简单?(下)

ASRS中的定位器 在考虑传感技术时&#xff0c;重要的是每种技术都能够以最高程度的重复性和精确度保持绝对分量&#xff0c;并非所有的方法都是一样托盘梭子和立式起重机在任何时候都要求绝对位置。 托盘梭子&#xff1a; 过道位置 行位置 垂直起重机&#xff1a; 高度 线性…

Java中解决lambda表达式内部访问在其外部定义的变量-使用mapToInt

场景 Java8新特性-Stream对集合进行操作的常用API&#xff1a; Java8新特性-Stream对集合进行操作的常用API_霸道流氓气质的博客-CSDN博客_streamapi对集合修改 上面介绍Stream的相关使用示例。 如果遇到在lambda表达式内部访问在其外部定义的变量&#xff0c;比如一个求和…

MATLAB-surf/ezsurf函数绘制三维图形

&#xff08;1&#xff09;surf 函数的用法和 mesh函数类似&#xff0c;MATLAB中 surf函数专门用于绘制三维着色曲面图和 surfc是通过矩形区域来观测数学函数的函数。surf和 surfc能够产生由X、Y、Z指定的有色参数化曲面&#xff0c;即三维有色图。具体调用方法如下。1、surf(Z…

JDBC数据库连接

下载jdbc jar包&#xff0c;中央仓库下载https://mvnrepository.com/artifact/mysql/mysql-connector-java/8.0.24项目导入右键jar包&#xff0c;然后add as library数据库操作3.1连接数据库package com.heima.jdbc;import java.sql.Connection; import java.sql.DriverManager…

Appium自动化测试环境搭建

Appium自动化环境搭建 首先整体了解一下Appium自动化环境搭建都需要哪些软件或者组件 Python、Appium、AndroidSDK&#xff08;主要是adb.exe、aapt.exe&#xff09;、Node Js、java 一、安装并配置java环境 1、这个可以搜到的教程实在是太多了&#xff0c;建议直接官方下载…

汽车数据分析,2022年汽车产量总体高于2021年,年产量增长了6%左右

哈喽&#xff0c;大家好&#xff0c;春节将近&#xff0c;想必大家也开始抢票准备回家过年了&#xff0c;有车的伙伴也可能打算自驾归家了。大家辛苦工作了一年&#xff0c;手里积攒了一些积蓄&#xff0c;有些伙伴可能想赶在春节购车购房&#xff0c;这里小编为大家准备了一些…