1.什么是面向对象
程序员从面向过程的执行者转化成了面向对象的指挥者
1.1面向对象分析方法分析问题的思路和步骤:
① 根据问题需要,选择问题所针对的现实世界中的实体
②从实体中寻找解决问题相关的属性和功能,这些属性和功能就形成了概念世界中的类
③把抽象的实体用计算机语言进行描述,形成计算机世界中类的定义。即借助某种程序
语言,把类构造成计算机能够识别和处理的数据结构
④将类实例化成计算机世界中的对象。对象是计算机世界中解决问题的最终工具
2.面向过程(POP)和面向对象(OOP)区别
二者都是一种思想,面向对象是相对于面向过程而言的。
面向过程,强调的是功能行为,以函数为最小单位,考虑怎么做。
面向对象,将功能封装进对象,强调具备了功能的对象,以类/对象为最小单位,考虑谁来做。
面向对象更加强调运用人类在日常的思维逻辑中采用的思想方法与原则,如抽象、分类、继承、聚合、多态等。
3.Java语言要素:类和对象
3.1类Class:将类实例化成计算机世界中的对象。对象是计算机世界中解决问题的最终工具
3.2对象Object:对象是实际存在的该类事物的每个个体,因而也称为实例(instance)
package OOP1;
/*
* Java面向对象学习的三条主线(第4-6章)
* 1.Java类及类的成员:属性,方法,构造器;代码块,内部类
* 2.面向对象的三大特征:封装,继承,多态,(抽象)
* 3.其他关键字:this,super,static,finnal,abstract,interface,package,import
*/
/*
* 类(Class)和对象(Object)是面向对象的核心概念。
* 类是对一类事物的描述,是抽象的、概念上的定义
* 对象是实际存在的该类事物的每个个体,因而也称为实例(instance)。
*/
public class OOPTest {
public static void main(String[] args) {
}
}
3.3Java实例
package OOP1;
/*
* 1.创建类,设计类的成员
* 2.创建类的实例
* 3.调用类的属性(对象.属性)和方法(对象.方法)
*/
/*
* 如果创建了一个类的多个对象,则每个对象都独立的拥有一个类的属性(非Static)
*
*/
//测试类
public class PersonTest {
public static void main(String[] args) {
//创建类的实例
Person per1 = new Person();
//调用类的属性和方法
per1.name = "xu";//属性赋值
System.out.println(per1.age);//调看属性
//调用类的方法
per1.eat();
per1.think();
per1.talk("Chinese");
//new第二个对象
Person per2 = new Person();
System.out.println(per2.name);
//结果为null,说明对per1.name = "xu"不影响per1
//直接赋值
Person per3 = per1;
System.out.println(per3.name);
//结果为我们一开始设置的xu
//原因是这是直接赋值的,指向同一个对象
}
}
class Person{
//定义属性
String name;
int age = 1;
boolean isMale;
//定义方法
public void eat() {
System.out.println("人可以吃饭");
}
public void think() {
System.out.println("人可以思考");
}
public void talk(String languages) {
System.out.println("人可以说话"+languages);
}
}
内存解析
3.3.1属性
package OOP1;
/*
* 类中属性的使用
* 属性 vs 局部变量
* 1.相同点
* 1.1定义格式: 数据类型 变量名 = 变量值;
* 1.2 都是先声明,后使用
* 1.3 变量都有其使用对应的作用域
* 2.不同点
* 2.1在类中声明的位置不同
* 属性:直接定义在类的一对{}内
* 局部变量:声明在方法内、方法形参、代码块、
* 2.2权限修饰符
* 属性:可以在声明属性时,指明其权限,使用修饰符
* 常用的权限修饰符:private,public,protected,缺省
* 局部变量:不可以使用权限修饰符
* 2.3默认初始值
* 属性:有初始化值
* 整形(byte,short,int,long) 0
* 浮点型(float,double) 0.0
* 字符型(char) 0
* 布尔型(boolean) false
* 引用数据类型(类,接口,数组)null
* 局部变量:没有默认初始化值
* 我们在调用局部变量前,一定要为其赋值
* 特别的:形参在调用时赋值即可
* 2.4在内存中的位置不同(非static)
* 属性:加载在堆中
* 局部变量:加载到栈空间
*/
public class UserTest {
}
class User{
public String name = "xu";//属性
private int age = 1;//属性
boolean isMale = false;//属性
public void eat(String food) {//形参,局部变量
food = "西瓜";//局部变量
System.out.println("人会吃"+food);
}
}
3.3.2方法
package OOP1;
/*
* 方法的声明和使用
* 方法:要实现功能
* 1.方法的声明 权限修饰符 返回值类型 方法名(形参){
* 方法体
* }
* 注意:static,final,abstract以后再讲
* 2.返回值问题
* 2.1如果有返回值,在声明时,一定要声明返回值的问题
* 并一定要用return返回变量的值
* 2.2反之(void),则不需要使用return,
* 但是使用的话,只能直接return;表示直接结束方法
*
*/
public class MethodTest {
public static void main(String[] args) {
Method m = new Method();
//m.eat();报错 因为eat权限为private;
m.getName();
}
}
class Method{
String name = "xu";
private void eat() {//private
System.out.println("吃饭了");
}
public void sleep(int hour) {//有形参
System.out.println("睡了"+hour+"小时");
}
public String getName(){//没有形参
return name;
}
}