码迷,mamicode.com
首页 > 其他好文 > 详细

十三、面向对象

时间:2021-06-22 17:52:05      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:布尔值   作用域   多个   private   jdk   get   string   描述   导致   

一、简述

面向过程与面向对象:

面向过程:是一种以过程为中心的编程思路,功能的每一块都是由自己来实现的
面向对象:是一种以对象为中心的编程思路,通过指挥对象实现具体的功能

面向对象的三条主线:

Java类及类的成员:属性,方法,构造器,代码块和内部类
面向对象的三大特征:封装型,继承性,多态性,(抽象性)
其他关键字:this,super,static,final,import等

二、类和对象

类是对一类事物的描述,是抽象的、概念上的定义;
对象是实际存在的该类事物的每个个体,因而也称为实例(instance);
面向对象程序设计的重点是类的设计;类的设计,其实就是类的成员的设计。

1.1、类的成员

  • 属性 属性 = 成员变量 = field = 域、字段
  • 方法 方法 = 成员方法 = 函数 = method
  • 创建类的对象 = 类的实例化 = 实例化类
public class PersonTest {
    public static void main(String[] args) {
        //创建Person 类的对象
        Person p1 = new Person();   //【二】、创建Person 类的对象

        //调用属性: 对象.属性
        p1.name = "jankin";         //【三】、调用
        p1.age = 22;
        System.out.println("名字:"+p1.name+",年龄:"+p1.age);

        //调用方法: 对象.方法
        p1.talk("Chinese");
        
        //************************  //【四】、每个对象都独立的拥有一套类的属性
        Person p2 = new Person();
        System.out.println(p2.name); //null
        
        //************************  // 【五】、将变量保存的地址值给p3,导致p1和p3指向了对空间中的同一个实体
        Person p3 = p1;
        System.out.println(p3.name); //jankin
        p3.age = 21;
        System.out.println(p1.age); //21
    }
}

class Person {       //【一】 、创建类,设计类的成员
	
    //属性
    String name;
    int age;

    //方法
    public void talk(String language){
        System.out.println("我可以说"+language);
    }
}

技术图片

1.2、类成员之:属性和方法


类中属性的使用

属性(成员变量 vs 局部变量)
成员变量:直接定义在类的一对{}内的变量
局部变量:声明在方法内方法参数,代码块、构造器内部的变量

1.相同点:
	1.1 变量格式是一样的 【变量类型 变量名= 变量值】
	1.2 先声明,后赋值
	1.3 变量都有其对应的作用域
2.不同点:
	2.1 在类中声明的位置的不同
		属性(成员变量),直接定义在类的{}内
		局部变量:声明在方法内,方法形参,代码块内,构造器形参内的变量
	2.2	关于权限修饰符的不同
		属性:可以在声明属性时,指定其权限,使用权限修饰符
			常用的权限修饰符:private,public,缺省,protected
		局部变量:不可以使用权限修饰符的	
	2.3 默认初始化值的情况
		属性:类的属性,根据其类型,都是默认初始化值	
			整形:0
			浮点型:0.0
			布尔值:false
			char:‘0‘或‘\u0000’
			引用型:null
		局部变量:没有默认初始化值
        	意味着,我们调用变量的时候,一定要显式赋值(不然会报错)
        	特别的形参调用的时候,我们赋值即可
	2.4加载的位置不同
		属性:加载在堆空间中(非start)
		局部变量:加载在栈空间

局部变量不能使用权限修饰符

技术图片

局部变量没有初始值

技术图片


类中的方法:描述类应该具有的功能

1.举例
    public void eat(){}
    public void eat(int num){}
    public String eat(){}

2.方法的声明
	权限修饰符 返回值类型 方法名(形参列表){方法体}
	
3.说明:
	3.1 关于权限修饰符
		java规定的4种权限修饰符:private,public,缺省,protected
		
	3.2 返回值:有返回值vs没有返回值
		- 如果方法有返回值,则必须在方法声明的时候,指定返回值的类型。同时,方法中,需要使用return返回指定类型的变量或常量。
		- 如果方法没有返回值,则方法声明时,使用void表示。通常,没有返回值的方法中就不需要使用return ,但是,如果使用的话,只能“return;”表示结束此方法的意思
		
	3.3方法名:属于标识符,遵循标识符的规则和规范,“见名知意”	
	
	3.4形参列表:方法可以声明随意个形参,多个形参用“,”分格
		
	3.5方法体:方法功能的实现	

