方法调用时的参数传递原则
如果形式参数的数据类型是基本数据类型(数值型(byte、short、int、long、float、double)、字符型char、布尔型boolean),则实际参数向形式参数传递的值是副本;如果形式参数的数据类型是引用数据类型(数组array、类class、接口interface),则实际参数向形式参数传递的是引用值或地址值或对象的名字而不是对象本身。
即java中只有传值,不传对象。
传值意味着当参数被传递给一个方法或者函数时,方法或者函数接收到的是原始值的副本。因此如果方法或者函数修改了参数,受影响的知识副本,原始值保值不变。 当传递的是对象的引用时,如果在方法中修改被引用对象的内容,这个改变会影响到原来的对象,对象的内容也就变了。而传递的如果是原始类型则不会有影响。
其实很像C++的引用传递和值传递
引用赋值并修改
接下来这个例子主要就是想要说明引用赋值并修改,实则是地址赋值,两个对象指向同一块地址。
```java
package henu;
public class Test1 {
public static void main(String []args){
Flower flower1=new Flower("osmanthus","golden");
System.out.println("This is "+flower1.getName()+" in "+flower1.getColor());
Flower flower2=flower1;
flower2.setColor("silver");
System.out.println("This is "+flower1.getName()+" in "+flower1.getColor());
}
}
class Flower{
private String color;
private String name;
Flower(String name,String color){
this.color=color;
this.name=name;
}
void setColor(String color){
this.color=color;
}
String getColor(){
return this.color;
}
String getName(){
return this.name;
}
void setName(String name){
this.name=name;
}
}
这里值得一提的是一个java文件(就是一个后缀为java的文本)只能有一个pulic class,这里的Flower类就不能加public了!
String类
String 类是不可改变的,所以你一旦创建了 String 对象,那它的值就无法改变了。 如果需要对字符串做很多修改,那么应该选择使用 StringBuffer & StringBuilder 类。 每次对String的操作都会生成一个新的String对象。 StringBuffer 和 StringBuilder 类的对象能够被多次的修改,并且不产生新的未使用对象。 我们知道输出格式化数字可以使用 printf() 和 format() 方法。String 类使用静态方法 format() 返回一个 String 对象而不是 PrintStream 对象。 String 类的静态方法 format() 能用来创建可复用的格式化字符串,而不仅仅是用于一次打印输出。如下所示:
```java
System.out.printf("The value of the float variable is " +
"%f, while the value of the integer " +
"variable is %d, and the string " +
"is %s", floatVar, intVar, stringVar);
```java
String fs;
fs = String.format("The value of the float variable is " +
"%f, while the value of the integer " +
"variable is %d, and the string " +
"is %s", floatVar, intVar, stringVar);
System.out.println(fs);
String类的其他一些常用的方法有length、equals、replace、substring、toString等详细大家可以参考Java API文档
成员变量和局部变量初值、作用域
成员变量有默认初值、而局部变量则没有默认初值
类型 | 初始值 |
---|
boolean | false | char | ‘\u0000’(空格)或’\0’ | byte,short,int,long | 0 | float | +0.0f | double | +0.0 | 对象 | null |
成员变量的作用域为这个类,或在类体中的各个方法种都有效,而局部变量属于特定的方法,作用域为单个方法体
public class Exam_1{
int x;
public void exam(){
int y;
System.out.println("x="+x);
}
public static void main(String []args){
…………
}
}
构造函数
- 成员方法通过对象或类调用或直接调用;构造方法通过new运算符调用
- 构造方法不能有返回值,因为它隐含的返回一个对象
- 在构造函数内可以调用构造函数,其他函数不能调用构造函数
|