面向对象(上)Part2

2021-05-24  本文已影响0人  人生如戏丢雷楼目

属性(成员变量)和局部变量

class User{
//属性,直接定义在类的一对{}内
String name;
int age;
//局部变量:定义在方法内、方法形参、代码块内、构造方法形参、//构造器内部的变量
public void learn(String type){//方法括号内的叫做形参
System.out.println("我们爱上"+type+"课")
}
public void eat(){
String name="jj";//定义在方法内部也是形参 局部变量
}
}

根据上面的例子发现

局部变量和属性的特点

相同点

  1. 都有各自的作用域

  2. 格式都是 数据类型 变量名 = 值

  3. 先声明,后使用

    不同点:

    1. 在类中声明的位置不同

      属性直接定义在类中

      局部变量定义的范围是在方法中,构造方法内部,代码块(函数内部)范围比属性要小

    2. 属性声明时可以使用权限修饰符(定义权限) 体现封装性

      private String 缺省 protected

      private int age;
      

      而局部变量禁止使用修饰符

    3. 关于默认初始化值的不同

      属性可以有默认初始化值

      整型:byte int short short 0

      浮点型 double float 0.0

      字符型:char 0

      布尔型:boolean false

      引用数据类型:类 数组 接口 String : null

      局部变量没有初始化值

补充:几个概念的使用说明


万事万物皆对象

类:类是一类事物的描述,是抽象的,概念上的定义

对象:对象是实际存在的该类事物的每个个体,因而被称为实例

理解万事万物皆对象:

将功能、结构封装到类中,通过类的实例化,调用类的功能结构

涉及到前端html后端sql语言,在java层面都定义为对象


方法重载 overload

重载:类中允许多个同名方法,返回值类型相同,前提是必须参数列表不同(顺序,数据类型,参数类型)

在对象调用方法时,如何确定调用的是哪个方法

1:先看方法名

2:由于方法的重载,看完方法名再看参数列表

public class User{
//在同一个类中,方法名相同,返回类型相同,参数列表不同,重载
public void shit(){

}
public void shit(String n , int s){

}
    //返回值类型不同,报错
public int shit(String s){
    return 1;
}
}

方法参数的值传递机制

class N1{
//值的传递并不会改变其他值
n=20;
m=n
syso(m,n);//20  20
n=21;
syso(m,n)//20 21
Order o1 = new Order();
o1.num=12;
//这里指的是他们的地址值相同
//而不是他们的值相同,只有两者中用谁改变了地址值,两者都会同时改变
Order o2 = o1;

}

基本数据类型的值传递

值传递2.png 值传递3.png

以上例子说明如果实参是基本数据类型,实参赋给形参的是实参真实存储的数据值

引用数据类型的值传递

1:给对象中的值赋值

值传递5.png 值传递 6.png 值传递7.png
值传递8.png

如果参数是引用数据类型,实参赋予给形参的是变量保存的地址值

上一篇 下一篇

猜你喜欢

热点阅读