• 《面向对象程序设计(Java)》第四周学习总结


    实验四类与对象的定义及使用

    实验时间2018-9-20

    1、实验目的与要求

    (1) 理解用户自定义类的定义;

    类: 
    类是用来描述一类事物的共性内容的, 类是抽象的;  
    创建类,如何描述 属性    功能 用变量来描述属性 用方法来描述功能

    (2) 掌握对象的声明;

    对象:  
    就是现实中具体的事物,对象是具体的; 创建对象 
    类名  对象名  =  new 类名(); 
    如何通过对象访问类中属性和方法呢? 对象名.变量名 对象名.方法名();

    创建的对象没有赋值给具体的变量; 
    所以给匿名对象的属性赋值是没有任何意义的;  
    匿名对象使用场景 1 调用方法 2 作为参数传递 3 添加进容器中

    (3) 学会使用构造函数初始化对象;

    构造函数(方法) 1.4.1 构造函数的作用  
    用来给对象进行初始话的(初始化就是指给对象的各个属性赋值)  
     构造函数何时执行 
    对象一创建就会调用与之相对应的构造函数

     构造函数语法 
    修饰符  没有返回值类型  类名(参数列表){ 具体执行的代码 } 
    构造函数自动添加 

    当一个类中我们没有明确指定构造函数的话,jvm会自动帮我们添加一个空参数的构造, 
    如果我们指定了,就不添加

    构造函数和普通函数的区别 

    5.1 执行时机不同 
    对象一创建就会调用与之相对应的构造函数 普通函数只有被调用才会执行

    (4) 使用类属性与方法的使用掌握使用;

    (5) 掌握package和import语句的用途。

    权限修饰符可以用来修饰两种东西: 
    Public  该类在其他包中也可以访问   (首先要导包  import) 默认

    2、实验内容和步骤

    实验1 测试以下程序,掌握文件输入输出程序设计技术(文件输入输出,教材61-62).

    import java.io.*;

    import java.util.*;

    public class FileWriteReadTest {

    public static void main(String[] args) throws IOException{

    //写入文件演示

    PrintWriter out = new PrintWriter("myfile.txt");

    out.println("姓名 高数 Java 数据结构 平均成绩 总成绩");

    out.println("张三 20 30 40 0 0");

    out.println("李四 50 60 70 0 0");

    out.close();//输出完毕,需要close

    //读入文件演示

    Scanner in = new Scanner(new File("myfile.txt"));//myfile.txt这个File创建一个扫描器in

    int number = 1;//行号

    System.out.println(in.nextLine());

    while(in.hasNextLine()){//判断扫描器是否还有下一行未读取,该循环把文件的每一行都读出

    String line = in.nextLine();//读出myfile.txt的下一行

    System.out.print(""+(++number)+"行的内容: ");

    Scanner linescanner = new Scanner(line);//行内容建立扫描器

    linescanner.useDelimiter(" ");//使用空格作为分隔符

    String name = linescanner.next();

    String math = linescanner.next();

    String java = linescanner.next();

    String ds = linescanner.next();

    String avg = linescanner.next();

    String total = linescanner.next();

    System.out.println("name="+name+"  math="+math+"  java="+java+"  ds="+ds+"  avg"+avg+"  total="+total);

    }

    in.close();//读入完毕,最后需要对其进行close

    }

    }

    实验2 导入第4章示例程序并测试。

    测试程序1

    l 编辑、编译、调试运行程序4-2(教材104页);

    l 结合程序运行结果,掌握类的定义与类对象的用法,并在程序代码中添加类与对象知识应用的注释;

    l 尝试在项目中编辑两个类文件(Employee.java、 EmployeeTest.java ),编译并运行程序。

    l 参考教材104页EmployeeTest.java,设计StudentTest.java,定义Student类,包含name(姓名)、sex(性别)、javascore(java成绩)三个字段,编写程序,从键盘输入学生人数,输入学生信息,并按以下表头输出学生信息表:

      姓名     性别java成绩

    import java.util.Scanner;

    public class Student implements Compare

    {

        private String no;

        private String name;

        private double score;

        public Student ( String no, String name, double score )

        {

            this.no = no;

            this.name = name;

            this.score = score;

        }

        public String displays ()

        {

            StringBuilder builder = new StringBuilder ();

            builder.append ("Student [no=");

            builder.append (no);

            builder.append (", name=");

            builder.append (name);

            builder.append (", score=");

            builder.append (score);

            builder.append ("]");

            return builder.toString ();

        }

        public void setScore ( double score )

        {

            this.score = score;

        }

        public double getScore ()

        {

            return score;

        }

        @Override

        public boolean compare ( Object o )

        {

            return ( this == o || null != o && o.getClass ().equals (this.getClass ()) )

                    && ( (Student) o ).score > this.score;

        }

        public static void sort ( Student[] students )

        {

            for ( int i = 0; i < students.length; i++ )

            {

                for ( int j = i + 1; j < students.length; j++ )

                {

                    if (students[i].compare (students[j]))

                    {

                        Student temp = students[i];

                        students[i] = students[j];

                        students[j] = temp;

                    }

                }

            }

        }

        public static void main ( String[] args )

        {

            System.out.print ("建立一个含有n个学生的数组, 从键盘输入n: ");

            Scanner scanner = new Scanner (System.in);

            int count = 0;

            double scores = 0;

            int n = scanner.nextInt ();

            Student[] students = new Student[n];

            System.out.println ("从键盘输入每个学生的信息: 学号、姓名、java成绩 用英文逗号分隔.");

            String line = null;

            try

            {

                while (count < n && null != ( line = scanner.next () ))

                {

                    if (line.matches ("^\w+\,\w+\,\d+(\.\d*)?$"))

                    {

                        String no = line.split ("\,")[0].trim ();

                        String name = line.split ("\,")[1].trim ();

                        double score = Double.parseDouble (line.split ("\,")[2].trim ());

                        students[count] = new Student (no, name, score);

                        scores += score;

                        count++;

                    }

                }

            }

            catch (ScoreException e)

            {

                e.printStackTrace ();

            }

            System.out.println ("排序:");

            sort (students);

            for ( int i = 0; i < students.length; i++ )

            {

                System.out.println (students[i].displays ());

            }

            System.out.println ("学生的java成绩的平均分: " + ( scores / n ));

            scanner.close ();

            Student collegeStudent = new CollegeStudent ("001", "yugi111", 120, "1999-01-01", "man");

            System.out.println (collegeStudent.displays ());

        }

    }

    class CollegeStudent extends Student

    {

        private String Date;

        private String sex;

        public CollegeStudent ( String no, String name, double score, String Date, String sex )

        {

            super (no, name, score);

            this.Date = Date;

            this.sex = sex;

        }

        @Override

        public String displays ()

        {

            StringBuilder builder = new StringBuilder ();

            builder.append ("CollegeStudent [Date=").append (Date).append (", sex=").append (sex).append ("]");

            return builder.toString ();

        }

    }

    interface Compare

    {

        boolean compare ( Object o );

    }

    class ScoreException extends IllegalArgumentException

    {

        private static final long serialVersionUID = 1L;

        public ScoreException ()

        {

            super ();

        }

        public ScoreException ( String s )

        {

            super (s);

        }

        static ScoreException forInputString ( String s )

        {

            return new ScoreException ("For input string: "" + s + """);

        }

    }

    测试了一下之后加上了排序以及对数组长度的控制。

    输出结果如图:

    测试程序2:

    l 编辑、编译、调试运行程序4-3(教材116);

    l 结合程序运行结果,理解程序代码,掌握静态域(netxtId)与静态方法(getNextId)的用法,在相关代码后添加注释;

    l 理解Java单元(类)测试的技巧。

    测试程序3:

    l 编辑、编译、调试运行程序4-4(教材121);

    l 结合程序运行结果,理解程序代码,掌握掌握Java方法参数的用法,在相关代码后添加注释;

    测试程序4:

    l 编辑、编译、调试运行程序4-5(教材129);

    l 结合程序运行结果,理解程序代码,掌握Java用户自定义类的用法,掌握对象构造方法及对象使用方法,在相关代码后添加注释。

    测试程序5:

    l 编辑、编译、调试运行程序4-6、4-7(教材135);

    l 结合程序运行结果,理解程序代码,掌握Java包的定义及用法,在相关代码后添加注释;

    实验3  编写长方形类Rectangle与圆形类Circle,其中Rectangle类设置私有属性:width,length;Circle类设置私有属性radius。编写Rectangle类的带参构造函数Rectangle(int width,int length), Circle类的带参构造函数Circle(int radius),编写两个类的toString方法(Eclipse可自动生成)。上述2个类均定义以下方法:

    求周长的方法public int getPerimeter()

    求面积的方法public int getArea()

    main方法中完成以下任务:

    (1) 输入1行长与宽,创建一个Rectangle对象;

    (2) 输入1行半径,创建一个Circle对象;

    (3) 将两个对象的周长加总输出,将两个对象的面积加总输出。

    实验代码:

    import java.util.*;

      

    public class 实验3 {

      public static void main(String[] args) {

             Scanner in = new Scanner(System.in);

             System.out.println("请输入长方形的长:"); 

             int length = in.nextInt();

             System.out.println("请输入长方形的宽:"); 

             int width = in.nextInt();

             System.out.println("请输入圆的半径:"); 

             double radius = in.nextDouble();

             

             Rectangle r=new Rectangle(length,width);

             Circle   c=new Circle(radius);

             System.out.println("矩形周长为:"+r.getPerimeter()+"矩形面积为:"+r.getArea());

             System.out.println("圆周长为:"+c.getPerimeter()+"圆面积为:"+c.getProportion());

             double d = r.getPerimeter()+c.getPerimeter();

             double e = r.getArea()+c.getProportion();

             System.out.println("长方形与圆的周长和为:"+d+"长方形与圆的面积和为:"+e);

         }

     }

    class Circle {

    private double radius;

    public Circle(double r){

    radius=r;

    }

        

    public double getPerimeter()

        {

            double Perimeter = 2*Math.PI*radius;

            return Perimeter;

        }

        public double getProportion()

        {

            double Proportion = radius*radius*Math.PI;

            return Proportion;

        }

    }

    class Rectangle {

    private double width;

         private double length;

         public Rectangle(double w,double l)

         {

             width=w;

             length=l;

         }

         public double getPerimeter()

         {

             double Perimeter = (width+length)*2;

             return Perimeter;

         }

         public double getArea()

         {

             double Area = width*length;

             return Area;

         }

     }

    输出结果

    对象与类学习总结:类是抽象的,而对象是具体的,类是一系列拥有相同属性和方法的对象的抽象出来的集合。比如说“人”就是一个类,是抽象的,你并不知道这个“人”到底是谁,做什么的,叫什么名字,而”你的邻居小张“就是一个对象,是实际存在的,你知道他的姓名,身高等等等等;set和get是是访问器,get用来获取值,set用来设置值,通过将成员变量申明为private私有的以保护该成员不被所有人共享,同时封装成属性,即提供一个相应的public 公有的set和get方法来对该变量赋值和取值,通过在该方法中添加条件来限制访问,比如一个私有成员age,在赋值的时候不能随意给值,因为可以用过set方法限制给值范围。类的概念 : 类是具有相同属性和服务的一组对象的集合。为属于该类的所有对象提供了统一的抽象描述,其内部包括属性和服务两个主要部分。在面向对象的编程语言中,类是一个独立的程序单位,应该有一个类名并包括属性说明和服务说明两个主要部分。
    对象的概念:对象是系统中用来描述客观事物的一个实体,是构成系统的一个基本单位。一个对象由一组属性和对这组属性进行操作的一组服务组成。从更抽象的角度来说,对象是问题域或实现域中某些事物的一个抽象,它反映该事物在系统中需要保存的信息和发挥的作用;它是一组属性和有权对这些属性进行操作的一组服务的封装体。客观世界是由对象和对象之间的联系组成的。

    此外,在输入代码的过程中还是要注意细节问题,例如中英文的切换等等,句末的分号等等,注意培养良好的编程习惯。

  • 相关阅读:
    jqueryeasyui 使用笔记
    怎么查看端口占用情况?
    Ie6 Ie7 双倍padding
    Javascript获取URL
    fckeditor,用p替代div标签设置对齐方式
    ZenCart安全建站的几个措施和步骤
    复选框二选一 javascript
    dedecms从php设置里面去掉index.html
    ajax调用webservice返回DataTable "序列化类型为“System.Reflection.Module”的对象时检测到循环引用
    无题
  • 原文地址:https://www.cnblogs.com/fairber/p/9693049.html
Copyright © 2020-2023  润新知