zoukankan      html  css  js  c++  java
  • 201521123076《java程序设计》第三周学习总结

    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?请分析原因?

    A1:在Test1getj(); System.out.println(i);这两条语句不能通过编译,因为在静态方法geti()中调用了非静态属性‘i’,调用类的方法的格式为类.方法。
    改正:Test1.getj(); 在geti()中实例化一个Test1的对象,用对象.i即可;
    如果创建3个Test1对象,内存中有3个i,1个j;原因:静态属性为类的属性,非静态属性为对象的属性,新建三个Test1对象,Test1类只初始化了一次。

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

    A2:构造函数对类进行初始化操作;编写格式为 pubilc ClassName(有参或无参){...};如果一个类不写构造函数,系统默认给它一个无参的构造函数;如果一个类中只有带参的构造函数,它就没有没有不带参数的默认构造函数。

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

    A3:会出现‘The constructor Math() is not visible’错误,即构造函数 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.
    	     */
    	    public static final double E = 2.7182818284590452354;
    	
    	    /**
    

    可以很清楚地看到’ Don't let anyone instantiate this class.’ 编写Math类的人不让我们实例化它。
    Math类中的方法都是静态方法,静态方法属于类,所以调用数学方法的时候直接用类.方法()即可,无需new一个对象来使用,而 ‘private Math() {}’的存在,也不让我们new;

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

    A4:重载即多个方法拥有相同的方法名但参数不同,可以是参数类型不同,参数个数不同,参数顺序不同。要注意的是,只有返回类型不同不能算是重载(编译不能通过)。下图为Math类max函数重载的例子,至于怎么区分?看其参数情况吧。

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

        final int[] NUMBS= {1,2,3,4,5};
        NUMBS[2] = 1; 
      

    A5:要注意,这里final修饰的是NUMBS这个数组对象,即这个对象的引用不能被修改,而非这个引用所指向的一系列值不能被修改。若:NUMBS = null;就会发生错误,它让被final修饰的NUMBS对象重新指向null,当然不行。

    • Q6.阅读代码EmployeeTest.java,回答:
      为什么其属性均为private?这样设计有什么好处?
      为Employee类增加一个无参构造函数,调用其有参构造函数,设置name为雇员1, salary为3000, hireDay的年月日为2017年3月5日。(粘贴代码)
      为Employee类再增加一个有参构造函数,参数只有name与salary,hideDay为当前日期。(粘贴代码)

    A6:属性设置为private的目的是为了不让其他人直接修改属性值,而只能通过封装类的人提供的方法进行操作,这样就对这些信息起到了保护效果。

    	public Employee()
    	{
    	    this("雇员1", 3000.0, 2017, 3, 10);   //name,salary,year,month,day; 
    	}
    
    
    	public Employee(String n, double s) {
    	    name = n;
    	    salary = s;
    	    Calendar  calendar = Calendar.getInstance();
    	    hireDay = calendar.getTime();
    	}  
    
    • Q7.编写函数public static boolean isMondayToFriday()

    功能:判断今天如果是周一到周五,直接输出如“上班时间”并返回true,否则输出“休息时间”。
    提示:使用LocalDateTime, DayOfWeek

    	public static boolean isMondayToFriday(){
    	        LocalDateTime now = LocalDateTime.now();  
    	        DayOfWeek week = now.getDayOfWeek();
    	        //System.out.println(week.getValue());
    	        if(week.getValue()>=1&&week.getValue()<=5){
    	        	 System.out.println("上班时间");
    	        	return true;
    	        }
    	        System.out.println("休息时间");
    	            return false;
    	    }  
    
    • Q8.Runnable Jar(可选)
      我们以前编写的程序,必须打开Eclipse或者将相应的.class文件拷贝出来在命令行下执行相应命令才能运行,如果.class文件较多且类文件中有包名,需要将完整的目录结构及文件拷贝出来,才能运行。现在希望将Eclipse项目中的Java文件打打成一个可运行的jar包,在命令行直接运行。改造题目7,使其从命令行接收参数,参数为年-月-日,将项目打成jar包,然后在命令行通过java -jar运行,并截图。

        	 public static boolean isMondayToFriday(){
        	        Scanner in = new Scanner(System.in);
        	        String now1 = in.nextLine();
        		String[] sourceStrArray = now1.split("-");
        	        int year = Integer.valueOf(sourceStrArray[0]);
        	        int month =  Integer.valueOf(sourceStrArray[1]);
        	        int day = Integer.valueOf(sourceStrArray[2]);
        	        LocalDateTime now = LocalDateTime.of(year,month,day,1,1);
        	        DayOfWeek week = now.getDayOfWeek();
        	        if(week.getValue()>=1&&week.getValue()<=5){		
        	        	 System.out.println("上班时间");
        	        	return true;
        	        }
        	        System.out.println("休息时间");
        	            return false;
        	    }  
      

    实验截图:

    3. 码云代码提交记录截图:

    4. PTA实验

    • 题目集:jmu-Java-03-面向对象1-基础-封装继承 中的编程(5-1, 5-2, 5-3)

      • 5.1 掌握了构造函数,Override Of toString(),创建对象数组。

      • 5.2 更进一步了解了类-对象之间的一些联系。static属性和静态块与初始化块的搭配使用来完成一些需求。如获悉已经实例化多少个对象(本题通过id的值来判断)。

      • 5.3 IDE的自动生成Getter,Setter,toString()为我们提供了极大的便利。

  • 相关阅读:
    反向代理实例
    nginx常用命令和配置
    nginx的安装
    Can Live View boot up images acquired from 64bit OS evidence?
    What is the behavior of lnk files?
    EnCase v7 search hits in compound files?
    How to search compound files
    iOS 8.3 JB ready
    Sunglasses
    现代福尔摩斯
  • 原文地址:https://www.cnblogs.com/slickghost/p/6534787.html
Copyright © 2011-2022 走看看