目录
面向对象学习的三条主线
1、Java类及类的成员:属性、方法、构造器;代码块、内部类
2、面向对象的三大特征:封装性、继承性、多态性、(抽象性)
3、其他关键字:this、super、static、final、abstract、interface、
package、import
1、Java基本元素:类和对象
类和对象是面向对象的核心概念
类:是堆一类事物的描述,是抽象的、概念上的定义
对象:是实际存在的该类事物的每个个体,因此也称为实例
万事万物皆对象
1.1、设计类
public class Person {
//属性
String name;
//方法
public void eat(){
System.out.println("人可以吃饭");
}
}
1.2、创建对象
public static void main(String[] args) {
//创建Person类的对象 == 也叫类的实例化 ==实例化类
Person p = new Person();
}
1.3、调用对象的结构
public static void main(String[] args) {
//创建Person类的对象
Person p = new Person();
//调用对象的结构:属性或方法
//调用属性
p.name="小明";
System.out.println(p.name);//小明
//调用方法
p.eat();//人可以吃饭
}
如果创建了一个类的多个对象,则每个而对象都独立的拥有一套类的属性。 意味着:如果我们修改一个对象的属性a,则不影响另外一个对象属性a的值。
内存解析
栈:存放局部变量
堆:存放对象实例
方法区:用于存储已被虚拟机加载的类信息、常量、
静态变量、即时编译器编译后的代码等数据
1.4、 对象的内存解析
2、类的成员之一:属性的使用
***属性(也叫成员变量)***:直接定义在类的一对{}内
2.1、属性(成员变量) vs 局部变量
2.1.1、相同点
- 定义变量的格式:数据类型 变量名 = 变量值
- 先声明、后使用
- 变量都有其对应的作用域
2.1.2、不同点
- 1、在类中声明的位置的不同
属性(成员变量):声明在方法内、方法形参、代码块内、构造器形参、构造器内部的变量
- 2、关于权限修饰符的不同
属性(成员变量):可以在声明属性时,指明其权限,使用权限修饰符
常用的权限修饰符:private\public\缺省\protecte —封装性
目前,大家声明属性时,都使用缺省就可以了
局部变量:不可以使用权限修饰符
- 3、 默认初始化的情况的不同
属性(成员变量):类的属性,根据其类型,都有默认初始化值
局部变量:没有默认初始化值
意味着,我们在调用局部变量之前,一定要显示赋值,代码如下:
特别的:形参在调用时,我们赋值即可
- 4、在内存中加载的位置
属性(成员变量):加载到堆空间中(非static)
局部变量:加载到栈空间
3、类的成员之二:方法的使用
3.1、方法的声明
方法的声明:权限修饰符 返回值类型 方法名(形参列表){
方法体
}
3.1.1、权限修饰符:private、public、缺省、protected
3.1.2、返回值类型:有返回值和无返回值
有返回值,
则必须在方法声明时,指定返回值的类型
同时,方法中,需要使用return关键字来返回指定类型的变量或常量。
无返回值,
则方法声明时,使用void来表示。通常,不需要return
即便使用return的话,只能" return;" 表示结束此方法
3.1.3、return关键字的使用:
使用范围:
使用在方法体中
作用:
1、可以用来结束方法
2、"return 数据"方法返回所要的数据
注意点:
retrun关键字后面不可以声明执行语句。
3.2、方法的分类
- 无参无返回值
public void eat(){
System.out.println("人可以吃饭");
}
- 无参有返回值
public boolean ismale1(){
ismale = true;//是男人
return ismale;
}
- 有参无返回值
public void eat(String food){
System.out.println("人可以吃"+food);
}
- 有参有返回值
public int getage(int age){
return age;
}
4、匿名对象的使用
- 1、理解
我们创建的对象,没有显示的赋给一个变量名,即为匿名对象
- 2、特征
匿名对象只能调用一次
因为,只要new一次,堆空间就会开辟一个新的对象
- 3、使用如下
public void sleep(Person p1){
p1.name="小白";
System.out.println(p1.name+"在睡觉");
}
5、方法的重载——两同一不同
5.1、重载的概念:
两同一不同
在同一个类中,存在多个同名的方法,只要他们的
参数个数或者参数类型不同即可
5.2、重载的特点:
与返回值类型无关,只看参数列表,且参数列表必须不同。(参数个数或参数类型)
调用时,根据方法参数列表的不同来区别
5.3、重载的实例:
参数列表要不同
6、方法参数的值传递机制
关于变量的赋值
如果变量是基本数据类型,此时赋值的是变量所保存的数据值
如果变量是引用数据类型,此时赋值的是变量所保存的数据的地址值
方法参数的值传递机制:值传递
形参:方法定义时,声明在小括号内的参数
实参:方法调用时,实际传递给形参的数据
内存的角度分析该main方法执行的原理
值传递机制
7、递归方法
一个方法体内调用它自身
方法递归包含了一种隐式的循环,他会重复执行某段代码,但这种重复执行无需循环控制
递归一定要向已知方向递归,否则这种递归就变成了无穷递归,类似于死循环
public class Test {
public static void main(String[] args) {
Test t = new Test();
int sum = t.sum(100);
System.out.println("总和为:"+sum);//总和为:5050
}
//例题:计算1-100之间所有自然数的和
public int sum(int num){
if (num == 1) {
return 1;
} else {
return num+sum(num - 1);
}
}
}
//100+sum(99)
//100+99+sum(98)
//100+99+98+sum(97)
//100+99+98+97+sum(96)
...
8、封装与隐藏
我们程序设计追求“高内聚,低耦合
➢高内聚:类的内部数据操作细节自己完成,不允许外部干涉;
➢低耦合:仅对外暴露少量的方法用于使用。
隐藏对象内部的复杂性,只对外公开简单的接口。便于外界调用,从而提 高系统的可扩展性、可维护>性。通俗的说,把该隐藏的隐藏起来,该暴露
的暴露出来。这就是封装性的设计思想。
/*
封装性的体现:
将类的属性XXX私有化(private),同时,
提供公共的(public)方法来获取(getXXX)私有属性
提供公共的(public)方法来设置(setXXX)私有属性的值
*/
public class Animals {
public String name;//
private int legs;//private 私有属性
//提供关于legs私有属性的get和set方法,便于外部获取和赋值
public int getLegs() {//公共方法
return legs;
}
public void setLegs(int legs) {//公共方法
this.legs = legs;
}
}
封装性的体现:
1、如上,对属性私有化,公共方法去调用
2、不对外暴露的私有方法
3、单例模式
封装性之所以能体现,归根结底离不开权限修饰符的作用
9、权限修饰符
Java规定的4种权限(从小到大排列)
private 、default(缺省)、protected、public
10、类的成员之三:构造器(或构造方法)
10.1、构造器的作用
用来创建对象
说明
1、如果没有显式的定义类的构造器的话,则系统会默认提供一个空参的构造器
2、定义构造器的格式: 权限修饰符 类名(形参列表){}
3、一个类中定义的多个构造器,彼此构成重载
4、一旦我们显示的定义了构造器,系统将不会提供默认的无参构造器
5、一个类中至少会有一个构造器
10.2、构造器的使用
实体类:
public class TriAngle {
private double base;//底边长
private double height;//高
//无参构造
public TriAngle(){
}
//有参构造 new对象的时候可以初始化对象的属性
public TriAngle(double b, double h){
base = b;
height = h;
}
public void setBase(double b){
this.base = b;
}
public double getBase(){
return base;
}
public void setHeight(double h){
this.height = h;
}
public double getHeight(){
return height;
}
}
测试类:
public class test {
public static void main(String[] args) {
TriAngle t = new TriAngle(1.0,2.0);//利用有参构造创建对象,并且给对象的属性赋值
System.out.println("底边长:"+t.getBase());//底边长:1.0
System.out.println("高:"+t.getHeight());//高:2.0
}
}
控制台输出结果:
11、JavaBean
1、JaveBean是一种Java语言写成的可重用组件
2、所谓JavaBean,就是必须符合如下3个标准的Java类
12、this的使用
this 可以用来修饰:属性、方法、构造器
this理解为:当前对象
13、关键字 :package、import的使用
package:包
声明类或接口所属的包,
声明在源文件的首行import:导入
指定报下的类、接口
声明在包的的声明和类的声明之间
需要导入多个结构,则并列写出即可