首页 > 代码库 > HeadFirstJava学习心得——方法

HeadFirstJava学习心得——方法

如果方法中传入的参数是对象而不是基本数据类型应该怎么办?

在java中传递的所有的东西都是值,但此值是变量所携带的值。引用对象的变量所携带的是远程控制而不是对象本身。如果对方法传入参数,实际上传入的是远程控制的拷贝。

方法可以声明为多个返回值吗?

方法只能声明单一的返回值。如果需要返回3个int值,就把返回值的类型声明为int数组,把值装进数组中返回。如果有混合的不同类型的值需要返回的时候,可以使用ArrayList。

setter和getter方法

setter和getter方法本质上是一种封装,防止外界用原点运算符直接操作,造成不当的后果。要设置属性的值必须统一通过setter方法,可以在setter方法中增加检验传入数据的值,从而使属性中的值不被随意修改。
class Student {
	private String name = "Tom";
	private int age = 18;

	public String getName() {
		return name;
	}

	public void setName(String name) {
		if (name != null && !name.equals("")) {
			this.name = name; // 姓名不能为空
		}

	}

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		if (age > 0) {
			this.age = age; // 年龄非负
		}
	}

}

public class StudentDriver {
	public static void main(String[] args) {
		Student stu = new Student();
		stu.setAge(-6);
		stu.setName("");
		System.out.println("姓名:" + stu.getName() + " 年龄:" + stu.getAge());
	}
}

运行结果:
姓名:Tom 年龄:18
main()方法中的两个set操作并没有成功给stu完成属性的设置,stu的属性还是其默认值。在以上代码中利用setter()中的方法进行不良属性的过滤,从而避免了人为恶意地修改类中的属性。

实例变量与局部变量的区别:

  1. 实例变量声明在类中而不是方法中;
    class Student {
    	private String name = "Tom";
    	private int age = 18;
            //其他代码
    }<span style="white-space:pre"></span>
  2. 局部变量声明在方法中;
    class AddThing {
    	int a, b = 12;			//实例变量
    
    	public int add() {
    		int total = a + b;	//局部变量
    		return total;
    	}
    }
  3. 局部变量在使用前必须进行初始化
    class Foo{
    	public void go(){
    		int x;
    		int z = x + 3;	//无法通过编译,因为在使用之前没有值
    	}
    }

java中的相等

对于基本数据类型,使用“==”比较的是其中的字节序列,如:
<span style="white-space:pre">		</span>int a = 3;
		byte b = 3;
		String str = a==b?"相等":"不等";
		System.out.println(str);

以上程序将会打印“相等”。

HeadFirstJava学习心得——方法