开发者社区> 技术小美> 正文

[零基础学JAVA]Java SE面向对象部分-10.面向对象基础(05)

简介:
+关注继续查看
上季内容回顾: 
1、类和对象 
2、引用的内存分配 
3、封装性 
4、构造方法 
5、String类 
6、this关键字
在编写代码之前建立好应该具备的类,之后再为类添加一些属性,属性都是需要被封装的,封装之后必须写setter和getter方法才可以访问属性,如果有需要则可以加入构造方法设置属性。
本季主要知识点:
1、 题目讲解 
2、 如何去分析题目
本次课程是习题课程,将之前所学到的各种知识综合应用在题目之中, 并进行综合讲解,在讲解的时候为读者提供了解决问题的基本思路。
image
分析下这个题目哈~
我们最好先画下类图
类名
属性
方法
属性的表示: 
权限 属性名称:类型 
-name:String ==> private String name ;
方法的表示: 
权限 方法名称(参数名称:参数类型,参数名称:参数类型):返回值类型 
+setName(name:String):void ==> public void setName(String name)
用手工画类图会非常麻烦哈,我们可以使用jude这样的工具。
JUDE(Java and UML Developers Environment) 1.2.1
image
在这里,我们新建三个类:Student,Class_,Out
image
类我们定义好了后,我们再来定义下类滴属性哈,先Student类定义name、age、score属性。
image
属性定义后我们就定义其setter和getter方法并设置其参数。
image
依此类推
image
然后是班级Class类定义name、de.ion两个属性。
image
同样设置其setter和getter方法并设置参数。
image
最后是输出类Out,这个非常简单,只要定义一个print方法就可以了。
image
最后一张完整的类图就出来了哈~
image
在这个工具中,可以根据图形生成代码,我们看下面哈~
选择文件----导出Java
image
选择存放的路径
image
image
image
现在目录中就生成了这三个类文件
image
我们把它们合并到一个文件中,这样直观一点哈~
image
验证下效果哈~
image
修改代码为其加入构造方法
class Student { 
  private String name; 
  private int age; 
  private float score; 
  //修改程序,加入一个构造 
  public Student(){} 
  public Student(String name,int age,float score){ 
    this.setName(name) ; 
    this.setAge(age) ; 
    this.setScore(score) ; 
  } 
  public void setName(String name) { 
    this.name = name ; 
  } 
  public String getName() { 
    return this.name ; 
  } 
  public void setAge(int age) { 
    this.age = age ; 
  } 
  public int getAge() { 
    return this.age ; 
  } 
  public void setScore(float score) { 
    this.score = score ; 
  } 
  public float getScore() { 
    return this.score ; 
  } 

class Class_ { 
  private String name; 
  private String de.ion; 
  public Class_(){} 
  public Class_(String name,String de.ion){ 
    this.setName(name) ; 
    this.setDe.ion(de.ion) ; 
  } 
  public void setName(String name) { 
    this.name = name ; 
  } 
  public String getName() { 
    return this.name ; 
  } 
  public void setDe.ion(String de.ion) { 
    this.de.ion = de.ion ; 
  } 
  public String getDe.ion() { 
    return this.de.ion ; 
  } 

class Out { 
  public void print(Student stu, Class_ cla) { 
    System.out.println("学生姓名:"+stu.getName()) ; 
    System.out.println("学生年龄:"+stu.getAge()) ; 
    System.out.println("学生成绩:"+stu.getScore()) ; 
    System.out.println("班级名称:"+cla.getName()) ; 
    System.out.println("班级描述:"+cla.getDe.ion()) ; 
  } 

public class Demo02 

  public static void main(String args[]){ 
    Student s = new Student() ; 
    s.setName("王乾") ; 
    s.setAge(27) ; 
    s.setScore(99.9f) ; 
    Class_ c = new Class_() ; 
    c.setName("JAVA强化班") ; 
    c.setDe.ion("学习JAVA技术强化班") ; 
    new Out().print(s,c) ; 
  } 
}
 
加入构造方法后效果怎么样呢?验证一下哈~
image
程序我们已经修改了,我们可以将程序代码导入到工具之中,自动生成类图。
首先我们新建一个文件
image
然后选择导入Java
image
找到Java程序的路径
image
单击start
image
image
image
如果属性是两个单词的,则第一个单词的首字母小写,之后每个单词的首字母大写。
/* 
1、定义好要使用的类 
2、定义好类中的属性 
3、为属性封装 
4、为封装后的属性设置setter和getter方法 
5、如果需要可以为类中添加构造方法 
6、为类中添加所需要的其他方法 
*/
 
class Student 

