一、类与对象

1.面向对象的理解
>面向对象编程的两个核心概念:类(Class)、对象(Object)
>这两个概念的理解:
    类:具有相同特征的事物的抽象描述,是'抽象的'、概念上的定义。
    对象:实际存在的该类事物的'每个个体',是'具体的',因而也被称为'实例(instance)'。

2.类的声明和使用
>设计类,其实就是设计类的成员
class Person
{

}
>类的内部成员:
>一、属性、成员变量、field(字段、域)
>二、(成员)方法、函数、method

3.面向对象完成的具体功能的操作的三步流程
>步骤一:创建类,并设计类的内部成员(属性、方法)
>步骤二:创建类的对象,比如:Phone p1 = new Phone();
>步骤三:通过对象,调用其内部声明的属性或方法,完成相关的功能

4.类的实例化
>等价描述:类的实例化 == 创建类的对象 == 创建类的实例
>格式:类的类型 对象名 = 通过new创建的对象实体
>举例:Phone p1 = new Phone();
      Scanner scan = new Scanner(System.in);
      String str = new String();

5.对象在内存中的分配涉及到的内存结构
>栈(stack):方法内定义的变量,存储在栈中。
>堆(heap):new之后的结构(比如:数组的实体,对象的实体),包括对象中的属性
>方法区(method area):存放类的模板。比如:Person类的模板

6.类中对象的内存解析
>创建类的一个对象

>创建类的多个对象


说明:创建类的多个对象时,每个对象在堆空间中都有一个对象实体,每个对象实体中保存着一份类的属性。
如果修改某一对象的某属性值时,不会影响其他对象此属性的值。
强调:如果两个变量指向堆空间中的同一个对象实体(即p1,p2保存的地址值相同)
这时通过某一对象变量修改对象属性时,会影响另一对象变量此属性的值。
p1.age=10;
p2.age=20;
System.out.println(p1.age);//20

二、属性
1.变量的分类:
>按数据类型分类:基本数据类型(8种),引用数据类型(数组、类、接口、枚举、注解、记录)
>按变量在类中声明的位置分类:成员变量(或属性)、局部变量(方法内、方法形参、构造器内、构造器形参、代码块内等)

2.属性的几个称谓:成员变量、属性、field(字段、域)

3.成员变量与局部变量的区别:
相同点:
>变量声明的格式相同:数据类型 变量名 = 变量值
>变量都有其作用域
>变量必须先声明,后赋值,再使用
不同点:
(1).类中声明的位置不同:
    成员变量(属性):声明在类内,方法外的变量
    局部变量:声明方法、构造器内部的变量
(2).在内存中分配的位置不同:
    成员变量(属性):存储在堆空间中
    局部变量:存储在栈空间中
(3).生命周期:
    成员变量(属性):随着对象的创建而创建,也随着对象的消亡而消亡
    局部变量:随着方法对应的栈帧入栈,局部变量会在栈中分配;随着方法对应的栈帧出栈,局部变量消亡
(4).作用域
    成员变量(属性):整个类中有效
    局部变量:仅限于声明此局部变量所在的方法(构造器、代码块)中
(5).是否可以有权限修饰符进行修饰:
    权限修饰符:public、protected、缺省、private(用于表明所修饰的结构可调用的范围的大小)
    成员变量(属性):可以使用权限修饰符修饰(还没学封装性)
    局部变量:不可以使用任何权限修饰符修饰
(6).是否有默认值
    成员变量(属性):都有默认初始化值
    局部变量:都没有默认初始化值

三、方法
1.理解:方法是类或对象行为特征的抽象,用来完成某个功能操作
2.好处:实现代码重用,减少冗余,简化代码
3.举例:

public class MethodTest
{
    String name;
    int age;
    char gender;

    public void eat()
    {
        System.out.println("吃饭");
    }
    public void sleep(int hour)
    {
        System.out.println("睡眠时间:"+hour);
    }
    public String interests(String hobby)
    {
        String info = "爱好:"+hobby;
        System.out.println(info);
        return info;
    }
    public int getAge()
    {
        return age;
    }

}


4.格式:
    权限修饰符 [其他修饰符] 返回值类型 方法名(形参列表) [throws 异常类型]
    {
        //方法头
        //方法体
    }
注:[]中的部分不是必须的,以后再学

5.具体的方法声明的细节:
(1).权限修饰符:java规定了4种权限修饰符(参考上面权限修饰符)
(2).返回值类型:调用方法时是否返回一个结果。
    分类:
    >无返回值类型:void
    >有返回值类型:基本数据类型和引用数据类型
(3).方法名:属于标识符,最好见名知义
(4).形参列表:形参属于局部变量
    分类:
    >有形参列表
    >无形参列表
(5).方法体:当我们调用一个方法时,真正执行的代码
(6).注意:
    >Java里的方法不能独立存在,所有方法必须定义在类里。
    >必须先声明,后使用。
    >方法内可以调用本类的方法或属性。
    >方法内不能定义方法。

public class EmployeeExer
{
    //属性
    int id;
    String name;
    int age;
    double salary;

    //定义一个方法,用于显示员工的属性信息
    public void show()
    {
        System.out.println("编号:"+id+" 姓名:"+name+" 年龄:"+age+" 薪水:"+salary);
    }

    public static void main(String[] args)
    {
        //创建类的实例(或创建类的对象、类的实体化)
        EmployeeExer e1 =new EmployeeExer();
        System.out.println(e1);//类型@地址值

        e1.id=1001;
        e1.name="Tom";
        e1.age=19;
        e1.salary=1200;
        System.out.println("编号:"+e1.id+" 姓名:"+e1.name+" 年龄:"+e1.age+" 薪水:"+e1.salary);
        e1.show();

        //创建第二个类的实例
        EmployeeExer e2 = new EmployeeExer();
        e2.id=1002;
        e2.name="Sam";
        e2.age=20;
        e2.salary=2000;
        System.out.println("编号:"+e2.id+" 姓名:"+e2.name+" 年龄:"+e2.age+" 薪水:"+e2.salary);
        e2.show();
    }
}

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