Day5

二维数组的声明格式:

​ 一维数组

int[];

二维数组

int[][];

二维数组的静态初始化

new int[][]{{1,2,3},{1,2,5}}

二维数组的静态初始化需要声明和初始化一起使用。例如

int[][] ints;
ints = {{1,2,3},{1,2,5}};//Array initializer is not allowed here

二维数组的动态初始化

new int[2][];
new int[][2];//不可以
new int[2][2];
//例如
arr = new int[2][];
arr2 = arr[0];
arr2 = {1,2,3};//错误写法
arr2 = new int[]{1,2,3,}//正确写法,声明和初始化需要一起。

对象与类

  • 成员变量描述属性。
  • 成员方法描述行为。
  • 成员变量可以不进行初始化,有默认值,参考数组。

类的包名+类名=类的全限定类名。

类加载

  • 类是我们自定义的数据类型,第一次运行需要加载到JVM内存当中。当这个对象被创建,JVM都把这个类的class加载到方法区。

成员变量通过this关键字来接收成员变量,这是一个隐藏的传参。

自己写了有参构造,最好还得提供无参构造。

构造器(constructor)

构造器的语法:[访问权限修饰符]该类的类名()

1.定义一个Student类:

a. 要求包含4个成员变量 String name, int age, boolean isMale, int sno

b. 分别定义5个构造方法

  分别为无参构造

 初始化name成员变量值的1参构造方法
 初始化name 和 sno两个成员变量值的2参构造方法
 初始化name,age,isMale三个成员变量值的3参构造方法
 初始化name,age, isMale,sno这4个成员变量值的4参构造方法

c. 在定义一个成员方法
public void print() {
System.out.println(name + "---" + age + "---" + (isMale ? "男" : "女") + "---" + sno);
}

  1. 在第一题的基础上,创建两个Student对象分别为stu1和stu2

    要求stu1对象的四个成员变量name, age, isMale, sno的值分别为“张三”,18,true, 1
    要求stu2对象的四个成员变量name, age, isMale, sno的值分别为“李四”,25,false, 2

    然后在两个对象上调用print()方法即

    stu1.print(), stu2.print(),两次调用方法输出的结果相同吗?

    为什么?(提示:在方法体中访问name成员变量,直接用成员变量名name,是this.name的简写形式)

package com.jiang.work.Day5;

/**
 * ============================
 * 一定要注意命名规则
 * 一定要注意命名规则
 * 一定要注意命名规则
 * ============================
 * TODO
 *
 * @author https://github.com/cqpsjsl
 * @version 1.0
 * @Description 1.定义一个Student类:     a. 要求包含4个成员变量 String name, int age, boolean isMale, int sno     b. 分别定义5个构造方法         分别为无参构造       初始化name成员变量值的1参构造方法      初始化name 和 sno两个成员变量值的2参构造方法      初始化name,age,isMale三个成员变量值的3参构造方法      初始化name,age, isMale,sno这4个成员变量值的4参构造方法     c. 在定义一个成员方法       public void print() {    	System.out.println(name + "---" + age + "---" + (isMale ? "男" : "女") + "---" + sno);      }
 * @date 2021/1/5 19:51
 */
public class Student {
    String name;
    int age;
    boolean isMale;
    int sno;

    public Student() {

    }

    public Student(String name) {
        this.name = name;
    }

    public Student(String name, int sno) {
        this.name = name;
        this.sno = sno;
    }

    public Student(String name, int age, boolean isMale) {
        this.name = name;
        this.age = age;
        this.isMale = isMale;
    }

    public Student(String name, int age, boolean isMale, int sno) {
        this.name = name;
        this.age = age;
        this.isMale = isMale;
        this.sno = sno;
    }

    public void print() {
        System.out.println(name + "-----" + age + "-----" + (isMale ? "男" : "女") + "------" + sno);
    }
}

package com.jiang.work.Day5;

/**
 * ============================
 * 一定要注意命名规则
 * 一定要注意命名规则
 * 一定要注意命名规则
 * ============================
 * TODO
 *
 * @author https://github.com/cqpsjsl
 * @version 1.0
 * @Description StudentPrint
 * @date 2021/1/5 20:01
 */
