21.8.9-Java中类、包、对象、属性、方法

1.创建类和对象

①.类的组成

[1]属性(对应程序中的数据)

通过程序中的各种数据类型,来描述一个类的『特征』

[2]行为(对应程序中的操作)

通过程序中的方法(也就是面向过程视角中的函数),来执行这个类的对象能够做的『动作』

②.声明一个空类

在这里插入图片描述

③.声明一个完整类(有属性和方法)

public class Person {

    //属性:若没有初始化,系统自动初始化为0
    int weight;

    //方法:public代表公共方法,任何地方都可被调用,int i是形式参数
    public void add(int i){
        weight+=i;
    }
    
    //不写修饰符默认是缺省的,类内和同包下类可以访问
    void say(){
        System.out.println("weight = " + weight);
    }

}

④.对上面的Person类测试调用

public class PersonTest {
    public static void main(String[] args) {
        //1.创建Person类型的变量,使用new关键字创建Person类的对象
        Person person = new Person();

        //2.调用Person对象的add()方法,传入5作为实参
        person.add(5);

        //3.调用Person对象的say()方法:让这个人说说他的体重
        person.say();

        //4.直接修改weight属性
        //在类之外的其他地方是否可以操作类的属性,取决于属性的修饰符
        person.weight = 20;
        person.say();
    }
}

2.包

①.包的作用

在这里插入图片描述

包最重要的作用:区分同名的类,将不同的类放在不同包下。

JDK自带一个类,如果我们再创建相同名字的类,就会冲突。如果没有包名,我们就没法区分两个类。

3.类中的属性

①声明属性的语法格式

修饰符 数据类型 属性名;

修饰符 数据类型 属性名 = 初始化值;

②初始化值

在这里插入图片描述

③权限修饰符

权限修饰符不仅对类的属性有要求,对类中的方法的要求是完全一样的:

修饰符名称含义本类同包其他类子类同工程其他类
private私有×××
default缺省××
protected受保护×
public公共

④属性名

属性也叫成员变量,所以属性名作为标识符适用变量的标识符规则和规范。

4.对象的内存分析

①类的实例化

Cat c = new Cat();

看见使用了new关键词,就表示在堆内存中一定开辟了新的空间,一定创建了新的对象。

②类的多个实例化

Cat c1 = new Cat();
Cat c2 = new Cat();

c1与c2对象互不干扰,内存空间不相同

③类的一个对象初始化另一个对象

Cat c1 = new Cat();
Cat c2 = c1;

c1与c2对象共享相同的内存地址存储数据,如果c1的数据发生变化,也会影响到c2

④变量置空

cat04 = null;

变量置空之后,变量就不指向内存地址,而是NULL,内存地址的数据就会被回收。

5、方法

①参数和返回值

方法的参数和返回值都不是必须有的,根据需要设置。

在这里插入图片描述

  • 方法的参数:我们命令方法替我们干活的时候,有时需要给方法提供一些数据。
    • 形式参数:声明方法时指定的参数,用来说明这个方法可以接受哪些参数(简称形参)
    • 实际参数:调用方法时实际传入的参数,用于方法执行过程中实际的运算(简称实参)
  • 方法的返回值:方法执行完成后,给方法的调用者返回的结果数据。

②声明方法的代码

// 声明一个方法:求两个整数的和
// int a,int b声明方法的参数:形式参数
// public int:表示方法的访问权限是public,返回值是int类型
// 方法名:add
public int add(int a, int b) {

    // 计算a + b的和
    int addResult = a + b;

    // 使用return关键字将a + b的和返回给方法的调用者
    return addResult;
}

③调用方法的代码

// 1.要调用一个方法,需要先创建方法所在类的对象
Calculator calculator = new Calculator();

// 2.通过对象调用方法
// 这里传入给方法的5、11,我们叫做实际参数
int addResult = calculator.add(5, 11);

④方法相关规则

  • 方法调用一次就会执行一次
  • 方法必须写在类中,不能独立存在。
  • 方法如果没有返回值,方法体内可以没有return;如果写了return,那么表示方法结束。
  • 方法声明的返回值类型必须和实际返回的数据类型一致。
  • 方法内部不能再声明方法。

练习作业:

1.创建一个Person类

