this,static,理解main方法,代码块

    科技2022-07-13  118

    文章目录

    thisstatic理解main代码块

    this

    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 Person1{ private String name; private int age; public Person1(){ System.out.println("一个新的对象被实例化了"); } public Person1(String name, int age) { this();//在此处调用类中的无参的构造方法 this.name = name;//明确表示 为类中的name属性赋值 this.age = age; } public String info(){ return name+age; } } public class Test1 { @Test public void tes1_1(){ Person1 person1=new Person1("a",1); System.out.println(person1.info()); } } //输出结果为: //一个新的对象被实例化了 //a1

    通过调用当前对象进行对象之间的比较

    //表示当前对象 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

    如果有些属性希望被所有类共享,一个类中的方法想由类调用,都应声明为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

    在使用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) { } }
    Processed: 0.012, SQL: 8