day08 面向对象编程

1、this关键字

 this 表示当前对象, 2种用法
    1) this.xxx, this.yyy() 访问对象的成员, 包括属性和方法
    2) this(...) 连环调用其他构造器
        注意:
            1.使用this()必须放在构造器的首行!
            2.使用this调用本类中其他的构造器,保证至少有一个构造器是不用this的。

  如果在构造器中, this代表正在创建的对象
  如果在普通方法中, this表示此方法的调用者对象.

2、JeanBean

JavaBean 是用java 语言写的可重用组件
        1) 类是公共的 : 大家都能用
        2) 有公共无参构造器 : 创建对象简单
        3) 有属性, 并有get/set : 让一个对象携带大量的数据.

3、构造器

无参构造器:  简单, 功能弱, 所有创建出来的对象是千篇一律, 千人一面.
                      更重要, javabean规范中要求必须要有无参构造器, 子类构造器默认调用父类无参, 反射时创建对象时方便, 反序列化时也方便.

全参构造器:复杂, 功能强大,对象属性可以一步到位

 注意:
     1)Java语言中,每个类都至少有一个构造器
     2)默认构造器的修饰符与所属类的修饰符一致
     3)一旦显式定义了构造器,则系统不再提供默认构造器
     4)一个类可以创建多个重载的构造器
     5)父类的构造器不可被子类继承

4、package 关键字

使用格式
1)package语句必须放在最上面, 把源文件 中的所有类编成的class文件放入指定的包目录结构
2)package 包名.子包名.子子包名.子子子包名;
3)package 机构类型.机构名称.项目名称.模块名称;
             如,package com.atguigu.javase.javabean;

一个类一旦有包的限制, 它的使用就变得麻烦
 如果在其他包中使用当前类时, 必须使用当前类的全限定名称: 包名.子包名.子子包名.子子子包名.类名;
 简单类名 : 没有包名的类名

package的作用就是方便管理类, 另一方面也可以解决类名冲突问题.

5、import关键字

import语句告诉编译器到哪里去寻找类。
语法格式: import  包名[.子包名…]. <类名 |*>

 import的作用是导入类, 导入的是其他包中的类
 import 全限定类名;
 在本文件中就不可以不用再使用全限定

6、对象创建的过程

1) 在永久区中检查要创建的对象的所属的类是否已经加载
2) 如果不存在, 由类加载器(ClassLoader)来负责加载类模板
3) 如果存在, 则不加载, 保证类模板只有一份
4) 依据类模板中的所有的属性的定义在GC区中开辟一块内存空间
5) JVM再把此空间全部写0, 结果就是所有属性自动拥有了缺省值0
6) 执行显式赋值
7) 执行构造方法
8) 返回对象首地址

图示

 7、引用数组

示例代码

package com.atguigu.javase.javabean;

public class Phone {
    private String os;
    private  double screen;
    private  int memory;

    public Phone(){
        this("安卓",6.2,8);
    }

    public Phone(String os, double screen, int memory){
        this.os = os;
        this.screen = screen;
        this.memory = memory;
    }

    public void setOs(String os) {
        this.os = os;
    }
    public String getOs(){
        return os;
    }

    public void setMemory(int memory) {
        this.memory = memory;
    }

    public int getMemory(){
        return memory;
    }

    public void setScreen(double screen) {
        this.screen = screen;
    }

    public double getScreen(){
        return screen;
    }

    public String say(){
        return "操纵系统:"+os+",屏幕大小:"+screen+",内存:"+memory;
    }
}
package com.atguigu.javase.javabean;

import com.atguigu.javase.javabean.Phone;

public class Student {

    private int id;
    private String name;
    private int grade;
    private double score;

    public Student(){
        this(1,"小张",2,60);
    }

    public Student(int id,String name,int grade,double score){
        this.id = id;
        this.name = name;
        this.grade = grade;
        this.score = score;
    }


    public void setId(int id){
        this.id = id;
    }

    public int getId(){
        return id;
    }

    public void setName(String name){
        this.name = name;
    }

    public void setGrade(int grade){
        this.grade = grade;
    }

    public int getGrade() {
        return grade;
    }

    public  void setScore(double score){
        this.score = score;
    }

    public double getScore(){
        return score;
    }

    public String wangzhe(Phone ph){
        return name+"在使用手机["+ph.say()+"]玩游戏";
    }
    public void eat(String some){
        System.out.println(name+"正在吃"+some);
    }
    public String say(){
        return "学号:"+id+", 姓名:"+name+",年级"+grade+",成绩"+score;
    }
}
package com.atguigu.javase.test;

