一、类与对象

1.1 用类制造对象

  • 对象变量是对象的管理者而非所有者,所以涉及到赋值、函数参数传递和比较都与普通变量有所不同。
  • 本节尝试自己定义类,然后用自己定义的类来创建对象;
  • 类定义了对象长什么样,对象则是按照类的定义所制造出来的实体,一个类可以创建很多对象。每个对象都有自己的数据。

下载 shapes.zip文件

  • 对象是实体,需要被创建,可以为我们做事情;
  • 类是规范,根据类的定义来创建对象。
  • 对象=属性+服务,数据表示属性或形态,例如画圆时的圆心和半径,
  • 把数据和对数据的操作放在一起,称为封装

1.2 定义类

  • 类由两种东西构成:1.表示对象有什么成员变量;2.表示对象能做什么成员函数;
  • 一旦定义了类,我们就可以创建这个类的多个对象,这些对象就会做那个类所定义的动作(函数),但是各自具有不同的数据。

举例说明:

package vendingmachine;
public class VendingMachine {int price =80;int balance;int total;void showPrompt(){System.out.println("Welcome");}void insertMorney(int amount){balance = balance +amount;}void showBalance(){System.out.println(balance);}void getFood(){if (balance >= price){System.out.println("Here you are");balance = balance -price;total=total +price;}}//设计了这样的类,三个属性四个动作;public static void main(String[] args) {// TODO Auto-generated method stubVendingMachine vm= new VendingMachine();//创建对象vm.showPrompt();//让对象做事情,变量名字.方法。vm.showBalance();vm.insertMorney(100);vm.getFood();vm.showBalance();}
}

1.3 成员变量和成员函数

1.成员

  • 类才具有成员,包括”成员变量“和**“成员函数”**。

  • 理解对象中的成员变量是怎么来的,怎么就能让成员函数明白自己在和哪个对象打交道;

  • 写在类里的成员变量只是一个声明,变量并不在那里,变量不在类里,变量在每一个对象里;

  • 一定要正确且充分的理解这里面的关系!!!

2.本地变量

  • 定义在类的函数内部的变量;

  • 本地变量的作用域和生存期在函数的内部。

3.成员变量

  • 类定义了对象中所具有的变量,这些变量称作成员变量;

  • 写在类里的变量,生存期是对象的生存期,作用域是类内部的成员函数。

  • 每个对象都有自己的变量,和同一个类的其他对象是分开的。

4.函数与成员变量

  • 在函数中,可以直接写成员变量的名字来访问成员变量;
v.insertMoney();
//这次调用临时建立了insertMoney()和v之间的关系,让insertMoney()内部的成员变量指的是v的成员变量;
  • this是成员函数特殊的(固有的)本地变量,它表达了调用这个函数时的那个对象;
//比如说定义了一个类veningmachine
//我想定义个函数给balance赋值,便可以用到this
public class VendingMachine {int price =80;int balance;//成员变量int total;void setBalance(int balance){this.balance=balance//this.balance是类中的成员变量balance;//等号后面的balance是成员函数setBalance()中的本地变量;}
}

1.4 对象初始化

  • 变量初始化是程序安全很重要的一环。

  • Java提供了多种手段来保障对象创建时的初始化,包括给每个成员变量默认的“0”值、定义初始化和构造函数。

  • 本课时还涉及了函数重载和用this()来调用其他构造函数的方式。

    1.成员变量定义和初始化

    • 成员变量在定义的地方就可以给出初始值;
    • 未给出初始值的成员变量会自动获得0值;

    2.构造函数

  • 如果有一个成员函数的名字和类的名字完全相同,则在创建这个类的每一个对象的时候会自动调用这个函数——》构造函数

  • 在构造(对象)的时候会自动调用的函数叫作:构造函数。

  • 构造函数不能有返回类型;

    public class VendingMachine {int price =80;int balance;//成员变量int total;VendingMachine()//构造函数,在构造的时候会被自动调用的函数{total=0;}VendingMachine(int price)//构造函数2,我们可以有多个构造函数,但是二者的参数应该不同;{this.price=price;}
    }
    //至于定义对象时调用何种构造函数,主要看定义对象时参数的选择;
    //两个构造函数的关系叫做重载
    

    3.函数重载

  • 一个类可以有多个构造函数,只要它们的参数表不同;它们构成了重载关系(overload)

  • 创建对象的时候给出不同的参数值,就会自动调用不同的构造函数;

  • 通过this()还可以调用其它构造函数;

  • 一个类里的同名但参数表不同的函数构成了重载关系

