Java面向对象入门

1.面向对象基础

1.1概述

面向对象(Object Oriented)是软件开发方法。面向对象的概念和应用已超越了程序设计和软件开发,是一种对现 实世界理解和抽象的方法,是计算机编程技术发展到一定阶段后的产物。面向对象是相对于面向过程来讲的,指的是把 相关的数据和方法组织为一个整体来看待,从更高的层次来进行系统建模,更贴近事物的自然运行模式。

例子:
把大象装进冰箱要几步?
面向过程回答:
3步:1把冰箱门打开, 2把大象装进去 , 3把冰箱门关闭
面向对象回答:
2步:1招一个能操作冰箱的工人(对象),2指挥工人装大象
如果是装100头大象要几步?
面向过程:。。。。。。。。。。。。。
面向对象:
还是两步1招一个能操作冰箱的工人(对象) , 2指挥工人把大象依次装进去
结论: 面向过程很难适应变化,面向对象更加灵活复用性更高

1.2面向对象特征

面向对象一共有三大特征封装,继承,多态

1.2.1封装性

面向对象的封装就是把描述一个对象的属性和行为的代码封装在一个“模块”中,也就是一个类中,属性用变量定义,行为用方法进行定义,方法可以直接访问同一个对象中的属性。

实施:
通常情况下,只要记住让变量和访问这个变量的方法放在一起,将一个类中的成员变量全部定义成私有的,只有这个类自己的方法才可以访问到这些成员变量,这就基本上实现对象的封装,就很容易找出要分配到这个类上的方法了,就基本上算是会面向对象的编程了。把握一个原则:把对同一事物进行操作的方法和相关的方法放在同一个类中,把方法和它操作的数据放在同一个类中。

1.2.2继承性

在定义和实现一个类的时候,可以在一个已经存在的类的基础之上来进行,把这个已经存在的类
所定义的内容作为自己的内容,并可以加入若干新的内容,或修改原来的方法使之更适合特殊的需要,
这就是继承。继承是子类自动共享父类数据和方法的机制,这是类之间的一种关系,提高了软件的可
重用性和可扩展性。

1.2.3多态性

多态是指程序中定义的引用变量所指向的具体类型和通过该引用变量发出的方法调用在编程时并不确定,而是在程序运行期间才确定,即一个引用变量倒底会指向哪个类的实例对象,该引用变量发出的方法调用到底是哪个类中实现的方法,必须在由程序运行期间才能决定。
面向对象体现了对象的多种表现形式,具体体现在类(子类是其父类的一种形态)和方法(方法的重载overload和重写override)上。

1.3类与对象

1.3.1 类与对象的关系

类表示一个共性的产物,是一个综合的特征,而对象,是一个个性的产物,是一个个体的特征。(类似生活中的图纸与实物的概念。)
类必须通过对象才可以使用,对象的所有操作都在类中定义。
类由属性和方法组成:
· 属性:就相当于人的一个个的特征
· 方法:就相当于人的一个个的行为,例如:说话、吃饭、唱歌、睡觉

1.3.2 类的定义格式

class ClassName {
	成员属性
	成员方法
}

1.3.3 属性与方法

属性的定义格式:
数据类型 属性名;
例如:

	int i;
	int a = 0;
	String name;

方法定义格式:
权限修饰符 返回值类型 方法名(形式参数列表){
//方法体
return 返回值;
}
例如:

public int add(int a, int b) {
	return a + b;
}

1.3.4对象的创建

格式:
类名 对象名 = new 类名();
例如:

Person p = new Person();

1.4创建对象内存分析

1.4.1 栈(stack)

栈存储的是基本数据类型的数据 以及 引用数据类型的引用
例如:
int a =10;
Person p = new Person();
10存储在栈内存中 , 第二句代码创建的对象的引用§存在栈内存中

特点:先进后出存储数据快

1.4.2 堆(heap)

堆储存的是类的对象
Java是一个纯面向对象语言, 限制了对象的创建方式:
所有类的对象都是通过new关键字创建
new关键字, 是指告诉JVM , 需要明确的去创建一个新的对象 , 去开辟一块新的堆内存空间:
堆内存与栈内存不同, 优点在于我们创建对象时 , 不必关注堆内存中需要开辟多少存储空间 , 也不需要关注内存占用时长 !

堆内存中内存的释放是由GC(垃圾回收器)完成的
垃圾回收器 回收堆内存的规则: 当栈内存中不存在此对象的引用时,则视其为垃圾 , 等待垃圾回收器回收。

1.4.3 方法区

方法区存放的是类信息,静态(static)变量, 常量, 成员方法

1.5构造方法(constructor)

作用:用于对象初始化。
执行时机: 在创建对象时,自动调用
特点:所有的Java类中都会至少存在一个构造方法,如果一个类中没有明确的编写构造方法, 则编译器会自动生成一个无参的构造方法, 构造方法中没有任何的代码。 如果自行编写了任意一个构造器, 则编译器不会再自动生成无参的构造方法。

构造方法可以重载,一个类可以同时存在多个构造方法
例如:

class Person() {
	// 构造方法(无参)
	public person() {
	}
	// 构造方法有参
	public person(String name) {
	}
}

构造方法重载可以让我们在不同的创建对象的需求下,调用不同的方法来完成对象的初始化。

1.6方法的重载

方法名称相同, 参数类型或参数长度不同, 可以完成方法的重载 ! 方法的重载与返回值无关! 方法的重载 ,可以让我们在不同的需求下, 通过传递不同的参数调用方法来完成具体的功能。

例如:

public int add(int a, int b) {
	return a + b;
}

// 方法重载参数长度不同
public int add(int a, int b, int c) {
	return a + b + c;
}

// 方法重载参数类型不同
public int add(double a, double b, double c) {
	return a + b + c;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值