1.6 Java复习之面向对象基础(创建及调用)

面向对象的三大特征

封装  (Encapsulation)

继承  (Inheritance)

多态  (Polymorphism)


完成需求时:


先去找具有所需功能的对象来用。

如果该对象不存在,那么创建一个具有所需功能的对象。

这样简化开发并提高复用。


类对象的内存结构分析



成员变量在堆空间


成员变量定义在类中,在整个类中都可以被访问。

成员变量分为类成员变量和实例成员变量,实例变量存在于对象

所在的堆内存中。

成员变量有默认初始化值。

成员变量的权限修饰符可以根据需要,选择任意一个

局部变量:

局部变量只定义在局部范围内,如:方法内,代码块内等。

局部变量存在于栈内存中。

作用的范围结束,变量空间会自动释放。

局部变量没有默认初始化值,每次必须显式初始化

局部变量声明时不指定权限修饰符





方法格式:


修饰符  返回值类型  方法名 ( 参数列表) {
       方法体语句;

}


当通过对象调用方法时,将方法的返回值返回给调用的当前对象


return其后不可放置语句


类的访问机制:


在一个类中的访问机制:类中的方法可以直接访问类中的成员变

量。(例外:static方法访问非static,编译不通过。)


在不同类中的访问机制:先创建要访问类的对象,再用对象访问

类中定义的成员。






数组方法的封装




 封装方法的相同部分




重载


例子:printIn()方法


注释:选中+ctrl+/   (单行注释掉)

      选中+Ctrl+shift+/  (多行注释掉)


方法名同,参数列表同---》同一方法


参数列表不同,包括参数顺序,参数个数,参数类型




练习:


与void show(int a,char b,double c){}构成重载的有:

  void show(int x,char y,double z){}   //no

  int show(int a,double c,char b){}   //yes

  void show(int a,double c,char b){}  //yes

  boolean show(int c,char b){}  //yes

  void show(double c){}  //yes

  double show(int x,char y,double z){}  //no

  void shows(){double c}  //no




参照上图,注释int类型方法后,则数据自动类型转换,改为调用double类型方




练习:


1)类的创建和使用




2)





以上为两种写法,控制最后打印的半径+1



匿名类对象


我们也可以不定义对象的句柄,而直接调用这个对象的方法。这

样的对象叫做匿名对象。

如:new Person().shout();



可变个数形参的方法


//以可变个数形参来定义方法


public static void test(int a ,String…books);





可变个数形参方法包含零个参数,所以实际包含方法2,方法1,

但调用,时,若无参数,仍优先调用方法2,若无方法2的声明,

则调用可变个数形参


如上图,可变个数形参相当于数组,所以以上两方法为同一方法


如下图,可变个数形参的使用方法同数组,都有.length



参数传递


方法,必须有其所在类或对象调用才有意义。若方法含有参数:


形参:方法声明时的参数

实参:方法调用时实际传给形参的参数值

Java里方法的参数传递方式只有一种值传递。即将实际参数值

的副本(复制品)传入方法内,而参数本身不受影响。




实例:



注意栈的先进后出


方法的形参名为(int i,int j)


上图理解不够清晰,现在改变方法的形参名为int m, int n

(对程序无影响,只是为了便于理解),内存结构如下





值交换成功,内存分析如下


传递的是地址值,所以交换成功(叉号表示方法执行完毕,方法

的局部变量出栈)


回顾:数组的排序



并不能交换两数组元素,因为基本数据类型变量为值的复制,而

改用数组(引用数据类型),即地址值传递,才能真正交换元素

值,正确写法如下



实例


结果为15 0 20,分析如下




猜你喜欢

转载自blog.csdn.net/lwz45698752/article/details/80416677
1.6