java 传值技巧

2.1 方法和参数

1.引用类型和基本类型的其中一个区别就是引用变量不能用双等号检查是否相等。

2.当引用变量作为方法的输入参数时,它的值同通常一样被拷贝,如果方法改变引用变量的值,这种改变是不可见的,但是它如果改变的是引用变量所指向的数据的值,那么这种改变是可见的。如String类型的字符串作为方法的输入参数:

String str1,str2,str3;
str1
= str2 = str3 = " Applet " ;

public static String methord1(String st1)
... { st1+="cation"; return st1; }
public static String methord2(String st2)
... { st2.concat("cation"); return st2; }
public static void methord3(String st3)
... { st3=st3.concat("cation"); System.out.println("st3 is "+st3); }



则输出结果是:
The strings before calling the methord are:
str1=Applet str2=Applet str3=Applet str4=Applet

The parameters after calling the methord are:
st1=Appletcation st2=Applet st3=Appletcation

The strings finally are :
str1=Applet str2=Applet str3=Applet

3.如果引用变量在赋值号的左边,则它的值的改变在外部是不可见的,如果点操作符使用引用变量,则只有数据发生改变,这种改变外部才可见。如:

str1 = str2 = str3 = ”Applet”;
str4
= str1; str5 = str2; str6 = str3;
str1.concat(“cation”); str2
= str2.concat(“cation”); str3 += ”cation”;



则输出结果为:
str1=Applet str2=Appletcation str3=Appletcation
str4=Applet str5=Applet str6=Applet

因为:
str1通过方法concat()产生了一个新的字符串,但str1仍然指向原来的地址
str2通过方法concat()产生了一个新的字符串,并且将新地址赋值给str2,使其指向新的地址
str3先转化为StringBuffer类型,再将新的字符连接在后面,最后转化为String类型。
str4,str5,str6指向原来的地址,仍然输出原有的值

2.2 变量的生命周期

1.如果只需要在方法内部中使用而不在方法之间传递消息,则使用局部变量,当几个方法都需要访问变量的内容和方法需要多个返回值,就要使用成员变量。

2.任何对类变量的修改都会直接影响到其他使用该类变量的表达式的值。

2.3 数组

1.Java中的任何数据类型都可以使用System.out.pritln方法显示。对简单数据类型而言,输出的往往是变量的值;对于像数组这一类复杂的数据类型,它将输出存储数据的内存地址。

2.对于对象数组,在初始化之后,每一个数组的元素的值默认为null,必须再对其元素逐个进行初始化。如

String stringArray = new String[ 3 ]; // 各元素的值默认为null
for ( int i = 0 ;i < stringArray.length;i ++ ) // 对各元素进行初始化,但没有赋值。
stringArray[i] = new String();



3.数组array的length是数组的一个成员变量,表示数组的长度,也即数组的元素的个数,而字符串中的length()是字符串的一个成员方法,表示字符串中包含的字符个数

4.在初始化数组时不要用一个固定值,可以使用一个int型成员变量或是一个常量。

5.数组是引用类型,如果我们将其用作输入参数,那么在方法内对它的数据元素所做的改变将影响到方法之外,如String类型的字符串数组做输入参数:

String str[] = ... {"This ","is"," a"," example"} ;
public static void changeArray(String s[])
... { s[0]="That "; s[1]+="n't"; s[2]=s[2].concat("n"); s[3].concat("Java");}



则输出结果是:
The string array before change is:
This is an example

The string array after change is:
That isn’t an example

The string array finally is:
That isn’t an example //方法中对字符串数组元素所做的改变影响到原有数组的值

6. 操作二维数组不应使用常数之来控制唯数。具体方法是array.length表示行数,array[row].length来表示row行的列数。这样当数组行数和列数不相等时,代码可以自动调整为正确的值。


2.4 文档、调试以及键盘输入