public class StudentPrint {
    public static void main(String[] args) {
        Student su1 = new Student("张三",18,true,1);
        Student su2 = new Student("李四",25,false,2);
        su1.print();
        su2.print();
    }
}

运行结果:

image-20210105203255479

  1. 在定义类MyStudent(类中定义的成员变量和成员方法同Student,
    同时在MyStudent类中定义和Student相似的5个构造方法)的基础上,
    根据需要修改MyStudent相应构造方法的方法体,要求实现

    MyStudent st = new MyStudent();
    st.print();

    这两句代码打印出的结果是 麻花疼---100---男---1000

package com.jiang.work.Day5;

/**
 * ============================
 * 一定要注意命名规则
 * 一定要注意命名规则
 * 一定要注意命名规则
 * ============================
 * TODO
 *
 * @author https://github.com/cqpsjsl
 * @version 1.0
 * @Description MyStudent
 * @date 2021/1/5 20:51
 */
public class MyStudent {
    String name;
    int age;
    boolean isMale;
    int sno;

    public MyStudent() {
        this("马化腾",100,true,1000);
    }

    public MyStudent(String name) {
        this.name = name;
    }

    public MyStudent(String name, int sno) {
        this.name = name;
        this.sno = sno;
    }

    public MyStudent(String name, int age, boolean isMale) {
        this.name = name;
        this.age = age;
        this.isMale = isMale;
    }

    public MyStudent(String name, int age, boolean isMale, int sno) {
        this.name = name;
        this.age = age;
        this.isMale = isMale;
        this.sno = sno;
    }

    public void print() {
        System.out.println(name + "-----" + age + "-----" + (isMale ? "男" : "女") + "------" + sno);
    }
}

package com.jiang.work.Day5;

/**
 * ============================
 * 一定要注意命名规则
 * 一定要注意命名规则
 * 一定要注意命名规则
 * ============================
 * TODO
 *
 * @author https://github.com/cqpsjsl
 * @version 1.0
 * @Description StudentPrint
 * @date 2021/1/5 20:01
 */
public class StudentPrint {
    public static void main(String[] args) {
        Student su1 = new Student("张三",18,true,1);
        Student su2 = new Student("李四",25,false,2);
        su1.print();
        su2.print();
    }
}

运行结果:

image-20210105205805547

  1. 如图所示,分别将一个double类型的数据和一个引用类型的数据传入某个方法,在方法内分别对对应的数据进行一些运算 ,经过运算之后,double类型的数据和引用类型的数据分别是什么? 并解释下,为什么 (图片见图4-1,图4-2)
package com.jiang.work.Day5;

/**
 * ============================
 * 一定要注意命名规则
 * 一定要注意命名规则
 * 一定要注意命名规则
 * ============================
 * TODO
 *
 * @author https://github.com/cqpsjsl
 * @version 1.0
 * @Description PerSon
 * @date 2021/1/5 20:16
 */
public class PerSon {
    String name;
    int age;
}

package com.jiang.work.Day5;

/**
 * ============================
 * 一定要注意命名规则
 * 一定要注意命名规则
 * 一定要注意命名规则
 * ============================
 * TODO
 *
 * @author https://github.com/cqpsjsl
 * @version 1.0
 * @Description 测试
 * @date 2021/1/5 9:15
 */

/**
 *
 *
 */
public class Test {
    public static void main(String[] args) {
        PerSon P = new PerSon();
        P.name = "我是马化腾";
        P.age = 50;
        PersonTest(P);
        double money = 100.00;
        doubleTest(money);
        System.out.println("方法执行后的money = " + money);
        System.out.println("方法执行后的name = " + P.name);
    }

    public static void doubleTest(double money) {
        money = 200.00;
    }

    public static void PersonTest(PerSon person) {
        System.out.println("传入PerSon的name = " + person.name);
        person.name ="我是马云";
        System.out.println("方法内重新赋值后的name = " + person.name);
    }
}

运行结果:

image-20210105205956001

