Java学习——类与对象(一)

简介: Java学习——类与对象(一)

Date-01-01

一、

1、面向对象的三大特征:封装、继承、多态

2、面向过程:强调的是功能行为,以函数为最小单位,考虑怎么做

面向对象:强调具备了功能的对象,以类\对象为最小单位,考虑谁来做

3、面向对象的两个重要概念:

类:对一类事物的描述,是抽象的、概念上的定义

对象:是实际存在的该类事物的每个个体

关系:类是由new出来的,派生出来的

4、属性=成员变量=field=域、字段

方法=成员方法=函数=method

创建类的对象=类的实例化=实例化类

package Date0101;

//测试类
public class PersonTest {
    public static void main(String[] args) {
        //创建Person类的对象
        Person p1=new Person();
        //调用对象的结构:属性、方法
        //调用属性:“对象.属性”
        p1.name="aiy";
        p1.age=22;
        p1.isMale=true;
        System.out.println(p1.name);
        System.out.println(p1.age);

        //调用方法:“对象.方法”
        p1.eat();
        p1.sleep();
        p1.talk("汉语");

        Person p2=new Person();
        System.out.println(p2.name);
        //将p1变量保存的对象地址赋给p3,导致p1和p3指向同一个对象实体
        Person p3=p1;
        System.out.println(p3.name);
        p3.age=10;
        System.out.println(p1.age);//10
    }
}
//类
class Person{
    //属性
    String name;
    int age;
    boolean isMale;
    //方法
    public void eat(){
        System.out.println("人可以吃饭");
    }
    public void sleep(){
        System.out.println("人可以睡觉");
    }
    public void talk(String language){
        System.out.println("人可以说话,使用的是:"+language);
    }

}

二、

面向对象思想落地的规则:

1、创建类、设计类的成员

2、创建类的对象

3、通过“对象.属性”或者“对象.方法”调用对象的结构

package Date0102;

/**
 * 类中方法的声明和使用
 */
public class CustomerTest {
    public static void main(String[] args) {
        Customer use1= new Customer();
        use1.eat();
    }
}
//客户类
class Customer{
    //属性
    String name;
    int age;
    boolean isMale;
    //方法“
    public void eat(){
        System.out.println("客户吃饭了");
    }
    public void sleep(int hour){
        System.out.println("客户休息了"+hour+"小时");
        //return;    //结束方法,后面不可以声明表达式
    }
    public String getName(){
        return name;
    }
    public String getNation(String nation){
        String info="我的国籍是:"+nation;
        return info;
    }
    
}

四、对象的内存解析

//将p1变量保存的对象地址赋给p3,导致p1和p3指向同一个对象实体Person 
p3=p1;
System.out.println(p3.name);
p3.age=10;
System.out.println(p1.age);//10

五、类中属性的使用

属性(成员变量) 和 局部变量比较

相同点:1、定义变量的格式一样,数据类型,变量名=变量值;

2、先声明,后使用;

3、变量都有其对应的作用域;

不同点:

1、在类中声明的位置不同:属性直接定义在类的一对{}内;局部变量声明在方法类、方法形 参、代码块内、构造器形参、构造器内部变量

2、关于权限修饰符不同:属性:可以声明属性时指明权限,使用权限修饰符;(常用修饰符:private、public、缺省(什么都不写)、protected)——>封装性;局部变量:不可以使用权限修饰符

3、默认初始化值的情况:属性:类的属性,根据其类型,都有默认初始值。

整型(byte\short\int\long) :

浮点型:float\double\ :0.0

字符型:char :0 或者 \u0000

布尔型:boolean : flags\true

引用数据类型(类、数组、接口):Null

局部变量:没有默认初始化值。调用之前要显示赋值;特别的形参在调用时赋值即可

4、在内存中加载的位置不同:属性:加载到堆空间。局部变量:加载到栈空间。

Date-01-02

类中方法的声明和使用

方法:描述类应该具有的功能 如:Math类,sqrt()、random"…

1、举例:
public void eat(){

}
public void sleep(int hour(形参)){

}
public String getName(){

}
public String getNation(String nation){

}

2、方法的声明:

权限修饰符(public\private) 返回值类型(void\String) 方法名(形参列表(可有(可以不止一个) —可无)){ 方法体

} static\final\abstract

3、说明

3.1: 权限修饰符: public \ private \ 缺省 \protected

3.2:返回值类型:有返回值 VS 无返回值

3.2.1:如果有返回值,则必须在方法声明时,指定返回值的类型,同时方法中需要使用return关键字返回指定类型或者变量。如果方法没有返回值,则声明方法时,使用void来表示。可以使用return;结束方法,后面不可以声明表达式。

3.2.2:定义方法是否使用返回值—>要求、经验

3.3:形参列表:方法声明0个、1个或者多个形参。格式:数据类型 形参1,数据类型 形参2 …

3.4:方法体 方法功能的体现

3.5:return 关键字的的使用 1、使用在方法体中。2、结束方法;针对返回值类型的方法,使用return返回所需要的数据。

4、方法的使用 :调用当前类的属性或者方法

递归方法:方法A中调用方法A

Customer use1= new Customer();
use1.eat();

课后练习

1、

package Date0103.Practice1;

