值传递
基本数据类型的传递:
形参改变后不对实参造成影响,使用实参值填充的形参,传递的是对象本身。
引用类型传递:
引用数据类型作为参数传递,传递的是对象的地址,实参和形参是同一个对象,任一方改变,另一方也变。传递的是对象的引用。
this关键字
在类中表示当前正在访问的对象
this.成员变量名————显示的当前访问的对象的成员变量。
在一个类的方法或构造方法内部,可以使用“this.成员变量名”这样的格式来引用成员变量名,常常用来区分同名的成员变量和局部变量。
public class Dog {
String name;
int age;
String like;
public Dog(){
this(2,"勾","丝");//调用下面的的构造方法2
}
public Dog(String name,int age,String like){//构造1
this.name=name;//this.+变量名是指向成员变量中的name,而不是传入参数中的局部变量name
this.age=age;
this.like=like;
}
public Dog(int age,String name,String like){//构造2
this.name=name;
this.age=age;
this.like=like;
}
public void pot(){
System.out.println("名字:"+name+" "+age+"岁,"+"喜欢吃"+like);
}
public void work(){
}
}
static关键字
static被称为静态.
可以用来修饰类的成员变量,成员方法,代码块,内部类。
static修饰的属性称为静态属性(静态变量)
静态变量建议使用类名.直接访问静态的变量
静态属性是类的所有对象共享的,即不管创建了多少个对象,静态属性在内存的类中只有一份,当一个对象修改静态属性后,所有对象的静态属性都改变。
静态变量随着类被加载时由系统默认初始化加载
静态成员可以在创建对象前被使用。
静态成员变量也称类变量(即为在内存中只有一份),所有对象共享。可以直接使用类名访问。
用static修饰的成员方法就是静态方法,也称类方法。
静态方法在本类的任意方法、代码块、构造器中都可以直接被调用;
静态的方法,只能使用静态的成员变量,因为他们都随着类的加载而加载。
静态方法只能访问静态的成员变量,因为他们都随着类的加载而加载,非静态的方法可以访问静态的成员变量。
静态的方法中不能使用this和super等关键字。
package Day2;
public class Chinese {
//成员变量
String name;
static String country="中国";//中国人的国籍固定为中国,所以定义一个静态变量,也可省内存空间
static int count =0;//一个静态属性的计数器
public Chinese(){//构造方法,每次调用方法时,都执行计数一次
count++;
}
//方法
/*
public static void pot(){
System.out.println("国籍:"+country+"姓名:"+name);//其中name为成员变量无法使用静态方法:
}
*/
public void pot(){
System.out.println("国籍:"+country+"姓名:"+name);//非静态方法
}
public static void count1(){
System.out.println(count);
}
public static int MaX(int a,int b){//静态方法,其中没有成员变量
return (a>b)?b:a;
}
public static void main(String[] args) {
System.out.println(count);
Chinese china1 =new Chinese();
china1.name="小朱";
china1.pot();
System.out.println(count);
Chinese china2 =new Chinese();
china2.name="小王";
china2.pot();
System.out.println(count);
System.out.println(MaX(10,19));
Chinese.count1();//直接用类名访问
}
}
代码块
在类中声明的一个没有名字的代码块;
代码块分为:
实例代码块:在创建对象时,自动执行;
静态代码块:在类被加载时,自动执行;
运行类中的main方法以及访问类中的静态的成员变量,静态成员方法,创建类的对象等,都要加载类。
package Day2;
public class dome1 {
static int a=10;
{
System.out.println("实例代码块1");
}
{
System.out.println("实例代码块0");
}
static{
System.out.println("静态代码块.");
}
public static void Dom(){
System.out.println(a);
}
//执行main函数但没创建对象,只执行了静态代码块
public static void main(String[] args) {
System.out.println(a);
}
}
package Day2;
public class testdemo1 {
public static void main(String[] args) {
System.out.println(dome1.a);
//访问类中的静态的成员变量,类被加载,未创建对象。
System.out.println("-----------------");
dome1.Dom();//访问类中的静态方法
System.out.println("-----------------");
//创建一个对象时,类已经被加载了
dome1 dem=new dome1();
}
}