java自学之路-----构造函数以及static的简单用法

构造函数:

创建对象时调用,所有类都有构造函数,目的是为了给对象进行初始化,可以有多个构造函数,以重载的形式定义;

类中不定义构造函数的话,该类会产生一个默认的空参数构造函数;如果定义的话默认的构造函数就消失了;

构造函数---对象创建会调用相应的构造函数进行初始化,有且仅调用一次,

一般函数---对象创建后,需要函数功能才调用,可以无限调用;

一般函数不可直接调用构造函数,构造函数内有return语句。 


static:

特点{

1.修饰类成员

2.修饰的成员被所有对象共享

3.优先于对象存在,加载类的时候,static成员便存在了

4.调用的时候有两种方式,一种是对象调用,另一种是类名调用

5.修饰的为共享数据,对象中存储的是特有对象

6.只要变量是对象所共有的就可用static修饰

7.如果方法不需要调用非静态成员就可定义为静态

8.类不封装特有数据,可以把方法设为static,该类称工具类,不需要创建对象就能调用。为了阻止其他程序创建该对象,可将该构造函数私有化}


成员变量与静态变量的区别{

1.生命周期不同,成员变量跟着对象存在,消失;静态变量跟着类

2.调用方式,成员变量只能通过对象调用

3.存储位置不同,成员变量时在堆中的对象里面;静态变量在方法区的静态区中}


注意{

由于静态成员跟随着类,还没有对象的时候就可以操作静态成员

1.静态方法只能访问静态成员,非静态方法可以访问静态和非静态

2.静态方法中不可有this和super

}


成员变量与局部变量重名时,用this来调用成员变量


this可用来在构造函数中调用其他构造函数,但必须为构造函数的第一条语句

静态代码块只在加载类的时候执行一次,构造代码块创建一次对象执行一次


public static void main(String【】 args)

1.格式是固定的,只有args可更换,为了让jvm识别;

2.访问权限必须最大

3.static 为了不创建对象直接地执行main方法

4.主函数没有具体返回值

5.main一个被jvm识别的固定名字

6.String[] args:这是主函数的参数列表,是一个数组类型的参数,而且元素都是字符串类型


分析下面程序在内存中完成的动作

class Person{
		private String name = null;
		private int age = 0;
		public static String country = "CN"
		Person(String name){
			this.name = name
		}
		Person(String name,int age){
			this(name);
			this.age = age;
		}	
		
		public void print(){
			System.out.println(this.name + "  " + this.age);
		}	
}

class Demo{
		public static void main(String[] args){
			Person p1 = new Person("aa", 20);
			Person p2 = new Person("bb", 21);		
 }}
1.main函数进栈,存储变量p1 2.在方法区加载Person类,在静态区存储country的值 3.new Person("aa", 20)堆中分配空间给第一个new 4.调用Person(String name,int age),构造函数进栈 5.this(name)再次调用另一个构造函数,Person(String name)进栈 6.将参数aa赋值给堆中对象的变量name   7.第5步的构造函数出栈 8.将参数20赋值给堆中对象的变量age 9.第4步的构造函数出栈 10.把该对象地址赋值给p1.11.重复3到10步骤 12.main函数出栈


该程序p1和p2共享country的值,构造函数使用this是由于能在局部变量找到就不会去寻找成员变量

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章