  //学生编号 
  private String stuno ; 
  //学生姓名 
  private String name ; 
  //数学成绩 
  private float mathScore ; 
  //英语成绩 
  private float englishScore ; 
  //计算机成绩 
  private float computerScore ; 

  public Student(){} 
  public Student(String stuno,String name,float mathScore,float englishScore,float computerScore){ 
         this.setStuno(stuno) ; 
    this.setName(name) ; 
    this.setMathScore(mathScore) ; 
    this.setEnglishScore(englishScore) ; 
    this.setComputerScore(computerScore) ; 
  } 

  public void setStuno(String stuno){ 
    this.stuno = stuno ; 
  } 
  public void setName(String name){ 
    this.name = name ; 
  } 
  public void setMathScore(float mathScore) 
  { 
    this.mathScore = mathScore ; 
  } 
  public void setEnglishScore(float englishScore) 
  { 
    this.englishScore = englishScore ; 
  } 
  public void setComputerScore(float computerScore) 
  { 
    this.computerScore = computerScore ; 
  } 
  public String getStuno(){ 
    return this.stuno ; 
  } 
  public String getName(){ 
         return this.name ; 
  } 
  public float getMathScore(){ 
         return this.mathScore ; 
  } 
  public float getEnglishScore(){ 
         return this.englishScore ; 
  } 
  public float getComputerScore(){ 
         return this.computerScore ; 
  } 
  //添加所需要的其他方法 
  // 在编写类的时候一定要记住一个原则:任何的输出绝对不能在类中完成 
  // 所有要输出的内容在类中只是把值返回来,交给调用处输出 
  // 取得全部成绩的总和 
  public float getSum(){ 
         return this.mathScore+this.englishScore+this.computerScore ; 
  } 
  //取得平均成绩 
  public float getAvg(){ 
         return this.getSum() / 3 ; 
  } 
  //取最高的成绩 
  public float getMax(){ 
         //三个成绩相比 
    float max = 0.0f ; 
    if (this.mathScore>this.englishScore) 
    { 
      max = this.mathScore ; 
    } 
    else 
    { 
      max = this.englishScore ; 
    } 
    if (max<this.computerScore) 
    { 
      max = this.computerScore ; 
    } 
    return max ; 
  } 
  //取最低的成绩 
  public float getMin(){ 
         //三个成绩相比 
    float min = 0.0f ; 
    if (this.mathScore>this.englishScore) 
    { 
      min = this.englishScore ; 
    } 
    else 
    { 
      min = this.mathScore ; 
    } 
    if (min>this.computerScore) 
    { 
      min = this.computerScore ; 
    } 
    return min ; 
  } 

public class Demo03{ 
  public static void main(String args[]){ 
    Student s = new Student() ; 
    s.setStuno("s01") ; 
    s.setName("王乾") ; 
    s.setMathScore(89.8f) ; 
    s.setEnglishScore(99.0f) ; 
    s.setComputerScore(88.8f) ; 
    System.out.println(s.getName()+"的成绩单("+s.getStuno()+"):") ; 
    System.out.println("\t|- 总成绩:"+s.getSum()) ; 
    System.out.println("\t|- 平均成绩:"+s.getAvg()) ; 
    System.out.println("\t|- 最高成绩:"+s.getMax()) ; 
    System.out.println("\t|- 最低成绩:"+s.getMin()) ; 
  } 
};
 
测试下效果
image
一般来说分析面向对象程序的步骤: 
1、可以画一些类的草图 
2、之后定义每个类中的属性,属性定义完之后必须封装 
3、封装的属性如果需要被外部所访问,则肯定必须写setter和getter 
4、如果需要在对象实例化时可以为其属性赋初始值,则可以加入构造方法,如果有必要则可以加入多个构造(一个是无参的,其他的是有参的) 
5、为类中添加程序所必须的方法 
6、进行测试
记住: 
开发中main 方法就是一个测试端,只在里面写少量的代码即可,不可多写,也可以把main 方法称为客户端。

总结 
通过这一季的习题练习哈,我们一定要培养面向对象的解决的思路起来哈~~~
#########################################################################






本文转自redking51CTO博客,原文链接:http://blog.51cto.com/redking/123947,如需转载请自行联系原作者

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
JAVA基础复习之JDBC(配置动态数据源)
复习原因 在项目的开发当中,之前数据库连接信息都是写死在配置文件当中。但是突然接到一个需求: 获取外部数据源信息,然后将某些数据通过Echarts绘制成折线图展示出来(ps:数据源需要用户手动设定) 有点懵,因为之前都是写死在配置文件当中的,然后在网上也找了一些资料,发现都不是自己想要的。 最后想到,既然是简单的获取数据进行展示,直接使用JDBC连接数据库获取就可以了啊。没有必要搞什么骚操作。 JDBC 一直使用的JPA或者mybatis进行数据库连接,很少使用JDBC进行数据库连接。 因此也复习一下JDBC,毕竟无论是JPA还是Mybatis都是对JDBC的一个封装。 什么是JD
236 0
【Java 基础】Java 数据类型和 MySql 数据类型对应表
【Java 基础】Java 数据类型和 MySql 数据类型对应表MySQL 数据类型对应 Java 数据类型 类型名称 显示长度 数据库类型 JAVA 类型 JDBC 类型索引 (int) 描述 VARCHAR L+N VARCHAR java.lang.String 12 CHAR N CHAR java.lang.String 1 BLOB L+N BLOB java.lang.byte[] -4 TEXT 65535 VARCHAR java.lang.String -1 INTEGER 4 INTEGER UNSIGNED java.lang.Long 4 TINYINT
258 0
Java基础深化和提高 ---- 反射技术
Java 反射机制是Java语言一个很重要的特性,它使得Java具有了“动 态性”。
64 0
Java的学习笔记(02)基础
访问修改函数 static:它用于使成员(块、方法、变量或嵌套类)可以独立于任何其他成员使用,而无需参考特定情况。 strictfp:用于限制、浮点、浮点运算和计算,并在浮点变量中执行任务时保证每个阶段的结果相同。 synchronized:它用于在Java中获得适用于块和方法的同步。 transient:作为序列化的一部分使用的因子修饰符。在序列化的季节,如果我们不想对记录中的特定变量进行多余的估计,那么此时,我们使用transient关键字。 volatile:如果修饰符告诉编译器,由不稳定变量调整的变量通过程序的不同部分发生惊人的变化,则使用volatile。 Java关键字的
48 0
Java基础深化和提高-------容器篇(中)
List是有序、可重复的容器。
70 0
Java基础深化和提高-------容器篇(上)
为了能够更好的学习容器,我们首先要先来学习一个概念:泛型。
106 0
【Java原理探索】夯实你对AQS的认识和基础
【Java原理探索】夯实你对AQS的认识和基础
69 0
Java面试题1:Java基础篇
面向对象是一种万物皆对象的编程思想,任何物体都可以归为一类事物,而一个个个体都是一类事物的实例。面向对象的编程是以对象为中心,以消息为驱动的。
75 0
Java面向对象基础5——String类(2)
Java面向对象基础5——String类(2)
51 0
Java面向对象基础5——String类(1)
String类的本质是字符数组,是Java中的文本数据类型。字符串常量是用双引号括起来的内容,Java中所有字符串字面值都作为此类的实例实现
78 0
Java面向对象基础4——内存图
Java面向对象基础4——内存图
49 0
Java面向对象基础3——构造方法及this关键字
Java面向对象基础3——构造方法及this关键字
38 0
Java面向对象基础2——封装
简单来说,封装就是正确地设计对象的属性。要注意的是,对象代表什么,就封装对应的数据,并提供数据的对应行为
29 0
Java面向对象基础1——基础概念
Java面向对象基础1——基础概念
26 0
+关注
技术小美
文章
问答
视频
相关课程
更多
相关电子书
更多
JAVA开发手册1.5.0
立即下载
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
相关实验场景
更多