作业题

题目内容

设计一个表示分数的类Fraction。这个类用两个int类型的变量分别表示分子和分母。

这个类的构造函数是:

Fraction(int a, int b)

构造一个a/b的分数。

这个类要提供以下的功能:

double toDouble();

将分数转换为double

Fraction plus(Fraction r);

将自己的分数和r的分数相加,产生一个新的Fraction的对象。注意小学四年级学过两个分数如何相加的哈。

Fraction multiply(Fraction r);

将自己的分数和r的分数相乘,产生一个新的Fraction的对象。

void print();

将自己以“分子/分母”的形式输出到标准输出,并带有回车换行。如果分数是1/1,应该输出1。当分子大于分母时,不需要提出整数部分,即31/30是一个正确的输出。

注意,在创建和做完运算后应该化简分数为最简形式。如2/4应该被化简为1/2。

你写的类要和以下的代码放在一起,并请勿修改这个代码:

import java.util.Scanner;

public class Main {

public static void main(String[] args) {Scanner in = new Scanner(System.in);Fraction a = new Fraction(in.nextInt(), in.nextInt());Fraction b = new Fraction(in.nextInt(),in.nextInt());a.print();b.print();a.plus(b).print();a.multiply(b).plus(new Fraction(5,6)).print();a.print();b.print();in.close();}

}

注意,你的类的定义应该这样开始:

class Fraction {

也就是说,在你的类的class前面不要有public。

输入格式:

程序运行时会得到四个数字,分别构成两个分数,依次是分子和分母。

输出格式:

输出一些算式。这些输入和输出都是由Main类的代码完成的,你的代码不要做输入和输出。

输入样例:

2 4 1 3

输出样例:

1/2

1/3

5/6

1

1/2

1/3

代码实现

//作业提交时拷贝以下的代码
import java.util.Scanner;public class Main {public static void main(String[] args) {// TODO Auto-generated method stubScanner in = new Scanner(System.in);Fraction a = new Fraction(in.nextInt(),in.nextInt());Fraction b = new Fraction(in.nextInt(),in.nextInt());a.print();b.print();a.plus(b).print();a.multiply(b).plus(new Fraction(5,6)).print();a.print();b.print();in.close();}}
class Fraction{int n;int d;//分子和分母两个属性//4个动作Fraction(int n, int d)//建立构造函数{this.n=n;this.d=d;}double toDouble()//表示返回double的类型{return n/(double)d;//将分数转换为double}Fraction plus(Fraction r)//表示返回Fraction的类型{Fraction x= new Fraction(1,1);x.n=r.n*d+r.d*n;x.d=r.d*d;return x;}Fraction multiply(Fraction r){Fraction x=new Fraction(1,1);x.n=n*r.n;x.d=d*r.d;return x;}void print(){if (n==d){System.out.println(1);}else{if (d==0){System.out.println("分母不能为0");}else{//判断分子分母之间是否有公约数int a=n;int b=d;int max=1;if (n>d){int temp=a;a=b;b=temp;}for (int i=2;i<=a;i++){if(a%i==0 && b%i==0){max=i;}}n=n/max;d=d/max;System.out.println(n+"/"+d);}}}
}

慕课网翁恺老师《面向对象程序设计——Java语言》第一周课程笔记及作业题(设计一个表示分数的Fraction类)相关推荐

  1. 四十八.面向对象程序设计——Java语言第一周编程题:分数

    题目内容: 设计一个表示分数的类Fraction.这个类用两个int类型的变量分别表示分子和分母. 这个类的构造函数是: Fraction(int a, int b) 构造一个a/b的分数. 这个类要 ...

  2. 【Java】《面向对象程序设计——Java语言》Castle代码修改整理

    前言 最近闲来无事刷刷MOOC,找到以前看的浙大翁凯老师的<面向对象程序设计--Java语言>课程,重新过一遍仍觉受益颇深. 其中有一个Castle的例子,思路很Nice但代码很烂,翁凯老 ...

  3. 面向对象程序设计——Java语言 第3周编程题 查找里程(10分)

    面向对象程序设计--Java语言 第3周编程题 查找里程(10分) 题目内容 下图为国内主要城市之间的公路里程: 你的程序要读入这样的一张表,然后,根据输入的两个城市的名称,给出这两个城市之间的里程. ...

  4. 201871010115——马北《面向对象程序设计JAVA》第二周学习总结

    项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 https://www.cnblogs.com/nwnu-daizh/p ...

  5. 《面向对象程序设计——Java语言·翁恺》第3周编程题 查找里程

    题目概述: 已知国内主要城市之间的公路里程表.读入这样的一张表城市里程表(部分数据),然后根据输入的两个城市的名称,给出这两个城市之间的里程. 题目链接: https://www.icourse163 ...

  6. java isprime函数_翁恺老师零基础java课程函数章第一题分解质因数

    分解质因数(5分) 题目内容: 每个非素数(合数)都可以写成几个素数(也可称为质数)相乘的形式,这几个素数就都叫做这个合数的质因数.比如,6可以被分解为2x3,而24可以被分解为2x2x2x3. 现在 ...

  7. 两个多精度十进制数加法程序设计_翁恺老师的程序设计入门——C语言 第四周习题...

    第一题 奇偶个数 题目内容: 你的程序要读入一系列正整数数据,输入-1表示输入结束,-1本身不是输入的数据.程序输出读到的数据中的奇数和偶数的个数.输入格式: 一系列正整数,整数的范围是(0,1000 ...

  8. 程序设计入门——C语言(翁恺老师)我的作业

    程序设计入门--C语言(翁恺老师)我的作业 第一周 程序设计与C语言 1 输出"Hello World"(5分) 题目内容: 请输出一行,内容为 Hello World 请注意大小 ...

  9. 面向对象程序设计-C++(视频) 浙江大学 翁恺老师

    网易云课堂视频转存:面向对象程序设计-C++(视频) 浙江大学 翁恺老师 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/u012183487/art ...

  10. 翁恺老师Java进阶城堡游戏源码

    刚开始学习Java,在比站发现了翁恺老师的课程,讲的很不错.Castle源码我找了很久都没有找到老师课上自己讲的那个程序,于是我决定做一回搬运工,自己敲了出来,现在也方便一下大家,大家一起学习,一起进 ...

最新文章

  1. 微信公众平台开发 - 动手篇。使用weinxinFundation开始一个微信公众平台的开发
  2. python---方法解析顺序MRO(Method Resolution Order)<以及解决类中super方法>
  3. Global Average Pooling对全连接层的可替代性分析
  4. Arduino教程:MPU6050的数据获取、分析与处理
  5. Apahce的虚拟用户认证及server-status页
  6. usb接口多少钱_工控机一般有多少个串口
  7. mysql导出表数据
  8. 这10个实用的Javascript调试技巧,你知道吗?
  9. oracle同机单实例加入集群,将oracle同机单实例加入rac集群的操作步骤
  10. 数学与计算机教学设计,数学和信息技术整合的思考 教案教学设计
  11. 丢人丢到国外去了,国内定制版Flash被国外安全厂商撕开了面纱!
  12. VJC案例-查找最大值
  13. 如何书写软件应用发明专利说明书(实例)
  14. jsp js弹出网页对话框
  15. 汇总报表与合并报表之如何汇总报表
  16. Android 虚拟机EditText键盘无法输入解决方法
  17. mysql mmm优缺点_mysql之MMM总结
  18. 滴滴Logi-KafkaManager对接夜莺实现告警配置
  19. Windows AD证书服务系列---部署CA(1)
  20. Halcon 《ML_MLP》网格缺陷检测

热门文章

  1. snapchat中国使用_如何在不共享位置的情况下使用Snapchat
  2. 相机模型(针孔模型+畸变模型)
  3. tcl怎么实现从服务器拷贝文件夹,如何在TCL中二进制读取文件并通过XMLRPC将其发送到用Python编写的服务器?...
  4. 计算机网络的对学生的利弊英语作文,关于电脑利弊的英语作文
  5. 7-12 分解质因数 (10分)
  6. 麦子学院视频教程笔记
  7. 嵌入式系统开发-麦子学院(11)——ARM Cortex A8 硬件基础(1)
  8. C语言编程 - 推箱子小游戏源码分享 (含过关)
  9. promise跟ajax区别,Promise和AJAX有什么区别?
  10. java-阴历日期和阳历日期互相转换