4.return 关键字的使用
	> 使用范围:使用在方法体中
	> 作用: 1.结束方法      2.针对有返回值类型的方法,返回“return 数据”
	> 注意点:return关键字后面不能声明执行语句

5.方法的使用中,可以调用当前类中的属性或方法
	> 特殊的:方法a中又调用方法a:称递归方法
	> 方法中不能定义别的方法	

1.3、万事万物皆对象

  • 在java语言范畴中,我们都将功能,结构等封装到类中,通过类的实例化,来调用具体的功能结构
  • 涉及到java语言与前段html,后端的数据交互时,前后端的结构在java层面交互时,都体现为类、对象

对象数组的内存解析说明

引用类型的变量,只能存储2类值 (null和地址值)

技术图片

匿名对象的使用
new Phone().sendEmail();
	1.理解:我们建的对象,没有显式的赋给一个变量,即为匿名对象
	2.特征,匿名对象只能调用一次.	
public class InstanceTest {
    public static void main(String[] args) {
        PhoneMall mall = new PhoneMall();
        mall.show(new Phone());
    }
}

class PhoneMall{
    public void show(Phone ph1){
        ph1.price = 1999;
        ph1.showPrice();
    }
}
class Phone{
    double price;

    public void showPrice(){
        System.out.println("手机价格为:"+price);
    }
}

1.4、再谈方法

1.4.1、方法的重载
  • 定义:在同一个类中,允许存在一个以上的同名方法,只要他们的参数个数或者参数类型不同即可
  • 两同一不同
    • 同一个类,相同的方法名
    • 参数列表不同,参数个数不同,参数类型不同
  • 跟方法的权限修饰符、返回值类型、形参变量名、方法体都没有关系
  • 在通过对象调用方法时,如何确定某一个指定的方法
    • 方法名 ---> 参数列表

以上面的买手机为例

class PhoneMell{
    public void show01(Phone p1){
        p1.price = "1999元";
        p1.show("优惠多多");
    }
}

class Phone{
    public String price;
    public void show(){
        System.out.println("手机价格:"+this.price);
    }

    public void show(String str){
        System.out.println("手机价格:"+this.price + ";" + str);
    }
}
1.4.2、可变个数的形参
  • jdk 5.0 新增的方法

  • 具体使用:

    1.可变个数的形参的格式:数据类型 ...变量名
    2.当调用可变个数形参的时候,可以传任意个形参,包括0个,
    3.可变个数形参的方法与本类中方法名相同,形参不同的方法之间构成重载
    4.可变个数形参的方法与本类中方法名相同,形参类型也相同的 数组 之间不构成重载。可以说,二者不能共存
    5.可变个数形参在方法的形参中,最多只能声明一个可变形参,并且只能放在最后

技术图片

执行可变个数形参

public class zhTest {
    public static void main(String[] args) {
        zhTest z = new zhTest();
        z.show("hello","world");
    }

    public void show(String str){
        System.out.println(str);
    }
    public void show(String ...strs){
        System.out.println("strs");
    }
}

形参类型也相同的 数组,二者不能共存

技术图片

1.4.3、方法形参的传递机制

形参:方法定义时,声明的小括号内的参数
实参:方法调用时,实际传递给形参的值
值传递机制:

如果参数是基本数据类型,此时实参赋给形参的是实参真实储存的数值
果变量是引用数据类型,此时赋值的是变量所保存的数据的地址值

基本数据类型形参的值传递机制
技术图片

引用数据类型形参的值传递机制
技术图片

1.4.4、递归方法
  • 1.递归方法:一个方法体内调用它自身。
    • 方法递归包含了一种隐式的循环,他会重复执行某段代码,但这种重复执行无须循环控制。
    • 递归一定要向已知方向递归,否则这种递归就变成了无穷递归,类似死循环
public static void main(String[] args) {
    ZhTest test = new ZhTest();
    int num = test.getSum(3);
    System.out.println(num);
}
public int getSum(int n){
    if(n == 1){
        return 1;
    }else{
        return n + getSum(n-1);
    }
}

十三、面向对象

标签:布尔值   作用域   多个   private   jdk   get   string   描述   导致   

原文地址:https://www.cnblogs.com/6ovo6/p/14916058.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!