一、引用传递
【案例-1】
代码
class Ref1{
int temp = 10;
}
public class Demo08 {
public static void main(String[] args) {
Ref1 r1 = new Ref1();
r1.temp = 20;
System.out.println(r1.temp);
tell(r1);
System.out.println(r1.temp);
}
public static void tell(Ref1 r2) {
r2.temp = 30;
}
}
结果:
20
30
【案例-2】
代码
public class Demo09 {
public static void main(String[] args) {
String str1 = "hello";
System.out.println(str1);
tell(str1);
System.out.println(str1);
}
public static void tell(String str2) {
str2 = "jike";
}
}
结果:
hello
hello
【案例-3】
代码
class Ref2{
String temp = "hello";
}
public class Demo10 {
public static void main(String[] args) {
Ref2 r1 = new Ref2();
r1.temp = "jike";
System.out.println(r1.temp);
tell(r1);
System.out.println(r1.temp);
}
public static void tell(Ref2 r2) {
r2.temp = "xueyuan";
}
}
结果:
jike
xueyuan
二、this关键字
使用
- 表示类中的属性和调用方法。
- 调用本类中的构造方法。
- 表示当前对象。
代码一
class People{
private String name;
private int age;
public People(String name,int age){
this();//通过this调用构造方法,必须方法构造方法的首行
//通过this调用本类中的属性
this.name = name;
this.age = age;
}
//无论什么情况下都要执行此方法
//需要在其他构造方法中调用此方法
public People(){
System.out.println("无参数构造方法");
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public void tell() {
//通过this调用当前类中的方法
System.out.println("姓名:"+this.getName()+" "+"年龄:"+this.getAge());
}
}
public class Demo11 {
public static void main(String[] args) {
People p = new People("张三", 30);
p.tell();
}
}
结果:
无参数构造方法
姓名:张三 年龄:30
代码二
package cn.sec.ch02;
class People1{
public void tell() {
System.out.println(this);
}
}
public class Demo12 {
public static void main(String[] args) {
People1 p1 = new People1();
System.out.println(p1);
p1.tell();
//通过People1实例化的对象和this得到的对象是一个对象
//通过this可以表示当前对象
}
}
结果:
cn.sec.ch02.People1@7852e922
cn.sec.ch02.People1@7852e922
三、static关键字
- 使用static声明属性:static声明全局属性
- 使用static声明方法:直接通过类名调用
- 注意点:使用static方法的时候,只能访问static声明的属性和方法,而非static声明的属性和方法是不能访问的。
示例一
代码
class PersonA{
String name;
private static String country = "北京"; //声明成静态的,是大家公有的属性
public PersonA(String name){
this.name = name;
}
public static String getCountry() {
return country;
}
public static void setCountry(String country) {
PersonA.country = country;
}
public void tell() {
System.out.println("姓名:"+name+" 出生地:"+country);
}
}
public class Demo13 {
public static void main(String[] args) {
// TODO Auto-generated method stub
PersonA.setCountry("上海");//静态的方法通过类名调用 ,可以在实例化之前调用
PersonA pA1 = new PersonA("张三");
// PersonA.country = "上海"; //静态的属性通过类名调用
pA1.tell();
PersonA pA2 = new PersonA("李四");
// pA2.country = "上海";
pA2.tell();
PersonA pA3 = new PersonA("王五");
// pA3.country = "上海";
pA3.tell();
}
}
结果:
姓名:张三 出生地:上海
姓名:李四 出生地:上海
姓名:王五 出生地:上海
示例二
代码
public class Demo14 {
private static int i = 10;
public static void main(String[] args) {
// TODO Auto-generated method stub
//使用static方法的时候,只能访问static声明的属性和方法,而非static声明的属性和方法是不能访问的。
System.out.println(i);
tell();
}
public static void tell() {
}
}