这个图里面的-,+还有个#是用来表示该属性或方法的可见性的。具体来说
-:表示private 私有属性;
+:表示public 公共属性;
#:表示protected(friendly)中等;
这个表格就表示Employee类里三个私有的对象和一个公有的方法。
再回到第三次作业,同样的,我也举个例子:
定义一个代表一元二次方程ax2+bx+c=0的类QuadraticEquation,其属性为三个系数a、b、c(均为私有属性),类中定义的方法参考main方法中的代码。main方法源码:
import java.util.Scanner;
public class Main {
public static void main(String[] args){
Scanner input = new Scanner(System.in);
double a = Double.parseDouble(input.next());
double b = Double.parseDouble(input.next());
double c = Double.parseDouble(input.next());
if(a== 0){
System.out.println("Wrong Format");
System.exit(0);
}
//create a QuadraticEquation object
QuadraticEquation equation = new QuadraticEquation(a, b, c);
//get value of b * b - 4 * a * c
double discriminant = equation.getDiscriminant();
System.out.println("a=" + equation.getA() +
",b=" + equation.getB() +
",c=" + equation.getC()+":");
if (discriminant < 0) {
System.out.println("The equation has no roots.");
}
else if (discriminant== 0)
{
System.out.println("The root is " +
String.format("%.2f", equation.getRoot1()));
}
else // (discriminant >= 0)
{
System.out.println("The roots are " +
String.format("%.2f", equation.getRoot1())
+ " and " + String.format("%.2f", equation.getRoot2()));
}
}
}
class QuadraticEquation{
//your code
}
import java.util.Scanner;
public class Main {
public static void main(String[] args){
Scanner input = new Scanner(System.in);
double a = Double.parseDouble(input.next());
double b = Double.parseDouble(input.next());
double c = Double.parseDouble(input.next());
if(a == 0){
System.out.println("Wrong Format");
System.exit(0);
}
//create a QuadraticEquation object
QuadraticEquation equation = new QuadraticEquation(a,b,c);
//get value of b * b - 4 * a * c
double discriminant = equation.getDiscrtminant(a,b,c);
System.out.println("a=" + equation.getA() +
",b=" + equation.getB() +
",c=" + equation.getC()+":");
if (discriminant < 0) {
System.out.println("The equation has no roots.");
}
else if (discriminant == 0)
{
System.out.println("The root is " +
String.format("%.2f", equation.getRoot1()));
}
else
{
System.out.println("The roots are " +
String.format("%.2f", equation.getRoot1())
+ " and " + String.format("%.2f", equation.getRoot2()));
}
}
}
class QuadraticEquation{
QuadraticEquation(double a,double b,double c)
{
A=a;
B=b;
C=c;
}
private double A,B,C,Root1,Root2;
public double getRoot1() {
double root1=(-B+Math.sqrt(B*B-4*A*C))/2*A;
return root1;
}
public double getRoot2() {
double root2=(-B-Math.sqrt(B*B-4*A*C))/2*A;
return root2;
}
public double getA() {
return A;
}
public void setA(double a) {
A = a;
}
public double getB() {
return B;
}
public void setB(double b) {
B = b;
}
public double getC() {
return C;
}
public void setC(double c) {
C = c;
}
public static double getDiscrtminant(double a,double b,double c){
double x;
x=b*b-4*a*c;
return x;
}
}
答案不唯一。
总结:
通过这三次的作业,我加深了对Java的理解,了解到了一个新的知识层面。如果要让我来点评一下这三次作业,我觉得它们更像一个个阶梯。第一次作业主要介绍的类,方法,对象;第二次作业则跟深一步,要求你学会在类里面新建并运用方法;最后的第三步,则是让你新建类,不同的类里面有不同的方法,不同的类之间方法的调用,传参等等。一步一步,由浅至深,让你理解Java它本身独特的特性,并让你喜欢上这个简单的明了的特性。
在这三次作业中我也遇到了很多的问题,接下来由我一一为大家来说明,看你有没有遇到。
1.类,对象,方法
按照我的理解,类你可以理解为一个大的统称,比如说:人,树,车,狗等等;而对象则是具体到它们之间的每一个,比如一个叫张三的人,一条叫小白的狗,一棵特指的树;而方法就是这个特指的对象干了什么事,比如张三去上厕所,小白去吃饭..这样的话是不是很好理解?
2.如何创建类
在Java中类呗规定用class来创建
比如:class Name;这样就新建了一个叫Name的类。当然在class前面你还可以有修饰比如;public。在这里要注意,类的名字必须是以驼峰方式来命名,就是首字母大写。
3.如何创建对象
创建对象的格式:[public|private|protected] [static] [final] 类型 方法名(形参){
方法体;
return表达式;}
其中如果是viod修饰,则改方法不用返回值,若不是的的话则需要return一个值(不能返回表达式);
4.如何定义属性
定义属性的格式:[ public | private | protected ] [ static ] [ final ] 类型 成员名
在这里我附上一些特殊的类型:
Boolean类型,成员变量的默认值是false。
Int类型,成员变量的默认值是0。
Double类型,成员变量的默认值是0.0。
String类型,成员变量的默认值是null。
Char类型,成员变量的默认值是\u0000
你们可能会发现,在属性和方法里面都有一个static,这里就有一个新知识,静态和非静态。
静态变量:从属于类,可以在不同的对象里面调用
OO思想在我理解来,就是方便修改以前的代码,因为随着时代快速的发展,你前几个月的程序,或许到现在就不能使用了,随之而来产生的思想就是面向对象思想。
面向对象:
一种基于面向过程的新编程思想,顾名思义就是该思想是站在对象的角度思考问题,我们把多个功能合理放到不同对象里,强调的是具备某些功能的对象。
具备某种功能的实体,称为对象。面向对象最小的程序单元是:类。面向对象更加符合常规的思维方式,稳定性好,可重用性强,易于开发大型软件产品,有良好的可维护性。
在软件工程上,面向对象可以使工程更加模块化,实现更低的耦合和更高的内聚。(在此注明非本人所写,为官方概念,只做引用)
它有三大特征:1:封装(Encapsulation) 2:继承(Inheritance) 3:多态(Polymorphism)具体我就不解释了,大家可以自行百度。
面向对象和面向过程最大的区别就是上面的三大特征。在此我经查询资料而知:面向对象并不绝对的优于面向过程!
对于面向对象这个思想来说,我有很深的体悟,因为老师布置的三次作业,第二次与第三次之间有着很深的联系,因为第三次作业是一个综合作业,可以用的第二次作业当中的很多代码,而我因为自身的编译,导致很多代码不能运用在新的题目当中,只能重新编写。十分苦恼,所以大家一定要注意自己的程序的设计。
四.测试的理解与实践
对于程序设计来说,测试当然是十分重要的一环。一个完美的代码,应该满足用户所提出的各种问题,并且高效,快速的完成。
如果让我来设计测试程序,我会依照题目,从一些常例到特例,以及编译速度等方向来测试代码,以求让代码完美的满足题目要求。
五.课程建议
建议老师多指点一些网站去学习Java有关知识。