类和对象
foreword:
1、面向对象:是一种编程指导思想(组织代码形式、解决问题思路)
2、学习目的:(1)获取已有对象使用;(2)设计对象使用
3、(1)一个java文件只能有一个public类,只有一处入口方法(main方法)。要实现多个类都在一个文件中,除了与文件名同名的类外,其他类都不能定义为public类;要实现其他类的调用,需要在拥有main方法的类下面通过创建对象调用实现
(2)一个类的定义和调用必然与其他类相联系,此阶段的学习更像是java学习的最小单元从方法上升到类,本文主要是两个public类的定义和调用相关学习
一、类
(1)类的定义:对现实生活中一类具有共同属性和行为的事物的抽象
(2)对象的定义:真实存在的实体
类是对象的抽象,对象是类的实体,二者关系类比于设计图和实物
(3)对象的属性和行为
(i)属性:对象具有的各种特征,对象的每个属性都有特定值
(ii)行为:对象能够执行的操作
(4)类的组成:属性和行为
(i)属性:通过成员变量体现(类中方法外的变量)
(ii)行为:通过成员方法体现(无关键字static的方法)
(iii)类的定义steps:
public class 类名{
//成员变量
数据类型1 变量1;
数据类型2 变量2;
....
//成员方法
method1;
method2;
}
(5)对象的创建和使用
(i)创建对象的格式:类名 对象名=new 类名();
(ii)使用成员变量:对象名.变量名
(iii)使用成员方法:对象名.方法();
€1 在Hello类中练习类的定义
€2 在Hello类中定义一个内部类student,并且调用其成员变量和成员方法
€3 新建一个Student类,在Hello类中创建对象调用Student类中的变量和方法练习
二、java内存分配
1、栈 :所有的局部变量都在栈内存中创建
(1)局部变量:定义在方法中的变量或方法声明上的变量。特点:追随方法的调用,方法调用完毕,局部变量也就消失
(2)方法声明上的变量:定义在形参位置的变量
(3)方法执行都会加载到栈中进行
2、堆:所有的对象及其对应的实例变量和数组都将存储于此
(1)new 类名 ()包含的东西存储在堆内存
(2)new出来的东西对应地址值,使用完毕被回收
(3)实例变量(成员变量)有初始化值:基本数据类型(0)、浮点数(0.0)、布尔(false)、字符(空字符)、引用数据类型(null)
note:堆和栈通过对象地址名建立指向,即对象—栈内地址名—堆内地址名—对象对应的成员变量
€4 通过练习体会堆内存对成员变量进行初始化
3、单个对象的内存分配,如下图
(1)main方法作为入口先进栈,创建的对象s以及成员变量name和age都存储在堆内存里,栈和堆通过地址名001建立指向
(2)利用对象s调用成员方法 study和homework时,方法加载到栈内存进行
4、多个对象内存分配,(当引用指向互不相同时)如下:
(1)如上两个对象都是在同一个类下创建的,所以他们可调用的成员变量和成员方法完全一样,唯一不同在于指向不一样,s1指向地址名为001的对象,s2指向地址名为002的对象
(2)不同的对象调用成员变量、成员方法时通过不同指向完成
5、多个对象内存分配,(多个引用指向相同时),如下
(1)当把一个对象的地址赋值给另外一个对象,此时两个对象对应相同的地址名,后一个对象调用成员变量和成员方法进行的操作覆盖前一个对象的操作
€5 引用相同的指向操作练习:
6、成员变量和局部变量的区别
(1)类中位置不同:成员变量位于类中方法外,局部变量位于方法内或方法声明上
(2)内存位置不同:成员变量存储在堆内存中,局部变量存储在栈内存中
(3)生命周期不同:成员变量跟随对象,局部变量跟随方法
(4)初始化值:成员变量有初始化值,局部变量需定义赋值之后使用
三、关键字和构造方法
1、private关键字
(1)private是一个权限修饰符
(2)可以修饰成员(成员变量、成员方法)
(3)保护成员不被别的类调用,private修饰的成员只能在本类中才能访问
(4)格式:private 数据类型 变量名;
private 返回值类型 方法名(参数类型 参数){方法体;}
2、若private修饰的变量能被其他类调用,需要在该类中通过定义新的方法,其他类调用新方法实现:
(1)方法一:"set 变量名()"设置变量值,新方法需用public修饰、无返回值、有参数、进行赋值运算
(2)方法二:"get 变量名()"获取变量值,新方法需用public修饰、有返回值、无参数、返回赋值运算结果
(3)常用get和set结合的方法让其他类能够调用被private修饰的成员,先set再get
€6 private使用练习
€7 set法使private保护的变量可被调用
€8 get法使private修饰的变量可被调用
set和get使用方法一览:
3、this关键字
(1)this限定的变量用于指代成员变量
(2)方法的形参如果与成员变量同名,进行赋值运算时,不带this修饰的变量根据就近原则默认为形参,而不是成员变量
(3)方法的形参与成员变量不同名,不带this修饰的变量指的就是成员变量
(4)this可以解决局部变量隐藏成员变量
(5)this跟随对象
€9 this使用与否的区别练习
4、封装
(1)面向对象三大特征(封装、继承、多态)
(2)封装就是模拟客观世界,客观世界里成员变量都是隐藏在对象内部的,外界无法直接操作
(3)封装原则:将某些信息隐藏在类内部,不允许外部程序直接访问,而是通过该类提供的方法实现对隐藏信息的操作和访问
(4)成员变量private,提供对应的get法和set法
5、构造方法:创建对象的特殊方法;功能是:完成对象数据初始化
(1)若没有定义构造方法,系统将给出一个默认的无参数的构造方法;若定义了构造方法,系统不再提供默认构造方法
(2)构造方法的重载:如果自定义了带参构造方法,还要使用无参构造,则必须再写一个无参构造方法
(3)常见操作:永远提供无参构造方法
格式:
public class 类名{
修饰符 类名(参数){
}
}
note:常用构造方法包括:无参构造+带多个参数构造
€10 构造方法练习
6、javaBean
(1)就是一个java中的类,其对象可以用于在程序中封装数据,例如:学生类、手机类
标准javaBean要求:(1)成员变量用private修饰(2)提供每一个变量对应的set方法和get方法(3)提供一个无参数构造方法
€11 创建一个标准javaBean练习如下
学习资料来源于黑马程序java课程