zoukankan      html  css  js  c++  java
  • 《Java技术》第三次作业

    Java第三次作业


    一 . 学习总结

    1.面向对象的封装性,Java中实现封装性方法

    • 面向对象的封装性:
      就是保护对象的某些内容,保证某些属性或方法不被外部看见。
    • 封装的实现 :
      为属性封装 : private 属性类型 属性名称;
      为方法封装:private 方法返回值 方法名称(参数列表)
      注意:封装后的内容外部无法调用,需要编写setter与getter方法完成调用。
    • 实例 :
            class Personal{
            private String name;		//声明姓名属性
            private int age;			//声明年龄属性
            public void setName(String n){ //setter设置姓名属性
    	        name = n;
            }
            public void setAge(int a){ //setter设置年龄属性
    	        if(a>=0 && a<=150){
    		        age = a;
    	        }
            }
            public String getName(){ //getter取得属性
    	        return name;
    	    }
    	    public int getAge(){ //getter取得属性
        	    return age;
            }
    	    public void tell(){ 
    	        System.out.println("name is :" + name + ", age is :" + age);
    	        //System.out.println("name is :" + this.getName() + ", age is :" + this.getAge());
    	    }
        }
        public class EncDemo02 {
            public static void main(String args[]){
        	    Personal per = new Personal();	//声明并实例化对象
        	    per.setName("zhaojianyu");	//调用setter设置姓名
        	    per.setAge(21);				//调用setter设置年龄
        	    per.tell();
    	    }
        }
    

    2.static关键字

    • (1) static 关键字的调用
    • 用private对属性进行封装时,需要使用setter,getter方法进行调用,但是此程序只需要把private修改为static就可以进行++运算,static类型的属性是所有对象共享的。
    • 修改后代码 :
            class test {
                static int secret = 5;
            }
            public class Test {
                public static void main(String args[]) {
    	            test a = new test();
    	            System.out.println(a.secret++);
                }
            }
    
    • (2) static 关键字的静态引用
    • 当声明X变量时,应该定义为static类型,static只能调用static内容。
    • 修改后代码 :
        public class Test{
            static int x = 50;
            static int y = 200;
            public static void method(){
                System.out.println(x+y);
            }
            public static void main(String args[]){
                excise.method();
            }
        }
    

    3.Book类

    • 修改后代码 :

          class Book {
          //对属性进行封装
          private int bookId;
          private String bookName;
          private double price;
      
          // 声明静态变量
          private static int bookNum;
      
          // 定义静态代码块对静态变量初始化,只执行一次
          static {
              bookNum = 1000;
          }
      
          // 构造方法
          public Book() {//无参方法
      
          }
      
          public Book(String bookName,double price) {
              this.bookName = bookName;
              this.price = price;
              bookId = bookNum;
              bookNum++;
          }
      
          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(){
              int bookSum = bookNum - 1000;
              return bookSum;
          }
      
          // 重写toString方法
          public String toString(){
              return "图书编号 : " + bookId + "  " + "图书名称 : " 
          + 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.单例设计模式的含义与特点

    • 含义 :
      单例模式是一种常用的软件设计模式,在它的核心结构中只包含一个被称为单例的特殊类。
    • 特点 :
      1.某个类只能有一个实例
      2.它必须自行创建这个实例
      3.它必须自行向整个系统提供这个实例
    • 实例 :
    • 第一种方式 : 饿汉式单例类
            public class Sun {
                private Sun(){}
            //注意这是private 只供内部调用
            private static Sun instance = new Sun();
            //这里提供了一个供外部访问本class的静态方法,可以直接访问  
            public static Sun getInstance() {
                return instance;   
                } 
            } 
        
    > * 第二种方式 : 懒汉式单例类
    
    
                public class Sun { 
                private static Sun instance = null;
                public static synchronized Sun getInstance() {
                //这个方法比上面有所改进,不用每次都进行生成对象,第一次调用时初始Sun,以后就不用再生成了   
                //使用时生成实例,提高了效率
                if (instance == null)
                    instance = new Sun();
                    return instance;   
                    } 
                } 
    

    5.Java参数传递机制

    • 运行结果 :
      你好 Wolld
    • 运行结果原因 :

    栈与堆的关系:

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

    6.其他知识总结

    • 简单类设计的步骤:
    • 首先,建立简单的程序框架,也就是你需要写几个类来完成你的程序
    • 其次,为你创建的每个类声明相应的属性,并未其调用setter与gstter方法
    • 接着,构造无参方法,有参方法,参数为你创建的属性,为其赋值,用this关键字
    • 然后,写出toString()方法,对属性值进行输出
    • 最后,在主方法中,构造对象,利用对象,有逻辑的调用你的类中的方法,从而完成程序的要求
    • 重要的是 : 遇见困难不要马上去问别人,自己缕清思路再进行修改

    二 . 实验总结

    1.日期类,部门类,员工类,测试类

    • 程序设计思路:
      按照要求创建四个类,每个类声明相应的属性并封装,再进行setter与gstter方法的调用,创建无参构造方法,再创建有参构造方法,最后用toString()方法进行输出属性值。在类与类之间有相应的联系,进行关联操作,最后在测试类里进行构造对象数组,对象调用方法,进行测试与输出信息。

    • 问题1:
      在测试类进行创建员工类对象数组时,忘记在部门类对员工类对象数组进行关联

    • 原因:没有真正明白类之间的关系与如何创建关联

    • 解决方案:
      在部门创建员工类对象数组,接着调用setter与gstter方法,在主方法进行实例化

           //在部门类创建对象数组
           private Employee emps[];
           public Employee[] getEmps() {
               return emps;
           }
           public void setEmps(Employee[] emps) {
               this.emps = emps;
           }
           //主方法进行实例化
           Employee[] emps = { new Employee(此处加入员工信息,与在员工类创建的有参构造方法一样的参数),
       		new Employee(),
       		new Employee(),
       		new Employee(),
       		new Employee(),};
      

    2.计算工具类,测试类1,测试类2

    • 程序设计思路:
      按照创建三个类,在计算工具类声明相应的属性并调用setter与gstter方法,创建无参与有参构造方法,在测试类中调用计算工具类的方法实现要求

    • 问题1:
      在测试类2中,声明用户,对其计算结果进行判断,用户分别计算六个题输入答案,不知如何进行简单的判断,出现了重复语句多次

    • 原因:
      搞不清自己想要怎么判断,思路不清晰

    • 解决方案:
      把用户的答案放入数组,把你计算的答案放入数组,利用循环进行判断,就可以不重复输出

               //对数组进行动态实例化
               double[] m = new double[6];
               double[] s = new double[6];
               //对用户答案分别进行判断
               for (int i = 0; i < 6; i++) {
       	        if (s[i] == m[i]) {
       		        System.out.println("恭喜您第" + (i+1) +                                              "题答对啦~~~~~~");
       	        } else {
       		        System.out.println("很遗憾您第" + (i+1) +                                            "题答错了~~~~~~");
       	        }
               }
      

    3.面向对象的评分系统

    • 程序设计思路:
      创建两个类,选手类与测试类,声明相应的属性并调用setter与gstter方法,创建无参与有参构造方法,按照要求完成输出信息

    • 问题1:
      开始不知道如何使用Comparable接口的compareTo方法

    • 原因:
      没有研究明白两个对象比较的关系

    • 解决方案:
      看书对例子进行研究后明白了如何使用,代码如下 :

           public int compareTo(Player a) {
           if (this.pgrade > a.pgrade) {
       	    return 1;
           } else if (this.pgrade < a.pgrade) {
       	    return -1;
           } else {
       	    return 0;
           }
      

    4.猜拳游戏

    • 程序设计思路:
      创建了三个类,电脑游戏者类,个人游戏者类,还有测试类,在测试进行对游戏的控制

    • 问题1:
      计算每个人赢的次数时,比较的是电脑类与个人类的出拳结果

    • 原因:
      这两个类的结果返回值类型是void,所以在主方法中无法判断两者是否相等,以至于无法计算

    • 解决方案:

               //ComputerPlayer类
               public String gameBagin() {
                   //代码段
       	        return str;//这里的str是出拳结果
           	}
      
      
               //PersonPlayer类
               public String gameBagin() {
                   //代码段
       	        return str;//这里的str是出拳结果
           	}
           	
               在主方法中,创建电脑类与个人类的对象,调用各自的出拳方法,并赋值给两个字符串,进行判断
      

    三 .代码托管

    • 码云commit历史截图


    四 .学习进度条

    进程 代码行数(新增/累积) 学习时间(新增/累积) 本周学习内容
    目标 5000行 300小时
    第2-4周 500/500 45/45 自学了前四章的内容,自己练习了学习过程中的所有代码,并写了一些练习题提交到了码云中
    第5周 200/700 15/55 学习了老师要求的内容
    第6周 300/1000 15/70 学习了作业中要求的内容

  • 相关阅读:
    洛谷-P2430 严酷的训练
    Hackthebox网络不稳定的解决方案
    解压
    谷歌地图API密钥未授权利用
    关于读取heapdump踩的一个小坑
    RECON
    最近思考
    go get
    Js跳转
    Session
  • 原文地址:https://www.cnblogs.com/Melody-529/p/6654465.html
Copyright © 2011-2022 走看看