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

     
    答:(1)不能通过编译,有两处错误,第一是Test1getj(),代码中并无次方法,第二是public static void geti()这个方法,因为i不是静态变量,系统会报 错(j的定义是private static int j = 2,是静态变量,所以public static void getj()可通过)
    (2)第一个错误修改,可以建立先关方法private static void Test1getj(),第二个错误可以把public static void geti()改为public void geti()
    (3)会有3个i,1个j,因为i不是静态变量,每个对象都有其i值,但j不同,j是静态变量,不属于任何一个独立的对象,所以j只有1个


    Q2.构造函数有什么用?其编写格式是什么?如果一个类不写构造函数,它有构造函数吗?如果一个类中只有带参的构造函数,它有没有不带参数的默认构造函数?
     
    答:(1)构造函数可以简单使用函数,得到我们所需的数据,例如求圆的周长或是面积,直接调用函数得出,不需要在代码中重复书写圆的周长和面积的公式,节约成本
    (2)编写格式是private/public void/类型(int,String等等) 方法名{}
    (3)有,系统默认有一个无参构造函数;若是只有带参函数,需要自己构建,系统只默认有无参构造函数


    Q3.使用java.lang.Math类的函数时,为什么不需要new?如果new Math()会产生什么错误?分析原因?
     
    答:(1)因为用new创建的对象,都有其内部状态,且属性各不相同,而Math类,没有什么每个对象各异的内部状态

    (2)Math源代码:
    
    public final class Math {
    
        /**
         * Don't let anyone instantiate this class.
         */
    }
    表示不要让此类实际化,若使用new,显示错误The constructor Math() is not visible,构造函数math()是不可见的
    

    **Q4.什么是重载?什么是构造函数重载?在java.lang.Math类中举出1个函数重载的例子?怎么才能区分两个重载函数?**   `答:(1)重载是相同的名称` `(2)构造函数重载是多个方法有相同的名称,但方法的参数不同` `(3)例如max函数,max(double a, double b), max(int a, int b),max(float a, float b) ,max(long a, long b) ,区别函数的方法是参数的不同,例如输入5和6两个整数,此时会先搜索方法名相同的函数,然后根据参数的不同,选择对应的函数使用,max(int a, int b)`
    **Q5.final修饰的变量不能改变,为什么如下代码可以正常运行?** ``` final int[] NUMBS= {1,2,3,4,5}; NUMBS[2] = 1; ```   `答:final修饰的是引用型变量,指的是所指向的变量不变(也可以说是地址不变),但对象的值可以改变,所以代码不报错,例如final int id,这样的话,在id初次赋值后,id就不能指向其它的int对象,不能被改变,但是,id的值可以改变,fanal不变的是指向的对象,并非对象的值,当id的值改变时,并不是将id指向等值的对象,而是直接改变id的值`
    **Q6.阅读代码EmployeeTest.java,回答: 为什么其属性均为private?这样设计有什么好处? 为Employee类增加一个无参构造函数,调用其有参构造函数,设置name为雇员1, salary为3000, hireDay的年月日为2017年3月5日。(粘贴代码) 为Employee类再增加一个有参构造函数,参数只有name与salary,hideDay为当前日期。(粘贴代码)**   `答:(1)本代码创建了3个独立的对象,如果不使用pravate的话,其属性将会随输入值的不同而改变(外部操作),导致对象的属性发生错误,用private,只对起内部的改变而改变(内部操作),使得独立对象各自的属性不变` ``` (2) public Employee() { name="雇员1"; salary = 3000; GregorianCalendar calendar = new GregorianCalendar(2017, 3, 5); // GregorianCalendar uses 0 for January hireDay = calendar.getTime(); }

    (3)
    public Employee(String n, double s)
    {
    name="雇员2";
    salary = 3000;
    Calendar Day=Calendar.getInstance();
    Day.get(GregorianCalendar.YEAR);//得到当前年份
    Day.get(GregorianCalendar.MONTH);//得到当前月份
    Day.get(GregorianCalendar.DAY_OF_MONTH);//得到当前是几日
    Day.get(GregorianCalendar.HOUR);//得到当前是几时
    Day.get(GregorianCalendar.MINUTE);//得到当前是几分
    Day.get(GregorianCalendar.SECOND);//得到当前是几秒
    }

    <br>
    **Q7.编写函数public static boolean isMondayToFriday()
    功能:判断今天如果是周一到周五,直接输出如“上班时间”并返回true,否则输出“休息时间”。
    提示:使用LocalDateTime, DayOfWeek
    参考资料:
    JAVA 8:健壮、易用的时间-日期API - ImportNew.pdf
    Java8DateTimeTest.java**
    &nbsp;
    

    import java.time.LocalDateTime;
    import java.time.DayOfWeek;//引用的两个包
    public static boolean isMondayToFriday()
    {
    LocalDateTime now = LocalDateTime.now();
    DayOfWeek dayOfWeek = now.getDayOfWeek();
    if(dayOfWeek!=DayOfWeek.SATURDAY && dayOfWeek!=DayOfWeek.SUNDAY)
    {
    System.out.println("上班时间");
    return true;
    }
    else
    {
    System.out.println("休息时间");
    return false;
    }

    }

    <br>
    <br>
    #3. 码云代码提交记录
    ![](http://images2015.cnblogs.com/blog/1109821/201703/1109821-20170311144929076-646149103.png)
    <br>
    <br>
    #4. PTA实验实验总结
    &nbsp;
    `(1)主要是了解和掌握了创建类的方法,属性,方法,属性可以用public或private来定义,public可以直接从外部操作达到改变属性的效果,private只有从内部操作才行,但对于多个独立的对象,可以确保它们的属性不因外部操作而改变,方法主要是重载的用法,多个函数方法名相同,根据参数的不同而调用对应的函数,在Main()中调用时,跟Math一样,直接调用,但要注意参数,要根据自己所要调用的函数写进对应的参数,否则将调用错,达不到自己要的结果`
    &nbsp;
    `(2)与第一题的大部分类似,区别是id的不同,一开始,使用i来输入id的值,而非建立初始化块,导致错误,改进:多一个静态属性m,用以使id在每使用一次加一,再将值赋予id,用{}来建立初始化块(不能使用this,也没有参数),,再建立一个静态初始化块,主要功能输出This is static initialization block,静态初始化块的等级最高,会最先执行,也仅在类第一次加载执行,非静态初始化块和构造函数后执行,并且在每次生成对象时执行一次`
    &nbsp;
    `(3)类的建立,Rectangle和Circle,主要求周长和面积,主要注意的只有在求圆的周长和面积是,用Math.PI,此时返回int会报错,因为Math.PI不是int型,采用强制转换(int)解决。输出周长和面积的总和,只需将每个对象的周长和面积相加输出即可,在最后输出数组内容时,用Arrays.deepToString(数组名),可以将内嵌数组的内容一并输出`
  • 相关阅读:
    js事件绑定函数
    代码练习(二维数组的定义,字符串加减,子元素的创建及绑定,排序算法)
    网页中字符串元素的相减
    JavaScript算法实现排序
    学习英语很重要的一个点
    hasattr(),getattr(),setattr()的使用
    HDU 3746 Cyclic Nacklace
    HDU 1686 Oulipo
    HDU 1711 Number Sequence
    正则表达式的常用操作符
  • 原文地址:https://www.cnblogs.com/gemola/p/6523121.html
Copyright © 2020-2023  润新知