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]);
}
}
}