import com.atguigu.javase.javabean.Phone;
import com.atguigu.javase.javabean.Student;
import com.sun.media.sound.RIFFInvalidDataException;

public class StudentTest {
    public static void main(String[] args) {
        Student[] stuArr  = new Student[10]; //这是学生数组对象 空抽屉
        String[] name1 = {"李","张","王","赵","孙", "刘", "杨"};//产生随机姓名
        String[] name2 = {"伟", "雪", "明", "丽", "琳", "芳", "妮", "媛"};
        for (int i = 0; i < stuArr.length; i++) {//创建学生对象 往抽屉里放东西
            int id = 1+i;
            int index1 = (int)(Math.random() * 1000) % name1.length;
            int index2 = (int)(Math.random() * 1000) % name2.length;
            String name = name1[index1] + name2[index2];
            int grade = (int)(Math.random()*6+1);
            double score = (int)(Math.random()*100+1);
            stuArr[i] = new Student(id,name,grade,score);
        }
        //遍历
        for (int i = 0; i < stuArr.length; i++) {
            System.out.println(stuArr[i].say());
        }
        System.out.println();
        //找三年级最牛
        Student maxStudent3 = null;
        for (int i = 0; i < stuArr.length; i++) {
            if (stuArr[i].getGrade() == 3) {
                if (maxStudent3 == null) {
                    maxStudent3 = stuArr[i];
                }else{
                    if (stuArr[i].getScore() > maxStudent3.getScore()) {
                        maxStudent3 = stuArr[i];
                    }
                }
            }
        }
        if(maxStudent3 == null){
            System.out.println("没有三年级学生");
        }else {
            System.out.println("三年级最牛:"+maxStudent3.say());
        }

        
    }
    
    
    public static void main6(String[] args) {找三年级最高分
        Student[] stuArr  = new Student[10]; //这是学生数组对象 空抽屉
        String[] name1 = {"李","张","王","赵","孙", "刘", "杨"};//产生随机姓名
        String[] name2 = {"伟", "雪", "明", "丽", "琳", "芳", "妮", "媛"};
        for (int i = 0; i < stuArr.length; i++) {//创建学生对象 往抽屉里放东西
            int id = 1+i;
            int index1 = (int)(Math.random() * 1000) % name1.length;
            int index2 = (int)(Math.random() * 1000) % name2.length;
            String name = name1[index1] + name2[index2];
            int grade = (int)(Math.random()*6+1);
            double score = (int)(Math.random()*100+1);
            stuArr[i] = new Student(id,name,grade,score);
        }
        //遍历
        for (int i = 0; i < stuArr.length; i++) {
            System.out.println(stuArr[i].say());
        }
        System.out.println();

        //找三年级最高分
        double maxScore3 = 0x8000_0000;//maxScore3 = -1就好
        for (int i = 0; i < stuArr.length; i++) {
            if(stuArr[i].getGrade() == 3){
                if (stuArr[i].getScore() > maxScore3) {
                    maxScore3 = stuArr[i].getScore();
                }
            }
        }
        if (maxScore3 == 0x8000_0000) {
            System.out.println("没有三年级的学生");
        }else{
            System.out.println("三年级最高分:"+maxScore3);
        }
    }
    
    
    public static void main5(String[] args) { //找出最差的学生
        Student[] stuArr  = new Student[10]; //这是学生数组对象 空抽屉
        String[] name1 = {"李","张","王","赵","孙", "刘", "杨"};//产生随机姓名
        String[] name2 = {"伟", "雪", "明", "丽", "琳", "芳", "妮", "媛"};
        for (int i = 0; i < stuArr.length; i++) {//创建学生对象 往抽屉里放东西
            int id = 1+i;
            int index1 = (int)(Math.random() * 1000) % name1.length;
            int index2 = (int)(Math.random() * 1000) % name2.length;
            String name = name1[index1] + name2[index2];
            int grade = (int)(Math.random()*6+1);
            double score = (int)(Math.random()*100+1);
            stuArr[i] = new Student(id,name,grade,score);
        }
        //遍历
        for (int i = 0; i < stuArr.length; i++) {
            System.out.println(stuArr[i].say());
        }
        System.out.println();

        //找出最差的学生
        Student minStudent = stuArr[0];//引用对象 假设第一个是最差的
        for (int i = 0; i < stuArr.length; i++) {
            if(stuArr[i].getScore() < minStudent.getScore()){//比较的是对象的成绩
                minStudent = stuArr[i];
            }
        }
        System.out.println("最菜:"+minStudent.say());
    }
    
    
    public static void main4(String[] args) { //找全校最高分
        Student[] stuArr = new Student[10]; //这是学生数组对象 空抽屉
        String[] name1 = {"李","张","王","赵","孙", "刘", "杨"};//产生随机姓名
        String[] name2 = {"伟", "刚", "明", "丽", "琳", "芳", "妮", "媛"};
        for (int i = 0; i < stuArr.length; i++) {//创建学生对象 往抽屉里放东西
            int id = 1+i;
            int index1 = (int)(Math.random() * 1000) % name1.length;
            int index2 = (int)(Math.random() * 1000) % name2.length;
            String name = name1[index1] + name2[index2];
            int grade = (int)(Math.random()*6+1);
            double score = (int)(Math.random()*100+1);
            stuArr[i] = new Student(id,name,grade,score);
        }
        //遍历
        for (int i = 0; i < stuArr.length; i++) {
            System.out.println(stuArr[i].say());
        }

        //找全校最高分
        double  minScore = stuArr[0].getScore();
        double  maxScore = stuArr[0].getScore();
        for (int i = 0; i < stuArr.length; i++) {
            if (stuArr[i].getScore() > maxScore) {
                maxScore = stuArr[i].getScore();

            }
            if (stuArr[i].getScore() < minScore) {
                minScore = stuArr[i].getScore();
            }
        }
        System.out.println("全校最高分:"+maxScore);
        System.out.println("全校最低分:"+minScore);
    }

