• 201521123113 《Java程序设计》第3周学习总结


    1. 本周学习总结

    2.书面作业

    Q1.代码阅读

    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?

    • 以上代码不可以通过编译。程序执行geti(),Test1getj()时会出错。
      因为i定义的是private,是非静态,而函数geti()则是static,静态不可以调用非静态的对象。
      可以把 System.out.println(i);改成Test1 t = new Test1(); System.out.println(t.i);
      Test1getj()不是已有的函数名,应该改成Test1.getj()。
    • 如果创建3个Test1对象,内存中会有3个i,1个j。因为j属于类而不属于对象,所以实例均共享一个j属性。

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

    • 作用:对类进行初始化操作。
      格式要求类名要与函数名相同,构造函数无返回类型(不是void)。
      一个类不写构造函数,系统默认有一个无参构造方法。
      一个类中只有带参的构造函数,因为系统只默认无参构造函数,所以没有不带参数的默认构造结构函数。

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

    Math的源代码为

      public final class Math {
    
        /**
         * Don't let anyone instantiate this class.
         */
        private Math() {}
    
        /**
         * The {@code double} value that is closer than any other to
         * <i>e</i>, the base of the natural logarithms.
         */
    
    • Don't let anyone instantiate this class可见,Math不允许任何人对其进行实例,它是属于整个类的,可以用Math.*方法来直接访问,也就不用new出一个实例对象来进行访问了。
      如果new Math(),eclipse会提示Math() is not visible错误。

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

    • 重载是指创建具有相同名称不同结果的方法。
      构造函数重载是指从一个构造函数调用另一个构造函数,即两个函数具有相同的函数名,但每一个构造函数必须有它自己唯一的参数列表。

      可以根据不同的输入参数区分不同的重载函数。

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

    final int[] NUMBS= {1,2,3,4,5};
    NUMBS[2] = 1;
    
    • final关键字是用来修饰引用类型变量,变量的值(引用)不能修改,但是变量指向的对象的值可以修改

    Q6.阅读代码EmployeeTest.java,回答:

    (1)为什么其属性均为private?这样设计有什么好处?

    • 因为用private修饰的变量外部函数无法访问,即不会被人从外部修改一些员工的信息。

    (2)为Employee类增加一个无参构造函数,调用其有参构造函数,设置name为雇员1, salary为3000, hireDay的年月日为2017年3月5日。(粘贴代码)

        public Employee(){
          name = "雇员1";
          salary = 3000;
          GregorianCalendar calendar = new GregorianCalendar(2017, 3, 5);
          hireDay = calendar.getTime();
    
    }
    

    (3)为Employee类再增加一个有参构造函数,参数只有name与salary,hideDay为当前日期。(粘贴代码)

        public Employee(String name, double salary){
               name = this.name;
               salary = this.salary;
               GregorianCalendar calendar = new GregorianCalendar(2017, 3, 11);
               hireDay = calendar.getTime();
       }
    

    Q7.编写函数public static boolean isMondayToFriday()

    功能:判断今天如果是周一到周五,直接输出如“上班时间”并返回true,否则输出“休息时间”。
    提示:使用LocalDateTime, DayOfWeek
    参考资料:
    JAVA 8:健壮、易用的时间-日期API - ImportNew.pdf
    Java8DateTimeTest.java

    import java.time.LocalDateTime;
    import java.time.DayOfWeek;
    import java.util.Scanner;
    
    public class Test{
    	public static boolean isMondayToFriday(int dat){
    		LocalDateTime now = LocalDateTime.now();
    		DayOfWeek dayOfWeek = now.getDayOfWeek();
    		int a = dat;
    		if(a>=1&&a<=5){
    			System.out.println("上班时间");
    			return true;
    		}
    		if(a==6||a==7) {
    			System.out.println("休息时间");
    			return false;
    		}
    	}
    	public static void main(String[] args) {
    		Scanner in = new Scanner(System.in);
    		int i = in.nextInt();
    		Test.isMondayToFriday(i);
    	}
    }
    

    码云代码提交记录

    pta实验总结

    • 熟悉和练习了构造函数的方法,以及setter、getter的使用。快捷键的使用能让写代码减少很多不必要浪费的时间。
      后两题暂时还未成功
  • 相关阅读:
    关联本地代码的方式 HTTPS和SSH---Gitee码云
    详解elementUI表单的验证规则---vue(基本用法)
    vscode 设置缩进 4
    vue的图片懒加载
    A complete log of this run can be found in问题解决
    简单直观的搞懂Vue3的ref、reactive、toRef、toRefs
    vue-cli3.0 引入外部字体并使用
    迅为与龙芯强强联合匠心之作iTOP-2K1000开发板正式发布
    迅为RK3399开发板外接固态硬盘测试
    迅为i.MX6Q开发板Ubuntu20.04 Can通信
  • 原文地址:https://www.cnblogs.com/leexd/p/6516457.html
Copyright © 2020-2023  润新知