Java,类与对象
一、类与对象
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();
}
}
更多推荐



所有评论(0)