面向对象和面向过程思想的区别
Java特性,相对于C,C++,Python:
健壮性,简单性,安全性,可移植性,多线程性,面向对象性。
1、概念:
对象泛指现实实现中的一切事务,每种事务都具有自己的属性和行为。面向对象的思想就是在计算机程序设计过程中,参照现实中的事务,将事物的属性特征、行为特征抽象出来,描述成计算机事件的设计思想,它区别于面向过程思想,强调的是通过调用对象的行为来实现功能,而不是自己一步步去操作去实现的。(面向对象的思想:就是对现实社会中事务的抽取)
解释一下,对象泛指现实中一切事务==万物皆对象;每种事务都具有自己的属性和行为:
比如说
对象:狗
属性:名字、年龄、性别
行为:汪汪叫,吃屎,看家
区别:
面向过程:强调的是每一步的步骤,强调的是过程。
经典案例:打开电脑 开机 带上耳机 打开浏览器 输入网址 选择喜欢的 播放 脱裤子 擦干净 清除浏览痕迹 关闭浏览器 拿下耳机 关机
面向对象: 强调的是调用对象来完成,不在意每一步的步骤。
经典案例:找一个对象(收藏夹),打开浏览器 打开收藏夹 直接打开看。(省去了步骤)
面向对象思想更符合人类的思想——懒,面向对象可以把我们从执行者变成指挥者,面向对象的语言中,包含了三大基本特征,即封装、继承和多态。
2、什么是类呢?
类是一组相关属性和行为的集合,可以看作是一类事物的模板,使用事务的属性特征和行为特征来描述该类事务。
现实中描述一类事物:
属性:该事务的状态信息。
行为:该事务可以做什么。
类:用来描述现实社会中的一些事务。
对象:生活中具体的事务。
3、什么是对象呢?
万物皆对象
-
对象:是一类事物的具体体现。对象是类的一个实例(对象并不是找个女朋友),必然具备该类事物的属性 和行为。
现实中,一类事物的一个实例:一只小猫。
举例:一只名叫tom小猫。
属性:tom、5kg、2 years、yellow。 行为:溜墙根走、蹦跶的跑、喵喵叫。
4、类与对对象关系
类是对一类事物的描述,是抽象的。
对象是一类事物的实列,是具体的(实例=对象 ,实例化=创建对象)
类是对象的模板,对象是类的实体。一个类可以创建多个对象。
举例: 对象:小猫
属性:名字、体重、年龄、颜色
行为:走、跑、叫。
类
2.1创建类
关键字 class
class 类名 符合标识符命名规则,并且规范 首字母大写,后面驼峰
类名和Java文件名必须一致
public class 类名{
//属性
//行为
}
//一个java文件中可以写多个类
//但是一个java中文中只能写一个public修饰的类,并且public修饰的类名要和文件名一致
//规范:一个java文件只写一个类 前期 为了大家理解方便,我会在一个java文件中写多个类
//class Person类名
public class Person {
}
class Cat{
}
class Dog{
}
2.2 定义属性
属性语法:
修饰符 数据类型 属性名;
//类名
public class Person{
// 属性
//修饰符 数据类型 属性名;
//属性的名字 首字母小写 后边的驼峰
//年龄属性
public int age;
//身高属性
public double height;
//名字属性
public String name;
//地址属性
public String address;
//性别
public String sex;
}
2.3 定义行为
行为在Java中被称为方法
语法·: 修饰符 返回值类型 方法的名字(参数){
}
//类名
public class Person {
//属性
//修饰符 数据类型 属性名;
//属性的名字 首字母小写,后面驼峰
//年龄属性
public int age;
//身高属性
public double height;
//名字属性
public String name;
//地址属性
public String address;
//性别
public String sex;
/*
修饰符 返回值类型 方法的名字(参数){
//代码 干啥用代码描述
}*/
//方法的名字 首字母小写,后面驼峰
//说话
public void say() {
//干啥用代码描述
System.out.println("奥利给!");
}
//吃饭
public void eat() {
System.out.println("吃饭");
}
//编程
public void program() {
System.out.println("coding ....");
}
}
3、对象
3.1 如何创建对象
类一旦声名完毕,如果没有具体对象存在,那么这个类没有意义
需要得到一个具体的对象(实例)
语法: 类名 变量名 = new 类名();
这个代码写在哪里?
我们想要运行Java代码,入口类,这个入口类必须又有一个main方法
//我们要想运行java代码,入口类,这个入口类必须有一个main方法
public class PersonDemo {
public static void main(String[] args) {
//指挥者
//创建对象
//类名 对象名=new 类名();
//声明Person类型的变量就进行赋值
Person person1=new Person();
//定义一个person类型的变量
Person person2;
//赋值
person2=new Person();
}
}
3.2 如何使用对象
使用对象:就是设置对象的属性或者获取对象的属性,以及调用对象的行为
3.3 如何获取对象的属性
语法 :
对象名.属性 进行调用
变量类型 变量名 = 对象名.属性;
//我们要想运行java代码,入口类,这个入口类必须有一个main方法
public class PersonDemo {
public static void main(String[] args) {
//指挥者
//创建对象
//类名 对象名=new 类名();
//声明Person类型的变量就进行赋值
Person person1=new Person();
//获取属性
//变量的类型 变量名=对象名.属性;
int age=person1.age;
//我们在编写类的时候没有给初始化值
//系统会自动给出默认值 byte short in long 默认都是0
//float double都是0.0 boolean是false char ' ' 引用数据类型默认值是 null String是属于引用数据类型
System.out.println(age);//0
//获取地址
System.out.println(person1.address);//null
//获取身高
System.out.println(person1.height);//0.0
}
}
3.4 定义类的时候给出默认值
public class Person {
//属性
//修饰符 数据类型 属性名;
//属性的名字 首字母小写,后面驼峰
//年龄属性
public int age;
//身高属性
public double height=50;
//名字属性
public String name;
//地址属性
public String address="中国";
//性别
public String sex="男";
}
package day08;
//我们要想运行java代码,入口类,这个入口类必须有一个main方法
public class PersonDemo {
public static void main(String[] args) {
//指挥者
//创建对象
//类名 对象名=new 类名();
//声明Person类型的变量就进行赋值
Person person1=new Person();
//获取属性
//变量的类型 变量名=对象名.属性;
int age=person1.age;
//我们在编写类的时候没有给初始化值
//系统会自动给出默认值 byte short in long 默认都是0
//float double都是0.0 boolean是false char ' ' 引用数据类型默认值是 null String是属于引用数据类型
System.out.println(age);//0
//获取地址
System.out.println(person1.address);//中国
//获取身高
System.out.println(person1.height);//50.0
}
}
如果没有给出值,获取的就是默认值,如果我们在定义类的时候给出了默认值,那么获取的就是我们给出的默认值。
3.5 如何给属性赋值
对象名.属性 = 值;
Person person1=new Person();
//如何给对象的属性进行赋值
//对象名.属性=值;
System.out.println(person1.age);//0
//新的值来了,旧的值就被覆盖了
person1.age=1;
System.out.println(person1.age);//1
System.out.println(person1.name);//null
person1.name="奥利给";
System.out.println(person1.name);//奥利给
//改变的是对象的属性,所以对另外一个对象没有影响
Person person2=new Person();
System.out.println(person2.name);//null
3.6 如何调用对象的行为
语法 : 对象名.方法名();
调用一次执行一次
person1.eat();
person1.program();
person1.eat();
4 方法
4.1 成员变量和局部变量的区别
1、在类中的位置不同:
成员变量在类中方法外;局部变量在方法中定义的变量(方法里边 方法声明)
2、 作用范围不同 :
成员变量在类中都可以使用,局部变量只有在定义该变量的方法中使用
3、存在的内存位置不同:
成员变量在堆内存,局部变量在栈内存
4、初始值不同
成员变量默认初始化,局部变量没有默认初始化,必须定义赋值后使用
5、生命周期不同
成员变量随着对象创建而存在,随着对象消失而销毁;局部变量随着方法调用而存在,随着方法调用完毕而消失。
class Variable{
//成员变量 类中方法外
public int num;
public int num2;
public void show() {
//局部变量 在方法中定义的变量,生命周期是在方法定义的{}中
int i=0;
//int num2=30;
System.out.println(num2);
System.out.println(i);
}
public void show2() {
System.out.println(num2);
}
}
public class VariableDemo {
public static void main(String[] args) {
//局部变量
//局部变量必须要赋值才输出 没有默认值
int i;
//System.out.println(i);
}
}
4.2 方法定义格式
修饰符 返回值 方法名 (参数类型 参数名,参数类型 参数名2){
代码
return 返回值;
}
返回值类型:就是功能返回的结果数据类型
参数: 形式参数 就是定义在方法的声明中,用于接收实际参数
return:结束方法的
返回值:就是功能允算的结果,有return调用给调用者
4.3 有参数 没有返回值
class Number{
//需求:我给你两个整数,两个整数相加,打印出来
//定义一个方法的时候:两个明确
//A:返回值类型: 结果的数据类型
//B:参数列表: 你要传递几个参数,以及每个参数的类型
//void 代表没有返回值
public void sum(int a,int b) {//int a=1,int b=2
//封装重复代码的
int c=a+b;
System.out.println(c);
//方法写完后需要结束 return 用于结束方法,并且返回结果
//如果一个方法没有返回结果,返回类型为void return不用跟值,return可以省略,系统会自动生成
//return;
}
}
public class MethodDemo01 {
public static void main(String[] args) {
//方法我们如何进行调用?
//1.不管是属性还是行为,必须先有对象
//2.创建对象
Number number=new Number();
//3.调用方法 需要传递两个值
//方法调用一次执行一次,相互之间没有干扰
number.sum(1,2);
number.sum(3, 5);
number.sum(99, 100);
}
}
4.4 形式参数和实际参数
实际参数就是实际参数的值;
形式参数就是定义在方法中的声明中,用于接收实际参数
4.5 有参数 有返回值
class Number2{
//需求:我给你两个整数,你给我相加然后把结果给我
//两个明确:
//A:返回值类型 整型
//B:参数列表
public int sum(int a,int b) {//int a=1,int b=2
int c=a+b;//int c=1+2=3
return c;//3
}
}
public class MethodDemo02 {
//1.单独调用 一般来说没有意义
//2.输出调用 但是不够好,因为后期会对结果进行进一步的处理
//3.赋值调用 用一个变量接收返回的值,推荐方案
public static void main(String[] args) {
//1.用Number2这个类创建一个对象,然后把对象的内存地址赋值给number2这个局部变量
Number2 number2=new Number2();
//2.调用方法
//1.单独调用 一般来说没有意义
//number2.sum(1, 2);
//2.输出调用
//System.out.println(number2.sum(1, 2));
//3.赋值调用
int result=number2.sum(1, 2);
System.out.println(result);
}
}
4.6 没有参数没有返回值
class Phone{
//品牌
public String brand;
//价格
public double price;
//颜色
public String color;
//打电话
public void call() {
System.out.println("打电话");
}
//打游戏
public void playGame() {
System.out.println("打豆豆");
}
//上网
public void surfTheInternet() {
System.out.println("上网");
}
}
4.7 没有参数但是有返回值
class Number2{
//没有参数,但是有返回值
public int sum2() {
return 100;
}
}
public class MethodDemo02 {
//1.单独调用 一般来说没有意义
//2.输出调用 但是不够好,因为后期会对结果进行进一步的处理
//3.赋值调用 用一个变量接收返回的值,推荐方案
public static void main(String[] args) {
//1.用Number2这个类创建一个对象,然后把对象的内存地址赋值给number2这个局部变量
Number2 number2=new Number2();
//输出调用
System.out.println(number2.sum2());
//赋值调用
int result2=number2.sum2();
System.out.println(result2);
}
}