• Java第三次作业


    Java作业

    (一)学习总结

    1.什么是面向对象的封装性,Java中是如何实现封装性的?试举例说明。
    封装性是面向对象的一大特性,所谓的封装性就是指对外部不可见。
    实现封装:
    Private 属性类型 属性名称 进行封装,用set设置,用get获得。
    例如:

    private String year;
    	private String month;
    	private String day;
    	public Data(){}          //无参构造方法
    	public Data(String year,String month,String  day){
    		this.year=year;this.month=month;
    		this.day=day;
    	}
    	public String getYear(){
    		return year;
    	}
    	public void setYear(String year){
    		this.year=year;
    	}
    	public String getMonth(){
    		return month;
    	}
    	public void setMonth(String month){
    		this.month=month;
    	}
    	public String getDay(){
    		return day;
    	}
    	public void setDay(String day){
    		this.day=day;
    	}
    

    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++);
       
     }
    }
    

    不能编译,因为A类中的secret属性被private封装了,无法访问,需要用get方法获取。而且也不可以a.getSecret++,因为a.getSecre不是自变量
    可修改为

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

    (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为非静态变量,想要在method方法中进行静态应用x就必须把x设置为静变量,static int x = 50;

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

    class Book{
    	int bookId;
    	String bookName;
    	double price;   
    	static int number;                 // 声明静态变量
    	static{                            //定义静态代码块对静态变量初始化
    		number=1000;                   //代码块只能用一次
    	}
    	public Book(){                        //无参构造方法
        }
        public Book(int bookId,String bookName, double price){
        	this.bookId= bookId;
        	this.bookName=bookName;
        	this.price=price;
        	number++;
        }
        public int getBookId() {
            return bookId;
         }
         public void setBookIde(int bookId) {
             this.bookId = bookId;
          } 
         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 number;
         }
         public String toString(){
        	 return "编号,书名,书价分别为"+this.bookId+"	"+this.bookName+"	"+this.price;           //重写toString方法
         }
    }
    public class Test{
    	public static void main(String args[]){ 
    		Book[] books = {
                           new Book(29,"c语言程序设计",3),
      
                           new Book(25,"数据库原理",30),
     
                           new Book(58,"Java学习笔记",68)};
     
            System.out.println("图书总数为:"+ Book.totalBook());        //Book为类
    
            for(Book book:books){
        
            System.out.println(book.toString());
            }
        }   
    }
    

    4.什么是单例设计模式?它具有什么特点?用单例设计模式设计一个太阳类Sun。
    单例设计模式是一种常用的软件设计模式。在它的核心结构中包含一个被称为单例的特殊性类。通过单例模式可以保证体统中一个类只有一个实例。
    单例设计模式特点:1、确保只有一个实例。
    2、单例类必须自己创建自己的唯一实例。
    3、单例类必须给所有其他对象提供这一实例。

    public class Sun{
    	private Sun(){}
    	private static Sun a=null;    //静态方法
    	public static Sun getInstance(){
    		if(a==null){
    			a=new Sun();
    		}
    		return a;
    	}
    }
    

    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';
        }
    }
    

    运行结果为 “你好 Wolld”.原因为str传过去的只是内容,在change中的hello不会改变test中的str,所以输出的是你好。而数组作为参数传递的是地址,所以会更改为大写。

    (二)实验总结

    实验内容:

    1.按照下列要求完成类的设计
    (1)设计一个日期类,用于记录年、月、日,提供对日期处理的常用方法(日期输出格式xxxx-xx-xx)。

    (2)设计一个职工类,该职工类至少具有下面的属性:职工号,姓名,性别,生日,工作部门,参加工作时间,设计相应的方法。

    (3)设计一个部门类,包括下列属性:部门编号,部门名称,经理,设计相应方法。

    (4)设计一个测试类,采用对象数组模拟一个拥有两个部门,10个职工的单位,实现对相关信息的查询功能。
    2.设计一个计算工具类,
    要求:

    (1)为用户提供几个常见的几何体面积和体积的算法(如球的体积和表面积,圆柱体的体积和表面积,圆锥体的体积和表面积)(可以学习使用static关键字)

    (2)设计一个测试类,给出几个不同的圆柱体,圆锥体,球体的尺寸,用计算工具类分别求它们体积的累加和与表面积的累加和。

    (3)设计一个测试类,随机产生球,圆柱、圆锥体的尺寸,模拟考试,要求用户回答它们的体积和面积,并判断用户的回答是否正确

    3.用面向对象编程思想完成评分系统

    4.用面向对象编程思想编写猜拳游戏

    1.按照下列要求完成类的设计

    程序设计思路:职工类会调用到日期类,test类中用户进行查询,可输入姓名,部门,或显示全部,对应的输出。

    问题1:Scanner处有错误

    原因:在Test类中没有写主函数

    解决方案:加上主函数
    2.设计一个计算工具类
    程序设计思路:在第一个类中设置两个属性分别为体积和面积,然后再写三个有参的构造函数,即为构造参数的重载。在第二个测试类中产生随机数作为参数传给第一个类,然后用用户输入的值与类中返回的值进行比较。
    问题1:用户输入的正确,而程序判断则为错误。

    原因:double类小数点后为数不确定,所以用户输入的与系统算出来的小数后有差别。

    解决方案:

     if((int)a1==(int)qiu.getV()){
    	    	System.out.println("用户你输入的体积正确");
    	    }
    

    3.用面向对象编程思想完成评分系统
    程序设计思路:在第一个类中设置编号,姓名,得分和最后得分,得分是一组数可以通过传递数组地址实现,test类中输出可以通过调用前面类中的toString()方法,和其他方法来实现。
    问题1:无法get获得数组。
    原因:int[]不可以转化为int。
    解决方案:

    public int[] getPscore(){
    		return pscore;
    	}
    

    (三)代码托管(务必链接到你的项目)
    https://git.oschina.net/hebau_cs15/java-cs01lxy.git
    码云commit历史截图

    上传实验项目代码到码云,在码云项目中选择“统计-commits”,设置搜索时间段,搜索本周提交历史,并截图。

    (四)学习进度条

    代码行数(新增/累积) 学习时间(新增/累积) 本周学习内容
    目标 5000行 300小时
    第2-4周 350/350 30/30 学习了scanner类还有随机数
    第5周 150 50/50 string类和构造方法的使用
    第6周 200 50/50 学习了封装,get set 方法,还有类与类之间的调用和连接
  • 相关阅读:
    MQTT Server搭建(apache-apollo)和MQtt Client搭建
    playbook 包含多个play
    ansible 批量重启服务
    无法执行 BACKUP LOG,因为当前没有数据库备份
    Microsoft.SqlServer.SmoExtended
    ACTIVEMQ主题、队列设置用户名密码
    Ansible的配置文件:
    MQTT协议之订阅及发布(使用paho-mqtt-client或mqttv3实现)
    采用基于MQTT的ActiveMQ实现消息推送
    ansible Introduction To Ad-Hoc Commands:
  • 原文地址:https://www.cnblogs.com/6770675746-yan/p/6671255.html
Copyright © 2020-2023  润新知