java面向对象

java面向对象

1. 类和对象

1.1 类和对象的理解

客观存在的事物皆为对象 ,所以我们也常常说万物皆对象。

    • 类的理解
      • 类是对现实生活中一类具有共同属性和行为的事物的抽象
      • 类是对象的数据类型,类是具有相同属性和行为的一组对象的集合
      • 简单理解:类就是对现实事物的一种描述
    • 类的组成
      • 属性:指事物的特征,例如:手机事物(品牌,价格,尺寸)
      • 行为:指事物能执行的操作,例如:手机事物(打电话,发短信)
  • 类和对象的关系
    • 类:类是对现实生活中一类具有共同属性和行为的事物的抽象
    • 对象:是能够看得到摸的着的真实存在的实体
    • 简单理解:类是对事物的一种描述,对象则为具体存在的事物

1.2 类的定义

类的组成是由属性和行为两部分组成

  • 属性:在类中通过成员变量来体现(类中方法外的变量)
  • 行为:在类中通过成员方法来体现(和前面的方法相比去掉static关键字即可)

类的定义步骤:

①定义类

②编写类的成员变量

③编写类的成员方法

学生:

​ 属性:学号,姓名,年龄

​ 行为:吃饭,睡觉

//在一个java文件中,可以写多个class类,但是只能由一个类被public修饰而且这个类贺java文件名保持一致
public class 类名 {
	// 成员变量:类中方法外定义,表示一个类的属性   id, name, age
    int id;
    String name;
    int age;
	变量1的数据类型 变量1;
	变量2的数据类型 变量2;
	…
	// 成员方法:表示一个类的行为 eat()  sleeep()
        public void eat(){
        System.out.println("吃饭")
    }
     public void sleep(){
        System.out.println("睡觉")
    }
	方法1;
	方法2;	
}
//如何通过一个类创建一个类的对象
//语句定义格式:类名 对象名 = new 类名();
//数据类型  变量名 = 初始值;
Student s1 = new Student();
System.out.println(s1);

//获取成员变量
//对象名。成员变量名
int i = s1.id;
System.out.println(i);
System.out.println(s1.name);
System.out.println(s1.age);
System.out.println("=========================");
//给对象成员变量赋值
s1.id = 1001;
s1.name = "杨浩东";
s1.age = 18;
System.out.println(s1.id);
System.out.println(s1.name);
System.out.println(s1.age);

对象

1.概述:一类事物的具体体现

2.使用:

a.导包: import 包名.类名
如果两个类在同一个包下,想要使用对方的成员不需要导包
如果两个类不在同一个包下,想要使用对方的成员需要导包

特殊包:java.lang -> 使用lang包下的类不需要导包 -> String
    
友情提示:在学四种权限修饰符之前,尽量让两个类在同一个包下

b.创建对象:想要使用哪个类中的成员,就new哪个类的对象
类名 对象名 = new 类名() -> 比如: Person person = new Person()

c.调用成员(成员变量,成员方法) -> 想要使用哪个类中的成员,就用哪个类的对象去点哪个成员
对象名.成员变量名 = 值
对象名.方法名() -> 调用的是无参无返回值方法
对象名.方法名(实参) -> 调用的是有参无返回值方法
数据类型 变量名 = 对象名.方法名() -> 调用的是无参有返回值方法
数据类型 变量名 = 对象名.方法名(实参) -> 调用的是有参有返回值方法

public class Person {
    //属性-> 成员变量
    String name;
    int age;

    //行为 -> 成员方法
    public void eat(){
        System.out.println("吃饭");
    }

    public void drink(){
        System.out.println("喝水");
    }
}

public class Demo01Person {
    public static void main(String[] args) {
        Person person = new Person();
        System.out.println(person.name);
        System.out.println(person.age);
        person.name = "杨浩东";
        person.age = 22;
        System.out.println(person.name);
        System.out.println(person.age);

        person.eat();
        person.drink();

    }
}

对象创建和使用示意图

一个对象的创建和使用

成员变量和局部变量的区别

1.定义位置不同(重点)

a.成员变量:类中方法外
b.局部变量:定义在方法之中或者参数位置

2.初始化值不同(重点)

a.成员变量:有默认值的,所以不用先手动赋值,就可以直接使用
b.局部变量:是没有默认值的,所以需要先手动赋值,再使用

3.作用范围不同(重点)

a.成员变量:作用于整个类
b.局部变量:只作用于自己所在的方法,其他方法使用不了

4.内存位置不同(了解)

a.成员变量:在堆中,跟着对象走
b.局部变量:在栈中,跟着方法走

5.生命周期不同(了解)

a.成员变量:随着对象的创建而产生,随着对象的消失而消失
b.局部变量:随着方法的调用而产生,随着方法的调用完毕而消失

public class Person {
    String name;//成员变量
    public void eat(){
        int i = 10;//局部变量
        System.out.println(i);

        System.out.println(name);//成员变量不用手动赋值可以直接使用,因为有默认值
    }

    public void drink(){
        int j;
        //System.out.println(j);//局部变量没有默认值,所以需要手动赋值再使用
        System.out.println(name);

        //System.out.println(i);//i是eat方法的局部变量,在drink中使用不了
    }
}

例子:

需求:定义一个类MyDate,属性有 year month day

再定义一个类Citizen(公民类),属性有 name(String类型) birthday(MyDate类型) idCard(String),为这三个属性赋值,然后将值取出来

public class MyDate {
    int year;
    int month;
    int day;
}

public class Citizen {
    //姓名
    String name;  //默认值 null
    /*
      生日  MyDate类型

      MyDate属于自定义类型(引用数据类型)
      这种类型要操作之前必须要赋值
      怎么赋值?  需要new对象赋值
     */
    MyDate birthday = new MyDate(); // 默认值 null
    //身份证
    String idCard;  //默认值null
}

public class Test01 {
    public static void main(String[] args) {
        Citizen citizen = new Citizen();
        citizen.name = "涛哥";
        citizen.idCard = "111111111";

        /*
           citizen.birthday获取的是MyDate对象
           再去点year获取的是MyDate对象中的year

           链式调用
         */
        citizen.birthday.year = 2000;
        citizen.birthday.month = 10;
        citizen.birthday.day = 10;

        System.out.println(citizen.name+","+citizen.birthday.year+","+citizen.idCard);

    }
}

给引用数据类型赋值,需要new对象(String比较特殊,可以直接=赋值)

posted @   09250327  阅读(2)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 使用C#创建一个MCP客户端
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示