public class Person {
    String name;
    int age;
    /**
     * 1:男
     * 0:女
     */
    int sex;
    public void study(){
        System.out.println("studying");
    }
    public void showAge(){
        System.out.println("age;"+age);
    }
    public int addAge(int i){
        age+=i;
        return age;
    }
}
package Date0103.Practice1;

public class PersonTest {
    public static void main(String[] args) {
        Person p1=new Person();
        Person p2=new Person();
        //调用属性
        p1.name="aiy-wei";
        p1.age=22;
        p1.sex=1;
        //调用方法
        p1.study();
        p1.showAge();
        System.out.println("姓名:"+p1.name+"增加两岁后的年龄: "+p1.addAge(2));
        p2.study();
        System.out.println(p2.addAge(2));
    }
}

2、计算类Circle圆的面积

package Date0103.Practice2;

/**
 * 计算类Circle圆的面积
 */
//测试类
public class CircleTest {
    public static void main(String[] args) {
        Circle circle=new Circle();
        circle.radius=2.1;
        System.out.println((double)circle.findArea());
    }
}
//圆
class Circle{
    //属性
    double radius;
    //求圆的面积
    public double findArea(){
        double Area=Math.PI*radius*radius;
        return Area;
    }
}

3、

参考:

package Date0103.Practice4;

public class StudentTest {
    public static void main(String[] args) {
        /**
         * 创建一个空的数组,数组类型是Student类型的。
         * 里面可以放三个Student对象
         * 简单的类型比如 int   string
         * 但是Student 也是一种类型
         * 里面可能包含  number、state、score等属性
         */
        Student[] student=new Student[20]; //对象数组,设置20个student的类;
        for(int i=0; i<student.length;i++){
            //给数组元素赋值
            student[i]=new Student();
            //给student对象的属性赋值
            student[i].number=i+1;
            student[i].state=(int)(Math.random()*(6-1+1)+1);//年级:[1,6]
            student[i].score=(int)(Math.random()*(100-0+1));//成绩:[0,100]
        }
        //遍历学生数组
        for(int j=0;j<student.length;j++){
//            System.out.println(student[j].number+","+student[j].state+","+student[j].score);
            System.out.println(student[j].info());
        }
        System.out.println("********输出年级是3的学生**********");
        for(int j=0;j<student.length;j++){
//            System.out.println(student[j].number+","+student[j].state+","+student[j].score);
            if(student[j].state==3)
                System.out.println(student[j].info());
        }
        System.out.println("********使用冒泡排序把学生成绩排序输出**********");
        for(int j=0;j<student.length;j++){
            for(int i=0;i<student.length-j-1;i++){
                if(student[i].score>student[i+1].score){
                    Student temp=new Student();
                    temp=student[i];
                    student[i]=student[i+1];
                    student[i+1]=temp;
                }

            }
        }
        for(int j=0;j<student.length;j++){
            System.out.println(student[j].info());
        }
    }
}
class Student{
    int number;//学号
    int state;//年级
    int score; //成绩
    public String info(){
        return "学号:"+number+","+"年级:"+state+","+"成绩:"+score;
    }

}


相关文章
|
1天前
|
Java
【JAVA基础篇教学】第五篇:Java面向对象编程:类、对象、继承、多态
【JAVA基础篇教学】第五篇:Java面向对象编程:类、对象、继承、多态
|
1天前
|
缓存 Java 数据库
Java并发编程学习11-任务执行演示
【5月更文挑战第4天】本篇将结合任务执行和 Executor 框架的基础知识,演示一些不同版本的任务执行Demo,并且每个版本都实现了不同程度的并发性。
20 4
Java并发编程学习11-任务执行演示
|
1天前
|
存储 安全 Java
Java容器类List、ArrayList、Vector及map、HashTable、HashMap
Java容器类List、ArrayList、Vector及map、HashTable、HashMap
|
2天前
|
缓存 Java 程序员
关于创建、销毁对象⭐Java程序员需要掌握的8个编程好习惯
关于创建、销毁对象⭐Java程序员需要掌握的8个编程好习惯
关于创建、销毁对象⭐Java程序员需要掌握的8个编程好习惯
|
2天前
|
Java
从源码出发:JAVA中对象的比较
从源码出发:JAVA中对象的比较
10 3
|
2天前
|
Java 编译器 开发者
Java一分钟之-继承:复用与扩展类的特性
【5月更文挑战第9天】本文探讨了Java中的继承机制,通过实例展示了如何使用`extends`创建子类继承父类的属性和方法。文章列举了常见问题和易错点,如构造器调用、方法覆盖、访问权限和类型转换,并提供了解决方案。建议深入理解继承原理,谨慎设计类结构,利用抽象类和接口以提高代码复用和扩展性。正确应用继承能构建更清晰、灵活的代码结构,提升面向对象设计能力。
9 0
|
2天前
|
安全 Java 编译器
java中类与对象回顾总结-2
java中类与对象回顾总结
14 3
|
2天前
|
Java 编译器
java中类与对象回顾总结-1
java中类与对象回顾总结
14 3
|
2天前
|
Java
【Java多线程】面试常考 —— JUC(java.util.concurrent) 的常见类
【Java多线程】面试常考 —— JUC(java.util.concurrent) 的常见类
11 0
|
2天前
|
Java API 调度
【Java多线程】Thread类的基本用法
【Java多线程】Thread类的基本用法
6 0