一、构造函数
一个完整的类由属性和方法构成,其中有一种方法的作用是对对象进行初始化,
这种函数就是构造函数
构造函数的特点:
1、函数名与类名相同
2、不用定义返回类型
3、不可以写return语句
4、一个类可以拥多个构造函,每个构造函数的参数不相同,以重载的形式存在
示例代码:
public class Person {
String name = "nameless";
int age = 0;
//无参构造函数
Person (){
}
//构造函数1
Person(String n) {
name = n;
}
//钩造函数2
Person(String n,int a) {
name = n;
age = a;
}
void showWho() {
System.out.println("name is "+ name + ",age is " + age);
}
public static void main(String[] args) {
Person p1 = new Person();
Person p2 = new Person("P2");
Person p3 = new Person("p3",20);
p2.showWho();
p3.showWho();
}
}
二、构造代码块
在类里面直接写一块由{}括起来的代码,叫构造代码块
public class Person {
String name = "nameless";
int age = 0;
//构造代码块
{
System.out.println("code is running");
}
//无参构造函数
Person (){
}
每创建一个对象,构造代码块都会优先于构造函数执行,目的是给所有的对象进
行统一初始化。
三、this关键字
this关键字代表函数所属对象的引用
this关键字的应用一:区分局部变量与成员变量,代码示例:
public class Person {
String name = "nameless";
int age = 0;
Person(String name) {
//成员变量name = 局部变量name
this.name =name;
}
this关键字的应用二:当定义类中的方法时,该方法内部要调用到该函数的对象时,
用this来表示这个对象,示例:
//函数里的this关键字代表调用该函数的对象的引用
public boolean isSameAge(Person person ) {
if(this.age ==person.age) {
return true;
}
return false;
}
public static void main(String[] args) {
Person p1 = new Person();
Person p2 = new Person("P2");
Person p3 = new Person("p3",20);
System.out.println("p1和p2是同龄人" + p1.isSameAge(p2));
System.out.println("p1和p3是同龄人" + p1.isSameAge(p3));
}
有时需要在构造器中调用另一个构造器,可用this关键字做到这一点。上面说this关键字
代表函数所属对象的引用,但是在构造函数中,this加参数列表,则有不同的含义。这表
示对符合参数列表的构造函数的明确调用。如下,this关键字的应用三:
//钩造函数1
Person(String name) {
//成员变量name = 局部变量name
this.name =name;
}
//钩造函数2
Person(String n,int a) {
this(n);
age = a;
}
void showWho() {
System.out.println("name is "+ name + ",age is " + age);
}
public static void main(String[] args) {
Person p1 = new Person();
Person p2 = new Person("P2");
Person p3 = new Person("p3",20);
p2.showWho();
p3.showWho();
}
}
四、static关键字每个对象有共同数据,使用static关键字,可共享数据,节约内存空间。
static修饰的成员变量存在共享区中,也叫方法区。用法如下:
public class Person {
String name = "nameless";
int age = 0;
static String country = "CN";
void showWho() {
System.out.println("name is "+ name + ",age is " + age
+"country is "+country);
}
public static void main(String[] args) {
Person p1 = new Person();
Person p2 = new Person("P2");
Person p3 = new Person("p3",20);
//给静态成员变量country赋值,所有的对象的country值都发生变化
Person.country = "EN";
//p2.country = "EN";
p2.showWho();
p3.showWho();
}
}
static的特点:
1、随类的加载而加载,随类的消失而消失
2、优先于对象而存在
3、被所有的对象共享
4、可用类名.成员变量,方式调用
静态使用注意事项:
1、静态方法只能访问静态成员变量(变量、方法),非静态方法可以访问静态成员
2、静态方法中不可以定义this.super关键字
什么时候使用静态:
1、当对象出现共享数据时,用static
2、当方法的内部没有访问到非静态数据,该方法可以定义成static
典型的静态方法的应用是工具类。为不让其它程序创建工具类的对象,可将构造函数私有化,
private ClassTool(){};
五、main()函数
1、主函数是一个特殊的函数,作为函数的入口,可以被jvm调用
2、public :代表该函数访问的权限是最大的
3、static:代表主函数随着类的加载就已经存在
4、viod:主函数没有具体的返回值
5、main:不是关键字,但可被jvm识别
6、参数是字符串数组。
注意:类中拥有多个不同格式的main函数是合法的,但jvm只会调用固定格式的main函数
六、静态代码块
静态代码用于给类进行初始化,不能使用非静态成员,随着类的加载而加载,并且只执行一次
格式:
static {
执行语句;
}
class StaticCode {
static {
System.out.println("a");
}
}
class StaticCodeDemo {
static {
System.out.println("b");
}
public static void main(String[] args) {
new StaticCode();
new StaticCode();
System.out.println("over");
}
static {
System.out.println("c");
}
}/*Output:
b
c
a
over
*///:~