(1)创建Person类的对象,设置该对象的name、age和sex属性,调用study方法,输出字符串“studying”,调用showAge()方法显示age值,调用addAge()方法给对象的age属性值增加2岁。
(2)创建第二个对象,执行上述操作,体会同一个类的不同对象之间的关系。

public class Person {
    String name;
    int age;
    int sex;

    public void study(){
        System.out.println("studying");
    }
    public void showAge(){
        System.out.println("age = " + age);
    }
    public void addAge(int i){
        age+=i;
    }
}
public class PersonTest {
    public static void main(String[] args) {
        Person person = new Person();
        person.study();
        person.addAge(5);
        person.showAge();
    }
}

2.Circle计算圆的面积。

public class Circle{
    private double r;

    void input(double rx){
        r=rx;
    }
    void show(){
        System.out.println(String.format("半径为%.2f的圆,面积为%.2f", r,3.14*r*r));
    }
}
public class CircleTest {
    public static void main(String[] args) {
        Circle c = new Circle();
        c.input(5);
        c.show();
    }
}

3.矩阵

3.1编写程序,声明一个method方法,在方法中打印一个10x8的矩形,在main方法中调用该方法。
3.2修改上一个程序,在method方法中,除打印一个10x8的矩形外,再计算该矩形的面积,并将其作为方法返回值。在main方法中调用该方法,接收返回的面积值并打印。
3.3修改上一个程序,在method方法提供m和n两个参数,方法中打印一个m*n的矩形,并计算该矩形的面积,将其作为方法返回值。在main方法中调用该方法,接收返回的面积值并打印。

public class Method {
    private double chang;
    private double kuan;

    public void start(double c,double k){
        chang=c;
        kuan=k;
    }
    public double show(){
        for (int i = 0; i < chang; i++) {
            for (int j = 0; j < kuan; j++) {
                System.out.print("*");
            }
            System.out.println();
        }
        return chang*kuan;
    }
}
public class MethodTest {
    public static void main(String[] args) {
        Method m = new Method();
        double s;
        m.start(5,6);
        s = m.show();
        System.out.println("s = " + s);
    }
}

4.定义类Student

对象数组题目:定义类Student,包含三个属性:学号number(int),年级state(int),成绩score(int)。创建20个学生对象,学号为1到20,年级和成绩都由随机数确定。

问题一:打印出3年级(state值为3)的学生信息。
问题二:使用冒泡排序按学生成绩排序,并遍历所有学生信息
提示:
1)生成随机数:Math.random(),返回值类型double;
2)四舍五入取整: Math.round(double d),返回值类型long。

public class Student {
    int number;
    int state;
    int score;

    // 用于每次打印Student对象的信息,代码复用,不必每次想打印时都再写一遍
    public void showMyInfo() {
        System.out.println("number=" + number + "\tstate=" + state + "\tscore=" + score);
    }
}
public class StudentTest {
    public static void main(String[] args) {
        //创建Student数组
        Student st[] = new Student[20];

        // 循环20次创建20个Student对象并存入Student数组
        for (int i = 0; i < 20; i++) {
            //创建Student对象
            Student student = new Student();
            //给Student对象设置number属性
            student.number = i + 1;
            //给Student对象设置state属性
            student.state = (int) (Math.random() * 10) + 1;
            //给Student对象设置score属性
            student.score = (int) (Math.random() * 100);
            //将Student对象存入数组
            st[i] = student;
            //判断当前Student对象的state属性是否为3
            if (student.state==3)
                student.show();
        }
        System.out.println("==========================================");
        // 对数组中的元素进行冒泡排序
        // 外层循环:控制『冒泡』次数
        for (int i = 0; i < 20; i++) {
            // 内层循环:负责执行『冒泡』
            // 每冒泡一次就是把当前范围最大的元素移动到最后
            // 减 i 是因为已经排序好的元素不用动
            // 减 1 是因为避免j+1找下一个元素时数组下标越界
            for (int j = 0; j < (20 - i - 1) ; j++) {
                // 将『当前学生的分数』和『下一个学生的分数』进行比较
                if (st[j].score > st[j+1].score) {
                    // 交换:需要借助中间变量
                    Student swap = st[j];
                    st[j] = st[j+1];
                    st[j+1] = swap;
                }
            }
        }
        //遍历Student数组
        for (int i = 0; i < 20; i++) {
            Student s = st[i];
            s.show();
        }
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值