1.文档说明开始于/**,结束于符号*/.
文档说明可以包括HTML格式命令(directives)(除了标题标签)
文档数目之间出现在他们引用的类名,变量和方法之前
文档说明可以包括特殊的命令(directives)行
@author Name:说明代码的作者
@version Number/Date:用于指出版本号和代码完成日期
@see Class#references:用于链接其他的文档说明
@return rType:用于指出方法的返回类型
@exception exType:用于指出方法所抛出的异常

2. 一个完整的程序和类应该包括适当的文档说明,而且至少应该:
使用javadoc生成文档说明,给出这个类的作用的简明描述
通过@author标签指出作者名
通过@version标签指出版本号和代码日期
使用javadoc给类中的每个方法生成简明描述,指出方法的所有输入参数的含义和返回类型。若方法的输入参数有特殊要求,也需要指出。

3. 要使用javadoc工具,可以在命令行中输入:
javadoc [options] SourceCodeFile.java

4. Javadoc根据缺省为每个java源文件生成一个HTEL文件、类层次文件和overviewtree.html和索引文件index.html

5. 可以通过插入System.out.println语句来观察方法内的执行情况,可以临时注释一些需要分析的代码,以观察结果,突出显示这些临时加入的System.out.println语句,以便事后删除。

2.5 基本数据类型的封装类

1.基本类型的封装类(wrapper)用来存储数据,增强功能,使他们能通过“.”操作符完成一些操作。

2.所有的封装类的名字都以一个大写字母开头,并与相应的基本数据类的名字相关联。

3.所有的封装类都被定义为引用类型。

4.封装类可以存储和返回基本数据类型。

5.封装类可以通过点操作符使用一些实用方法。

6.Java包含基本的封装类Character, Double, Integer.每个类都将对应的基本数据类型封装在一个对象中,该对象存储实际数据和对这种数据的使用方法。

7.要产生一个封装类的对象,必须通过运算符new来生成,不能像基本数据类型变量一样,直接定义并生成。

8.封装类的使用方法有两种:
varName.methodName(parameterList) //使用与封装类变量相关的方法
WrapperClass.methodName(parameterList) //直接使用与封装类相关的方法

9.与类相关的方法,必须通过类名而不是变量名来条调用这些方法。

10. 要将字符串转化为实型或整型数据,可以通过两个步骤:
1).先用valueOf()生成Double或Integer变量。如:

String s1 = 123.4 ”;
String s2
= 123 ”;

// 先用valuOf()生成一个Double变量,返回值为Doub型
Double d = Double.valueOf(s1);
// 先用valuOf()生成一个Double变量,返回值为Double 型
Integer i = Integer.valueOf(s2);



2).在通过方法doubleValue()或intValue()将Double类型或Integer类型的值转化为double或int类型。
return d.doubleValue(); //通过方法doubleValue()将Double型转化为double型
return i.intValue(); //通过方法doubleValue()将Double型转化为double型

11.有关封装类的几个注意点:
1). 封装类变量与基本数据类型的变量的区别:
可以用基本数据类型变量来初始化一个封装类变量,但不能直接将一个基本数据类型变量的值赋给一个封装类变量。如:

int i = 1 ; double d = 1.0 ;
Integer ii
= new Integer(i); Double dd = new Double(dd); √
Integer ii
= i; Double dd = d; ×



2). 封装类型变量与基本数据类型变量的之间的相互转换:
(1). 封装类变量??>基本数据类型变量
先生成一个封装类变量,再调用intValue()或doubleValue()方法
(2). 基本数据类型变量??>封装类变量
将基本数据类型变量作为封装类变量的构造方法的参数

3). valueOf()与intValue()和doubleValue()的区别:
valueOf(String s) intValue() doubleValue()
参数类型 String类型 不带参数 不带参数
返回值类型 Double/Integer类型 int double
调用者 类 类变量 类变量

4). toString()与toString(int i)和toString(double d)的区别:
toString() toSting(int i) toString(double d)
参数类型 不带参数 int double
返回值类型 String String String
调用者 类变量 类 类

5). 一般情况下需要输入参数的方法由类调用,不需要输入参数的方法由类变量调用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值