黑马程序员---2015.6.13java基础笔记---构造代码块--this--static函数

时间:2023-02-11 19:13:02
------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------


1.构造代码块
   
class Person {
private int age;

/*
构造代码块
作用:给对象进行初始化
对象一建立就运行,而且优先于构造函数
和构造函数的区别:
构造代码块是给所有对象进行统一初始化
而构造函数是给对应的对象初始化
*/
{
System.out.println("哇哇哇哇直哭");
}

Person() {
......
}

Person(int a) {
age = a;
}

}


2.this关键字的用法
    /*
    this:看上去用于区*部变量和成员变量
    this:就代表本类的对象,到底代表哪一个?
                this代表它所在函数的对象的引用
                简单说:哪个对象在调用this所在的函数,this就代表哪个对象。
    this的应用:定义类中的功能时,当函数内部用到要调用它的对象时,用this表示这个对象。
                            但凡本类内部功能使用到了本类的对象,就用this表示            
*/
class Person
{
private String name;
private int age;

/*
Person(String name)
{
//如果new Person("zhanfsan").speak();输出结果name==null
//将name赋值给name,系统将会找离他最近的name,还是局部变量name
name = name ;
}
*/

Person(String name)
{
this.name = name;
}
Person(String name,int age)
{
this.name = name;
this.age = age;
}

public void speak()
{
System.out.println("name=="+this.name+" age=="+this.age);
this.show();//函数需要一个对象来调用,this就代表本类的对象。可以不写,系统编译后会写上。
}

public void show()
{
System.out.println("It is my show time");
}

public boolean compareAge(Person p)
{
return this.age == p.age;
}
}

class TestThis
{
public static void main(String args[])
{
Person p = new Person("qiaodong");
p.speak();
}
}




3.this语句:构造函数间的调用,只能用this语句    
    this语句只能用于构造函数的第一行。因为初始化要先执行
   
    
Person(String name)
{
this.name = "haha";
}

Person(String name;int age)
{
this(name);//如果先执行下一句,
//那么Person p =new Person("乔栋",22);p.name ="haha"
this.name = name;
this.age = age;
}


4.static静态(关键字)        
    用法:是一个修饰符,用来修饰成员(变量,函数)
                当成员被静态修饰后,就多了一个调用方式,除了可以被对象调用外,还可以直接被类名调用:类名.静态成员
    特点:1.随着类的加载而加载
                    也就是说:静态会随着类的消失而消失,说明它生命周期最长。
                2.优先于对象的存在
                3.被所有对象所共享
                4.可以直接被类名所调用                                            
    什么时候用?
                当所有对象中此变量的值都一样(比如:人有两只眼睛,一只鼻子)            
                为了节约内存,使用static来修饰变量
    实例变量和类变量的区别:
                1.存放位置
                    类变量随着类的加载而存在于方法区中
                    实例变量随着对象的建立而存在于堆内存中。
                2.生命周期
                    类变量的生命周期长,随着类的消失而消失
                    实例变量的生命周期随着对象的消失而消失            
    静态使用注意事项:
                1.静态方法只能访问静态成员
                    非静态方法既可以静态成员,也可以访问非静态成员
                2.静态方法中不可以定义this,super关键字
                    因为,静态优先于对象存在,所以静态方法中不可以出现this    
                3.主函数是静态的
    静态的利弊:
                1.利:对对象的共享数据进行单独空间的存储,节省空间。没有必要每一个对象中都存储一份。
                可以直接被类名调用。
                2.弊:生命周期过长,访问出现局限性(静态虽好,只能访问静态)
5.    public static void main(String[] args)                
        主函数:是一个特殊的函数,作为程序的入口,可以被JVM调用
        主函数的定义:
            public:代表该函数访问权限是最大的
            static:代表主函数随着类的加载就已经存在了
            void:主函数没有具体的返回值
            main:不是关键字,但是一个特殊的单词,可以被JVM识别。
            String[] args:函数的参数,参数类型是数组,该数组中的元素是字符串。
                                        args是参数,也可以写成其他,只是习惯了写args
            JVM运行主函数时,实际上是传入了 new String[0]
            
       
    class Test
{
public static void main(String args[])
{
main();
}

public static void main()
{
System.out.println("此方法可以存在,即和主函数是重载的关系");
}
}


            
6.    String[] a = new String[3];     
    int[] b = new int[4];
    float[] c = new float[6];
    System.out.println(a[1]); //null
    System.out.println(b[1]); //0
    System.out.println(c[1]);    //0.0
    
7. 主函数中可以调用主函数
 
  class Star
{
//编译后,运行时:输入 java Star aa bb cc dd
public static void main(String[]args)
{
//主函数中可以调用主函数
TestMain.main(args);
}

}

class TestMain
{
public static void main(String[] args)
{
for(int x = 0;x<args.length;x++)
{
System.out.println(args[x]);
}
}
}