• 第3周-面向对象基本概念


    1. 本周学习总结

    ——(初学面向对象,会学习到很多碎片化的概念与知识。尝试学会使用思维导图将这些碎片化的概念、知识组织起来。)
    答:

    2. 书面作业

    1)代码阅读

    public class Test1 {
        private int i = 1;//这行不能修改
        private static int j = 2;
    
        public static void main(String[] args) {
            geti();
            Test1getj();
        }
    
        public static void geti() {
            System.out.println(i);
        }
    
        public static void getj() {
            System.out.println(j);
        }
    
    }
    
    以上代码可否编译通过?哪里会出错?为什么?尝试改正?
    如果创建3个Test1对象,有内存中有几个i,几个j?
    
    答:①  以上代码不能通过编译。如图所示:
    


    "Test1getj();"与"System.out.println(i);" 错误皆是因为静态方法不能调用非静态属性。
    分别改为"Test1.getj();"与"Test1 test= new Test1(); System.out.println(test.i);" , 即创建自身的对象(格式可使用:类名.方法名)。
    ② 如果创建3个Test1对象,内存中有三个i,一个j;原因:i是非static属性,每个对象都对应一个存储空间;j是static属性,不会让个别对象拥有,而是属于类。

    2)构造函数有什么用?其编写格式是什么?如果一个类不写构造函数,它有构造函数吗?如果一个类中只有带参的构造函数,它有没有不带参数的默认构造函数?

    答:(1)作用:对对象的属性(类)进行初始化操作;
        (2)编写格式:
    例如:
    
    public class Some {
        public Some () {
            ...
        }
        public Some (int a) {
            ...
        }
        ......
    }
    
        (3)如果一个类不写构造函数,它有默认的构造函数;此构造函数无参数且内容为空。
        (4)如果一个类中只有带参的构造函数,它没有不带参数的默认构造函数;自行撰写了构造函数的话,编译程序只运用你所撰写的构造函数。
    

    3)使用java.lang.Math类的函数时,为什么不需要new?如果new Math()会产生什么错误?

    答:Math没有必要建立对象,不需要new,因为Math类里面的所有成员变量和成员方法都是静态的,无须创建自身对象。
    

        "new Math()"的错误“The constructor Math() is not visible”,无法引用。
    

    4)什么是重载?什么是构造函数重载?在java.lang.Math类中举出函数重载的例子?怎么才能区分两个重载函数?

    答:重载是方法重名但参数不同。
        构造函数调用另一构造函数是构造函数重载。
        在java.lang.Math类中的函数重载:(例如)
    

        区分:看构造函数中参数的个数与数据类型。
    

    5)final修饰的变量不能改变,为什么如下代码可以正常运行?

    final int[] NUMBS= {1,2,3,4,5};
    NUMBS[2] = 1;
    
    答:局部变量声明了 final,设值后不可变,指的是引用不可变,而引用指向的对象可以被改变。对象数据成员被声明为 final,却并没有指定明确值(“final int[] NUMBS= {1,2,3,4,5};”),而“NUMBS[2] = 1;”则是对其明确指定值;所以可以正常运行。
    

    6)阅读代码EmployeeTest.java,回答:

    (1)为什么其属性均为private?这样设计有什么好处?
    (2)为Employee类增加一个无参构造函数,调用其有参构造函数,设置name为雇员1, salary为3000, hireDay的年月日为2017年3月5日。(粘贴代码)
    (3)为Employee类再增加一个有参构造函数,参数只有name与salary,hideDay为当前日期。(粘贴代码)
    答:(1)将其属性设置为 paivate是为了防止类外部对其访问从而修改它。    好处:避免信息泄露。
        (2)
    
       public Employee() {
    	   this("雇员1", 3000, 2017, 3, 5);
       }
    
        (3)参考:
    

        代码:
    
       public Employee(String n, double s) {
    	   name = n;
    	   salary = s;
    	   Calendar time = Calendar.getInstance();
    	   hireDay = time.getTime();
       }
    

    7)编写函数public static boolean isMondayToFriday()

    功能:判断今天如果是周一到周五,直接输出如“上班时间”并返回true,否则输出“休息时间”。
    提示:使用LocalDateTime, DayOfWeek
    参考资料:
    JAVA 8:健壮、易用的时间-日期API - ImportNew.pdf
    Java8DateTimeTest.java
    
    答:代码如下
    
    
    import java.time.DayOfWeek;
    import java.time.LocalDateTime;
    
    public class Zy {
    	public static boolean isMondayToFriday() {
    		LocalDateTime now = LocalDateTime.now();
    		DayOfWeek dayOfWeek = now.getDayOfWeek();
    		System.out.println(dayOfWeek);
    		if(dayOfWeek!=DayOfWeek.SATURDAY && dayOfWeek!=DayOfWeek.SUNDAY) {
    			System.out.println("上班时间");
    			return true;
    		}
    		else {
    			System.out.println("休息时间");
    			return false;
    		}
    	}
    	public static void main(String[] args) {
    		System.out.println(Zy.isMondayToFriday());
    	}
    }
    

    运行结果

    3. 码云代码提交记录 (在码云的项目中,依次选择“统计-Commits历史-设置时间段”, 然后搜索并截图)

    4. PTA实验——实验总结

    答:总是出现这样类似的错误:
    

        本次错误原因,建立对象调用了静态id。
    

    这次实验主要考察private,static,构造函数,(静态)初始化块等本周学习的内容,让我们更加深刻的体会和感受新知识并加以理解。

  • 相关阅读:
    20145215《信息安全系统设计基础》第三周学习总结
    20145215《信息安全系统设计基础》第二周学习总结
    Ubuntu下git的安装与使用
    20145215《信息安全系统设计基础》第一周学习总结
    20145215《信息安全系统设计基础》第0周学习总结
    第一周Web类WriteUp
    20145215《Java程序设计》课程总结
    20145215《Java程序设计》第10周学习总结
    python字符串基本方法
    python数据类型
  • 原文地址:https://www.cnblogs.com/whting/p/6512070.html
Copyright © 2020-2023  润新知