zoukankan      html  css  js  c++  java
  • java第三次作业

    java第三次作业

    (一)学习总结

    1.什么是面向对象的封装性,Java中是如何实现封装性的?试举例说明。
    封装:是将描述某类事物的数据与处理这些数据的函数封装在一起,形成一个有机整体(类)。
    在java中有四大访问权限:public共有,private私有,protected保护,default默认 。

    class Person { 
       private String name ; 
       private int age ; 
       static String university = "河北农业大学" ; 
       public Person(String name,int age){  
           this.name = name ; 
           this.age = age ; 
      } 
      public String toString(){ 
         return "姓名:" + this.name + ",年龄:" + this.age 
                                                         + ",学校:" +this.university  ; 
      } 
    }
    建立person类,管理private私有权限的姓名,年龄,且只能通过类的get、set方法,才能访问。 封装后,不可随意更改,可以用set,get方法赋值和调用
    public class Test{  
    	  public static void main(String args[]){ 
    	    Person per1 = new Person("张三",20) ; 
    	    Person per2 = new Person("李四",21) ; 
    	    System.out.println(per1.toString()) ; 
    	    System.out.println(per2.toString()) ; 
    	    System.out.println("---------------------") ; 
    	    Person.university = "华北农业大学" ; 
    	    System.out.println(per1.toString()) ; 
    	    System.out.println(per2.toString()) ; 
    	  } 
    	} 
    	封装测试类进行赋值,调用。
    

    2.阅读下面程序,分析是否能编译通过?如果不能,说明原因。
    (1)

    class A{
        private int secret = 5;
    }
    public class Test{
        public static void main(String args[]){
            A a = new A();
            System.out.println(a.secret++);
        }
    }
    

    不能,原因:
    其一:公用类型 Test 必须在它自己的文件中定义,需另外新建立一个test类;其二:private为私有权限不能直接读取须创建secret的getter和setter并将其声明为默认或公有。

        public int getSecret() {
    			return secret;
    		}
    
    	public void setSecret(int secret) {
    		this.secret = secret;
    	}
    

    (2)

    public class Test{
        int x = 50;
        static int y = 200;
        public static void method(){
            System.out.println(x+y);
        }
        public static void main(String args[]){
            Test.method();
        }
    }
    

    不能,原因:
    x为非静态,应和y一致设为静态变量。

     static int x = 50;
    

    3 . 使用类的静态变量和构造方法,可以跟踪某个类创建的对象个数。声明一个图书类,数据成员为编号,书名,书价,并拥有静态数据成员册数记录图书的总数。图书编号从1000开始,每产生一个对象,则编号自动递增(利用静态变量和构造方法实现)。下面给出了测试类代码和Book类的部分代码,将代码补充完整。

    class Book {
        //属性封装
        private int bookNum;
        private String bookName;
        private double price;
    
        // 声明静态变量
        private static int bookNumber;
        
        //定义静态代码块对静态变量初始化
        static {
            bookNumber = 1000;}
        
        
        //构造方法
        public Book(String bookName, double price) {
            this.bookName = bookName;
            this.price = price;
            bookNum=bookNumber;
          
            bookNumber++;
        }
    
        public String getBookName() {
            return bookName;
        }
    
        public void setBookName(String bookName) {
            this.bookName = bookName;
        }
    
        public double getPrice() {
            return price;
        }
    
        public void setPrice(double price) {
            this.price = price;
        }
    
        // 定义方法求图书总册数
        public static int totalBook() {
            return  bookNumber - 1000;
        }
    
        // 重写toString方法
        public String toString() {
    		return "编号:" + bookNum + " 书名:" + this.bookName + " 价格:" + this.price;
        }
    }
    
    public class Test {
        public static void main(String args[]) {
            Book[] books = { new Book("c语言程序设计", 29.3), 
                             new Book("数据库原理", 30),
                             new Book("Java学习笔记", 68) };
            System.out.println("图书总数为:" + Book.totalBook());
            for (Book book : books) {
                System.out.println(book.toString());
            }
        }
    }
    

    测试结果:

    4.什么是单例设计模式?它具有什么特点?用单例设计模式设计一个太阳类Sun。
    (1),一个类有且仅有一个实例,并且自行实例化向整个系统提供。
    (2),一是某个类只能有一个实例;二是它必须自行创建这个实例;三是它必须自行向整个系统提供这个实例。
    (3)懒汉模式。用到时在建立这个模式。
    设计一个太阳类Sun。

    class Sun{
     private static Sun sun=null;
     public static Sun getsun()
     {
         if(sun==null)
         {
             synchronized(Sun.class)
             {
                 if(sun==null)
                    sun=new Sun();
             }
         }
         return sun;
     }
    

    }

    5.理解Java参数传递机制,阅读下面的程序,运行结果是什么?说明理由。

    public class Test {
        String str = new String("你好  ");
        char[] ch = { 'w','o','l','l','d' };
        public static void main(String args[]) {
            Test test = new Test();
            test.change(test.str, test.ch);
            System.out.print(test.str);
            System.out.print(test.ch);
        }
        public void change(String str, char ch[]) {
            str = "hello";
            ch[0] = 'W';
        }
    }
    

    运行结果:

    java只支持参数传值的机制, 即方法得到的是所有参数值的一个副本,方法不能修改传递给它的任何参数变量的内容。change调用的是str的副本,不能改变str的内容.

    (二)实验总结

    实验内容:
    1.按照下列要求完成类的设计
    (1)设计一个日期类,用于记录年、月、日,提供对日期处理的常用方法(日期输出格式xxxx-xx-xx)。
    遇到的问题的解决:在调用参数之前,要在相关类中设一个函数并将在相关变量用this语句说明正在调用此变量。

     	 public Datatime(int year,int month,int day){
    		this.year=year;
     	
    		this.month=month;
     	
    		this.setDay(day);
     	
    	}
    

    使用get和set将private私有权限设置中的变量进行读取。

     public int getyear(){return year;	}
        	public void setyear(int year){this.year=year;	}
    

    (2)设计一个职工类,该职工类至少具有下面的属性:职工号,姓名,性别,生日,工作部门,参加工作时间,设计相应的方法。
    (3)设计一个部门类,包括下列属性:部门编号,部门名称,经理,设计相应方法。
    (4)设计一个测试类,采用对象数组模拟一个拥有两个部门,10个职工的单位,实现对相关信息的查询功能。
    在给测试类中的employee员工employee emp1=new employee(1002," 八哥 "," 男 "," 1776-2-15 "," 技术部 "," 1997-3-8");赋值时要注意的问题是之前建立的类中所声明变量是什么类型的(int型的或string型的)要前后相对应。
    调用dept相关部门是逐个设置并调用的。

    emp1.setDept(dept1);
    

    还有是要在员工和部门之间建立相关联系,如:部门dept1中有员工empt1,emp2,emp3,emp5,emp6,部门dept2中有员工emp7,emp8,emp9。这样使用数组来建立就方便多了。

    dept1.setEmps(new employee[]{emp1,emp2,emp3,emp4,emp5,emp6});
    
    dept2.setEmps(new employee[]{emp7,emp8,emp9,emp10});
    

    使用for循环来逐次输出数组的相关信息

      System.out.println(dept1.getdname()+"员工:");
    
    		for(int i=0;i<dept1.getEmps().length;i++){
    			System.out.println(dept1.getEmps()[i]. toString());
    			}
    

    2.设计一个计算工具类,要求:
    (1)为用户提供几个常见的几何体面积和体积的算法(如球的体积和表面积,圆柱体的体积和表面积,圆锥体的体积和表面积)(可以学习使用static关键字)
    建立一个传参的函数,this用法调用相关的半径,高度和母线(涉及到圆锥中求表面积使用)

    public SV(double r, double h,double l) {
     	
    		this.r=r;
     	
    		this.h=h;
     	
    		this.l=l;
     	
    		}
    

    求球,圆柱和圆锥的体积和表面积的方法及公式的运用。

    public double getS1(){
    
    	return sqiu=4*3.14*r*r;
    
    }
    
    public void setS1(double sqiu){
    
    	this.sqiu=sqiu;
    
    }
    

    最后要写出一个总的函数public String toSting(){}来调用。

    public String toString(){
    
    	return "半径:"+r+"高度:"+h+"母线:"+l+"球面积:"+sqiu+"圆锥面积:"+szhui+"圆柱面积:"+szhu+"球体积:"+vqiu+"圆锥体积:"+vzhui+"圆柱体积:"+vzhu;
    
    }
    

    (2)设计一个测试类,给出几个不同的圆柱体,圆锥体,球体的尺寸,用计算工具类分别求它们体积的累加和与表面积的累加和。
    输入半径,高度和母线长之后根据公式运算求出它们的体积表面积,再进行求和。
    (3)设计一个测试类,随机产生球,圆柱、圆锥体的尺寸,模拟考试,要求用户回答它们的体积和面积,并判断用户的回答是否正确
    用scanner 和nextInt()方法进行输入输出值

            Scanner w=new Scanner(System.in);
     			System.out.println("	请计算球的体积和表面积:");
     			double vqiu1=w.nextInt();
    	    double sqiu1=w.nextInt();
    

    用random方法求取随机值。

            System.out.println("半径:"+"r"+"高度:"+"h"+"母线:"+"l");
    	    Random rand=new Random();
    	    double r=rand.nextInt(100);
        double h=rand.nextInt(100);
    	    double l=rand.nextInt(100);
    

    使用if(){...;}else{}语句判断用户输入的值是否为计算值,然后进行输出计算出的正确值。不过,这个正确值的输出的不正确。
    (三)代码托管(务必链接到你的项目)。
    码云commit历史截图

    上传实验项目代码到码云,在码云项目中选择“统计-commits”,设置搜索时间段,搜索本周提交历史,并截图。
    http://git.oschina.net/hebau_cs15/java-cs02zt1

  • 相关阅读:
    人脸识别算法初次了解
    白话经典算法系列之二 直接插入排序的三种实现
    常见浏览器兼容性问题与解决方式
    MP3的频率、比特率、码率与音质的关系
    程序猿接私活经验总结,来自csdn论坛语录
    Java虚拟机工作原理具体解释
    簡單SQL存儲過程實例
    全栈JavaScript之路(七)学习 Comment 类型节点.
    strdup函数的使用方法
    POJ 2823 Sliding Window 【单调队列】
  • 原文地址:https://www.cnblogs.com/zhaotong189800/p/6673797.html
Copyright © 2011-2022 走看看