JAVA基础(九)面向对象
引用https://www.cnblogs.com/xue-er/p/9356553.html。
面向过程、面向对象
l 面向过程:可以理解为执行者思考的方式。如何一步步解决问题。
l 面向对象:可以理解为分配工作发号施令的人,如何简单方便的完成问题。
面向对象的优点
l 面向对象思维方式是一种更符合人们思考习惯的思想
l 面向过程思维方式中更多的体现的是执行者(自己做事情),面向对象中更多的体现是指挥者(指挥对象做事情)。
l 面向对象思维方式将复杂的问题简单化。
类,对象
对象是事物存在的实体,如人类,书桌,高楼等。需要使用这些具体的事物,Java使用具体的事物,需要通过new关键字来创建这个事物的具体实例。
对象分为两部分,即静态部分与动态部分。
1. 静态部分就是不动的,叫做属性,任何对象都具备其自身属性。
2.动态部分就是行为(方法),如人这一类,会哭,笑,走,跑等。
类
属性和行为封存起来就称为类。
类的实质就是封装对象的属性和行为(方法)的载体。反过来说具有相同属性和行为的一类实体称为类。 类就是同一类事物的统称。类也可以说是创造对象的一个模板。
类中对象的行为是以方法的形式定义的,对象的属性以成员变量的形式定义的。
局部变量和成员变量区别
区别一:定义的位置不同
定义在类中的,变量是成员变量
定义在方法中或者{}语句块里面的变量,是局部变量(有范围)
区别二:在内存中的位置不同
成员变量存储在堆内存的对象中(属于对象 对象存在堆内存 它就也在堆内存)
局部变量存储在栈内存的方法中(属于方法 方法进栈)
区别三:生命周期不同
成员变量随着对象的出现而出现在堆中,随着对象的消失而从堆中消失(gc垃圾回收机制),命长
局部变量随着方法的运行而出现在栈中,随着方法的弹栈而消失,命短
区别四:初始化不同
成员变量因为在堆内存中,所有默认的初始化值
局部变量没有默认的初始化值,必须手动的给其赋值才可以使用。
成员变量:有默认初始化值 string 为null,int 为0。
局部变量:没有默认初始化值 必须赋值
只要不是基本数据类型就是引用数据类型;
举例
对面向对象有了了解之后,我们来说说在具体问题中如何使用面向对象去分析问题,和如何使用面向对象。
我们把大象装冰箱为例进行分析。
在针对具体的需求,可以使用名词提炼的办法进行分析,寻找具体的对象。
需求:把大象装冰箱里
对象:大象、冰箱
分三步:
1、打开冰箱门
2、将大象装进去
3、关闭冰箱门
分析发现打开、装、关闭都是冰箱的功能(方法)。即冰箱对象具备如下功能:
冰箱打开
冰箱存储
冰箱关闭
代码描述,上述需求中有两个具体的事物 大象 和 冰箱
public class dxbx { public static void main(String[] args) { //创建冰箱对象 bx bx=new bx(); //创建大象对象 dx dx=new dx(); dx.color="粉色"; //方法调用 格式 对象.方法名,调谁用谁 //打开冰箱 bx.open(); //把大象装去//这里的dx是实参; dax形参 ;用dx(堆里的地址)给dx ssdax形参赋值 bx.play(dx); //因为bx是一个地址;类在堆里已经被赋值了;这里直接通过地址dx和门牌号.color就直接取出了黄色 //关闭冰箱门 bx.down(); } }
大象类
public class dx { String color; void speak() { System.out.println("我是"+color+"的大象"); } }
冰箱类
public class bx { //打开功能s public void open() { System.out.println("打开冰箱门"); } //放进去功能 dx自己定义的类,声明这个dx类,只能传dx这个类型 dax形参 public void play(dx dax) { // 方法随便写,只是为了看出传的谁 dax.speak(); } //关闭功能 public void down() { System.out.println("关闭冰箱门"); } }
完整的类包含属性和方法;
类的声明
属性
语法:权限修饰符 class 类名{
//类体
}
说明:
.访问权限修饰符 只能是 public 或者 默认(default)
.类名只要是一个合法的标识符即可 要求首字母必须大写
.尽量使用单个或者多个有意义的单词来命名
注意:
.一个java文件中可以写多个类编译后会生成多个.class字节码文件
.一个java文件中最多只能有一个被public修饰的类 该类的名字 必须和 java源文件名保持一致
.一个java文件中如果只有一个类 并且该类不是用public修饰的类名 和 java文件名可以不一样
- 类中成员变量的定义 通过对象引用.成员变量名 的方式进行调用。
方法
构造方法定义:用来创建对象的 并且可以给对象的属性进行初始化赋值
语法格式:[访问权限修饰符] 类名(形参列表){
方法体
}
特点:
.方法名和类名 全相同(大小写都要一模一样)
.没有返回值类型 连void都没有
.没有具体的返回值 return return; 可以写 但是不能有任何返回值 默认是不写的 完全不推荐写
.在创建对象的时候 系统会帮我们调用构造方法 构造方法 不用 对象的引用.方法名 调用
下方举例
.写在类的方法不要加Static直接写返回值;
public 返回值类型方法名(参数列表){};
例子
publicvoid run(int a) {}
.写在方法里面的是局部变量;在调用方法时以局部变量为主就近原则,
局部变量;
publicclass car {
// 属性
String color;
intgulu;
}
成员变量;
publicvoid run() {
String color;
intgulu;}
最终的执行结果是局部变量,变量的就近原则;
6.但是加上this就能解决;this是本类变量;代表的是Class car类;car类加上this后就和局部变量没有关系了
This 不能写在main里面;
this.关键字
.调用本类中的成员方法
.访问本类的成员变量
.调用本类的构造方法
.this()不能使用在普通方法里 必须在构造方法的第一句
对象 调用方法的格式 对象.方法名