Java面向对象基础


· 学习参考资料:

B站黑马程序员0基础java入门学习


· 学习内容

Java面向对象基础:以人体BMI为案例了解学习Java对象


· 知识呈现&细化总结:

#Java面向对象基础

一、提出问题#
Q: 面对对象编程有什么好处?
 A:凡是找对象的编程套路,更加符合人类思维习惯,编程也会更直观


Q:对象是什么? 如何得到?
 A:对象就是一种特殊的数据结构
 A:对象是用类new出来的,有了类就可以创建对象,代码如下:

public class 类名 {
   1.变量//用来说明对象可以处理什么数据
   2.方法//描述对象有什么功能
}
以创建个人信息personInfo类示例:
// [ 为什么要私有成员变量下文会提 ]

public class personInfo {
 //1.必须私有成员变量
   private String name;//姓名
   private int age;//年龄
   private double height;//身高
   private double weight;//体重
   private double Bmi;//BMI指数
   }

二、原理&关键部分#

1.多个对象在计算机中的执行原理:
 如图所示(此图来源于文初学习参考资料中)
原理图
该原理与数组类似,以指针指向存储地址进行读取操作。


2. 类与对象的一些注意事项:
 1) 类名建议使用英文单词,首字母大写,满足驼峰模式,具有意义
 2)类中定义的变量称为成员变量(对象的属性),类中定义的方法也称为成员方法。(对象的行为
 3)成员变量本身存在默认值,在定义成员变量时一般不需要赋初始值。(无意义)
 4)一个代码文件中,可以写多个class类但只有一个能用public修饰,且public修饰的类名必须为代码文件名
 5)对象和对象之间的数据不会相互影响,但多个变量指向同一个变量时就会影响。
 6)如果某个对象没有一个变量引用它,则该对象无法被操作了,该对象会成为所谓的垃圾对象。(Java存在自动垃圾回收机制,无须担心!


3. this关键字
 Q:"this"有什么应用场景呢?
 A:主要用来解决变量名称冲突问题
实际上,简单理解this可以从字面出发,this起指代作用,可以用在方法中来获取当前对象,哪个对象调用方法,this就指向哪个对象,也就是拿到哪个对象。//具体运用会在下文提及


4.构造器
我长什么样? 示例:

public class personInfo {
   //无参数构造器
   public personInfo(){

   }

   //有参数构造器
   public personInfo(String name, int age, double height, double weight){
       this.name = name;
       this.age = age;
       this.height = height;
       this.weight = weight;

   }
}

创建对象时,对象会去调用构造器,如:

//无参数构造器调用
personInfo p1 = new personInfo();
//有参数构造器调用
personInfo p2 = new personInfo("小王",8,1.60,60)

 而它的结构其实我们非常熟悉,还记得这个吗?

Scanner s = new Scanner(System.in);

 是不是还挺像的?
 构造器应用在创建对象时,同时完成对对象成员变量(属性)初始化赋值
 需要注意的是,如果不写构造器,java会自动为类生成一个无参数构造器,而一旦定义了有参数构造器,java就不会帮我们的类自动生成,需要我们自己手写一个出来


5.封装
 Q:什么是封装?
 A:封装就是指用类设计对象处理某一个事物的数据时,应该把要处理的数据,以及处理这些数据的方法,设计到一个对象中去。应当遵循 合理隐藏(private),合理暴露(public) 的原则。
 本文第一部分中在各成员变量前附上private关键字,即是对这些属性进行封装,使之不能直接被外界修改访问
 而这就不得不提到一种特殊的类——实体JavaBean(实体类)
 这种类有两个特点

1.这个类中的成员变量都要私有,并且要对外提供相应的get/set方法
2. 类中必须要有一个公共无参数构造器

  举个例子,对于类personInfo中的name属性,我们需要提供相应的get/set方法如下:

   public String getName() {
       return name;
   }

   public void setName(String name) {
       this.name = name;
   }

 tips: 在IDEA中可以通过右键generate自动生成成员变量的get/set方法
 而如果现在我们想要得到 or 修改 p1中的name值

  //错误做法
  System.out.println(p1.name);
  p1.name = "小红";
  //正确做法
  System.out.println(p1.getName());
  p1.setName("小红")

三、代码呈现#
 为了更加清晰的构造,我们将整个程序分成三个 class 并集合在同一个 package 下,如图:


结构图
 其中, ① personInfo 用于存储个人信息

package Person_Bmi_Operate;

public class personInfo {
  //1.必须私有成员变量
   private String name;//姓名
   private int age;//年龄
   private double height;//身高
   private double weight;//体重
   private double Bmi;//BMI指数

   //2.必须为类提供一个公开无参数构造器
   public personInfo(){

   }

   //可附上公开有参数构造器
   public personInfo(String name, int age, double height, double weight){
       this.name = name;
       this.age = age;
       this.height = height;
       this.weight = weight;

   }

   //为每个成员构造get/set方法
   public String getName() {
       return name;
   }

   public void setName(String name) {
       this.name = name;
   }
   //为了节约空间 其他成员变量的get/set方法构造省略噜 <3

 ② personOperator 则用于构造一系列对于对象所要实施的方法
 如下图的 calcBmi()judgeBmi() 方法

package Person_Bmi_Operate;

public class personOperator {
   //1.初始化&私有成员变量
   private personInfo person;
   //2.为personOperator类提供一个构造器
   public personOperator(personInfo person){
       this.person = person;
   }

   //3.计算对象person的Bmi值,并写入对象person的属性中
   public void calcBmi(){
       double height = person.getHeight();
       double weight = person.getWeight();

       System.out.println(person.getName() + "的BMI指数为:");
       person.setBmi(weight / Math.pow(height,2));
       System.out.println(person.getBmi());

   }

   //4.比较对象person的Bmi值,并根据标准输出反馈
   public void judgeBmi(){
       if (0 < person.getBmi() && person.getBmi()< 18.5){
           System.out.println(person.getName() + "的BMI偏低,体重过低!");
       }
       else if (18.5 <= person.getBmi() && person.getBmi()<= 24){
           System.out.println(person.getName() + "的BMI正常,体重处于平均水平!");
       }
       else if (person.getBmi() > 24){
           System.out.println(person.getName() + "的BMI偏高,体重过高!");
       }
       else{
           System.out.println(person.getName() + "的BMI值异常 请检查输入是否有误!");
       }

   }
}

 最后,③ personTest 用于输出和执行一系列操作


public class personTest {
    public static void main(String[] args) {
        personInfo p1 = new personInfo("小王",18,1.89,60);
        personOperator po1 = new personOperator(p1);

        System.out.println("------------------------------------");

        //输出p1对象的属性
        System.out.println("以下是" + p1.getName() + "的个人信息" );
        System.out.println("姓名: " + p1.getName());
        System.out.println("年龄: " + p1.getAge());
        System.out.println("身高: " + p1.getHeight());
        System.out.println("体重: " + p1.getWeight());

        System.out.println("------------------------------------");

        //更改p1对象的属性
        p1.setName("小美");
        p1.setAge(15);
        p1.setHeight(1.65);
        p1.setWeight(50);

        System.out.println("以下是" + p1.getName() + "的个人信息" );
        System.out.println("姓名: " + p1.getName());
        System.out.println("年龄: " + p1.getAge());
        System.out.println("身高: " + p1.getHeight());
        System.out.println("体重: " + p1.getWeight());

        System.out.println("------------------------------------");

        //对p1对象进行一系列操作
        po1.calcBmi();
        po1.judgeBmi();


    } 
}

这样,一个以 人体BMI为主题进行一系列操作的对象构造 就完成了~~~
总结来说,这样的一种编程思路,使结构更加清晰,将代码区块化,也更易于理解。


· 学习总结:

本周对于Java面向对象基础有了初步的探索
并用学到的知识进行了对人体BMI案例的代码实现

2023/12/15
Author:渡 U1ysses #

  • 28
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

渡 U1ysses #

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值