引用数据类型是引用了对象的内存地址,所以改变成员变量的值,就是改变了。double是基本数据类型,并且是main函数里面的局部变量,随着方法入栈创建,方法出栈销毁,同理doubleTest方法入栈,声明的money是方法体内的局部变量,两者之间虽然名称相同,但并无关联。

  1. 定义一个表示学生信息的类Student,要求如下:

 (1)类Student的成员变量:
id表示学号;name表示姓名;gender表示性别;age表示年龄;java表示Java课程成绩。
(2) 在定义一个print()方法,输出student对象的 name,gender,age,java的值(即输出学生信息)
(3)根据类Student的定义,创建五个该类的对象,输出每个学生的信息,计算并输出这五个学生Java语言成绩的平均值,

   提示: 数组既可以存储基本数据类型的值,也可以存储引用数据类型的值
          因此,5个Student对象可以放在一个Student数组中
          Student[] students = new Student[5];
          students[1] = student对象的引用


//求平均值可以通过循环遍历 students数组来完成
package com.jiang.work.Day5;

/**
 * ============================
 * 一定要注意命名规则
 * 一定要注意命名规则
 * 一定要注意命名规则
 * ============================
 * TODO
 *
 * @author https://github.com/cqpsjsl
 * @version 1.0
 * @Description 1.定义一个Student类:     a. 要求包含4个成员变量 String name, int age, boolean isMale, int sno     b. 分别定义5个构造方法         分别为无参构造       初始化name成员变量值的1参构造方法      初始化name 和 sno两个成员变量值的2参构造方法      初始化name,age,isMale三个成员变量值的3参构造方法      初始化name,age, isMale,sno这4个成员变量值的4参构造方法     c. 在定义一个成员方法       public void print() {    	System.out.println(name + "---" + age + "---" + (isMale ? "男" : "女") + "---" + sno);      }
 * @date 2021/1/5 19:51
 */
public class Student {
    int id;
    String name;
    String gender;
    int age;
    double java;

    public Student() {

    }

    public Student(int id, String name, String gender, int age, double java) {
        this.id = id;
        this.name = name;
        this.gender = gender;
        this.age = age;
        this.java = java;
    }

    public void print() {
        System.out.println("学生" + name + "是" + gender + "的,他的年龄是" + age + "岁,他的Java课程成绩是" + java);
    }
}

package com.jiang.work.Day5;

/**
 * ============================
 * 一定要注意命名规则
 * 一定要注意命名规则
 * 一定要注意命名规则
 * ============================
 * TODO
 *
 * @author https://github.com/cqpsjsl
 * @version 1.0
 * @Description StudentPrint
 * @date 2021/1/5 20:01
 */
public class StudentPrint {
    public static void main(String[] args) {
/*        Student su1 = new Student(2001,"张三","男",18,92.0);
        Student su2 = new Student(2002,"张四","女",19,93.5);
        Student su3 = new Student(2003,"张五","男",13,90);
        Student su4 = new Student(2004,"张六","女",16,88);
        Student su5 = new Student(2005,"张七","男",18,99.75);
        su1.print();
        su2.print();
        su3.print();
        su4.print();
        su5.print();
        double average;
        average = (su1.java+su2.java+su3.java+su4.java+su5.java)/5;
        System.out.println("平均成绩是: " + average);*/
        Student[] students = new Student[5];
        students[0] = new Student(2001,"张三","男",18,92.0);
        students[1] = new Student(2002,"张四","女",19,93.5);
        students[2]= new Student(2003,"张五","男",13,90);
        students[3] = new Student(2004,"张六","女",16,88);
        students[4] = new Student(2005,"张七","男",18,99.75);
        //声明一个总成绩
        double sum = 0;
        double average=0;
        for (int i = 0; i < students.length; i++) {
            students[i].print();
            sum += students[i].java;
        }
        average=sum/5;
        System.out.println("平均成绩是: " + average);
    }
}

运行结果:

image-20210105213538988

posted @ 2021-01-05 22:35  多米_dmxq#top  阅读(159)  评论(0)    收藏  举报