面向对象程序编程,自己之前不知道的小知识,学习笔记
来源:互联网 发布:淘宝店铺内部人员解封 编辑:程序博客网 时间:2024/06/06 15:52
1.当this作为多为对象默认引用时,程序可以像访问普通引用变量一样来访问这个this引用,甚至可以把this当成普通方法的返回值。下面有一段代码:
public class ReturnThis {public int age;public ReturnThis grow(){age++;//return this返回调用该方法的对象return this;}public static void main(String[] args){ReturnThis re=new ReturnThis();re.grow().grow().grow();System.out.println(re.age);}}2.关于使用函数swap交换两个数的问题
首先是只在swap函数中实现交换数值,代码:
public class PrimitiveTransferTest {public static void swap(int a,int b){int tmp=a;a=b;b=tmp;System.out.println("swap方法里,a是:"+a+"b是:"+b);}public static void main(String[] args){int a=6;int b=9;swap(a,b);System.out.println("交换过之后,a是:"+a+"b是:"+b);}}这个程序只是在swap函数中实现了两个数位置的交换,返回到main函数中两个数的值并没有交换,传递过去的只是变量的值。
要想在面函数中达到实际的交换参数的值,那么只有将变量的地址传递过去,这样才能真正意义上坐到交换两个参数的值,代码:
class DateWrap{int a;int b;}public class ReferenceTransferTest {public static void swap(DateWrap dw){int tmp=dw.a;dw.a=dw.b;dw.b=tmp;System.out.println("swap中a的值为:"+dw.a+"b的值为:"+dw.b);}public static void main(String[] args){DateWrap dw=new DateWrap();dw.a=6;dw.b=9;swap(dw);System.out.println("mian中a的值为:"+dw.a+"b的值为:"+dw.b);}}这样就达到了交换两个数的目的。
(详细解释:
main()方法中开始调用swap()方法,main()方法并未结束,系统会分别为main()和swap()开辟出两个栈区,用于存放main()和swap()方法的局部变量。调用swap()方法时,dw变量作为实参传入swap()方法,同样采用值传递方式:把main()方法的dw变量的值赋给swap()方法里的dw形参,从而完成swap()方法的dw形参的初始化。值得指出的是,main()方法中的dw是一个引用(也就是一个指针),它保存了DateWrap对象的地址值,当把dw的值赋给swap()方法的dw形参后,即让swap()方法的dw形参也保存了这个地址,即也会引用到堆内存的DataWrap对象。
)
3.形参个数可变的方法
代码:
public class Varargs {public static void test(int a,String... books){for(String tmp:books){System.out.println(tmp);}System.out.println(a);}public static void main(String[] args){test(5,"疯狂Java讲义","轻量级Java EE企业应用实战");}}从test的方法体代码来看,形参个数可变的参数本质就是一个数组参数,也就是说,下列两种方法作用相同
代码1:
public static void test(int a,String... books);代码2:
public static void test(int a,String[] books);但是两种方法在调用函数的时候存在差别
代码1对应调用函数的时候:
test(5,"疯狂Java讲义","轻量级Java EE企业应用开发");代码2对应调用函数的时候:
test(23,new String[]{"疯狂Java讲义","轻量级Java EE企业应用实战"});明显第一种形式更加简洁。实际上,即使采用形参个数可变的形式来定义方法,调用该方法时也一样可以为个数可变的形参传入一个数组。
(注意:长度可变的形参只能处于形参列表的最后。一个方法中最多只能包含一个长度可变的形参,长度可变的形参本质上就是一个数组类型的形参,因此调用包含一个长度可变形参的方法时,这个长度可变的形参既可以传入多个参数,也可以传递一个数组。)
4.方法重载和形参个数可变相结合
代码:
public class OverloadVarargs {public void test(String msg){System.out.println("只有一个字符串参数的test方法");}public void test(String...books){System.out.println("*****形参长度可变的test方法*****");}public static void main(String[] args){OverloadVarargs olv=new OverloadVarargs();//下面两次调用将执行第二个test()方法olv.test();olv.test("aa","bb");//下面调用将执行第一个test()方法olv.test("aa");//下面将调用将执行第二个test()方法olv.test(new String[]{"aa"});}}如果一个类中定义了一个test(String...strings)方法,同时还定义了一个test(String)方法,则test(String...strings)方法的strings不可能通过直接传入一个字符串参数来调用,如果只传入一个字符串参数,则可以采用传入字符串的形式,
(大部分时候后并不推荐重载形参长度可变的方法,因为这样做确实也没有太大的意义,而且容易降低程序的可读性)
阅读全文
0 0
- 面向对象程序编程,自己之前不知道的小知识,学习笔记
- iOS 学习随笔 --基础你不知道的小知识
- java学习笔记(面向对象之前)
- 你可能不知道的编程小问题:程序基本概念
- 你不知道的sql小知识
- 面向对象编程的学习笔记
- Java学习笔记----你可能不知道那些知识,对象复制与引用
- linux编程中,你所不知道的一个小知识
- 你不知道的Java学习笔记20-- 多线程编程
- 你不知道的Java笔记5-- Java的面向对象
- 小程序:你知道的与你不知道的
- 面向对象编程范式##第一章编程之前
- 《JavaScript学习笔记》:第一个面向对象的程序
- C/C++学习笔记(五)面向对象的编程
- 面向对象的编程(学习笔记1)
- Python面向对象的编程--Python学习笔记五
- Java学习笔记之面向对象的Java编程
- 18天Java学习---10.面向对象编程05-面向对象程序的设计步骤
- VS2013+Cmake便于g2o遇到问题:error MSB3073: 命令“setlocal D:\tools\cmake-3.6.0-rc3-win32-x86\bin\cmake.exe -D
- AI的过去和未来
- 正则的几道练习
- 用户管理,组管理,权限管理
- mysql--触发器使用
- 面向对象程序编程,自己之前不知道的小知识,学习笔记
- laravel框架session使用教程
- A. Unimodal Array(段增减性
- springMvc无法访问静态文件
- 复选框选中事件
- python3.6 安装builtwith模块
- Asteroids!
- 快速幂模板(病毒)
- CLion,debug模式程序正常运行,run模式下出现停止运行