this强调本类中固定方法,除此外还有如下作用:
表示本类中的属性使用this调本类的构造方法表示当前对象的引用 // 表示本类中的属性 class Person{ private String name; private int age; public Person(String name, int age) { this.name = name;//明确表示 为类中的name属性赋值 this.age = age; } public String info(){ return name+age; } }通过调用当前对象进行对象之间的比较
//表示当前对象 class Person{ private String name; private int age; public Person(String name, int age) { this.name = name;//明确表示 为类中的name属性赋值 this.age = age; } 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 String info(){ return name+age; } public boolean compare(Person person){ //调用此方法时里面存在两个对象,当前对象,传入的对象 Person person1=this;//表示当前调用的方法的对象 Person person2=person;//传递到方法中的对象 if (person1==person2){ //先比较两个地址是否相同 return true; } //分别判断每个属性是否相同 if (person1.name.equals(person2.name)&&person1.age==person2.age){ return true; }else { return false; } } } public class Test1 { @Test public void test1_2(){ //声明两个内容相同的对象 Person p1=new Person("a",1); Person p2=new Person("a",1); if (p1.compare(p2)){ System.out.println("相同"); }else { System.out.println("不相同"); } } }如果有些属性希望被所有类共享,一个类中的方法想由类调用,都应声明为static java常用的内存区域
栈空间:保存所有对象的名称(保存了引用的堆内存空间的地址)堆内存空间:保存每个对象的具体属性内容全局数据块:保存static类型的属性全局代码块:保存所有方法定义声明属性
//在创建类的时候直接为a开辟空间 : static int a=40;声明方法 非static声明的方法可以去调用static声明的属性或方法,但是static声明的方法不能调用非static类型声明的属性或方法
public class test{ static int a=10; public static void init(){ System.out.println(a); } public static void main(String []args){ init(); } }static相关应用 static属性所有对象共享,可以使用static属性统计一个类型产生多少实例对象;
class Demo{ private static int count=0; public Demo(){ count++; System.out.println("产生了"+count+"个对象"); } } public class Static1 { public static void main(String []args){ new Demo(); new Demo(); new Demo(); } } //输出结果如下: //产生了1个对象 //产生了2个对象 //产生了3个对象在使用main方法时,一直有static存在,主方法的每个参数的含义如下
public:此方法可被外部调用static:此方法可以由类名称直接调用void:程序的起点,不用返回值main:系统规定好默认调用的方法名称,执行默认找到main方法名称String args[]:运行时的参数,参数传递形式为”java 类名称 参数1 参数2 参数3 参数4 …“ //范例 public class MAIN { public static void main(String[] args) { if (args.length!=3){ System.out.println("参数的个数不足三个,程序退出"); System.exit(1);//直接退出程序 } for (int i=0;i<args.length;i++){ System.out.println("第"+(i+1)+"个参数:"+args[i]); } } }代码块分为普通代码块,构造块,静态代码块,同步代码块
普通代码块
//就是普通的代码块 public class TTT { public static void main(String[] args) { int a=1; System.out.println(a); } }构造块 构造块优先构造方法执行,且每次实例化对象都会执行构造块中的代码
class Demo{ { //定义构造快 int a=1; } public Demo(){ //定义构造方法 } } class test{ public static void main{ new Demo(); new Demo(); } }静态代码块 静态代码块优先于主方法执行,类中定义的静态代码会优先构造块执行
class Demo{ { System.out.println("1构造块"); } static { System.out.println("0静态块"); } public Demo(){ System.out.println("2构造方法"); } } public class MAIN { static { System.out.println("在主方法所在类中定义的代码块"); } public static void main(String[] args) { new Demo(); new Demo(); } }静态代码块的妙用:使用静态块代替主方法
public class MAIN { static { System.out.println("hello");//直接在静态块中打印信息 System.exit(1);//直接退出,避免程序寻找主方法 } public static void main(String[] args) { } }