    public static void main3(String[] args) {//求有条件的平均值  3年级平均分
        Student[] stuArr = new Student[10]; //这是学生数组对象 空抽屉
        String[] name1 = {"李","张","王","赵","孙", "刘", "杨"};//产生随机姓名
        String[] name2 = {"伟", "刚", "明", "丽", "琳", "芳", "妮", "媛"};
        for (int i = 0; i < stuArr.length; i++) {//创建学生对象 往抽屉里放东西
            int id = 1+i;
            int index1 = (int)(Math.random() * 1000) % name1.length;
            int index2 = (int)(Math.random() * 1000) % name2.length;
            String name = name1[index1] + name2[index2];
            int grade = (int)(Math.random()*6+1);
            double score = (int)(Math.random()*100+1);
            stuArr[i] = new Student(id,name,grade,score);
        }
        //遍历
        for (int i = 0; i < stuArr.length; i++) {
            System.out.println(stuArr[i].say());
        }

        //求平均分
        double sum = 0;
        for (int i = 0; i < stuArr.length; i++) {
            sum += stuArr[i].getScore();
        }
        double avg = sum / stuArr.length;
        System.out.println("全校平均分="+avg);

        //求有条件的平均值  3年级平均分
        double sum3 = 0;
        int count3 = 0;
        for (int i = 0; i < stuArr.length; i++) {
            if (stuArr[i].getGrade()== 3) {
                sum3 += stuArr[i].getScore();
                count3 ++;
            }
        }
        if(count3 == 0){
            System.out.println("没有三年级学生");
        }else{
            double avg3 = sum3 / count3;
            System.out.println("三年级学生的平均成绩:"+String.format("%.2f",avg3));//String.format("%.2f",avg3)  保留两位小数
        }
    }
    
    
    public static void main2(String[] args) {

        Student[] stuArr = new Student[10];//这是学生数组对象 空抽屉
        String[] name1 = {"李","张","王","赵","孙", "刘", "杨"};//产生随机姓名
        String[] name2 = {"伟", "刚", "明", "丽", "琳", "芳", "妮", "媛"};
        for (int i = 0; i < stuArr.length; i++) {//创建学生对象 往抽屉里放东西
            int id = 1+i;
            int index1 = (int)(Math.random() * 1000) % name1.length;
            int index2 = (int)(Math.random() * 1000) % name2.length;
            String name = name1[index1] + name2[index2];
            int grade = (int)(Math.random()*6+1);
            double score = (int)(Math.random()*100+1);
            stuArr[i] = new Student(id,name,grade,score);
        }
        //遍历
        for (int i = 0; i < stuArr.length; i++) {
                System.out.println(stuArr[i].say());
        }
        System.out.println("-----------------------------------------");
        for (int i = 0; i < stuArr.length; i++) {
            if(stuArr[i].getGrade() == 3){
                System.out.println(stuArr[i].say());
            }
        }


    }
    public static void main1(String[] args) {
        Student s1 = new Student();//挎包使用必须全限定
        System.out.println(s1.say());

        Phone p1 = new Phone();
        System.out.println(s1.wangzhe(p1));


        Student s2 = new Student(3,"小王",5,99);
        System.out.println(s2.say());
    }
}

总结

今天的学习内容

1)JavaBean

2)package、import关键字

3)引用对象之间的相互调用

4)创建对象的过程

5)引用数组

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值