1.构造方法: constructor;构造函数.
定义:在创建对象的时候, 对象成员可以由构造函数的方法进行初始化.
1.构造方法的方法名必须和类名一致.
2.构造方法没有返回类型,也不能定义成void ,在方法名前面不用声明方法的类型.
3.构造方法作用是完成对象初始化工作,它能够把定义对象的参数传递给对象的域.
4.构造方法是由系统调用的,不能被编程人员来调用.
5.构造方法可以重载,以参数的类型,个数,排列顺序进行区分;
1.区分有参和无参构造方法
public Car(){
System.out.println("我是无参构造方法")
}
public Car(int width,int height){
//类里面的属性(成员变量)一般直接写在构造方法里
this.width=width;
this.height = height;
//也可以通过计算直接给成员变量进行赋值
this.area = height*width;
this.perimeter = 2*(height+width)
System.out.println("我是有参构造方法")
}2.静态变量
可以将静态变量理解成为类变量(与对象无关);而实例变量则是属于一个特定的对象
静态变量是基本数据类型,在类的外部不必创建该类的实例就可以直接使用;
静态变量:1,属于类的变量,在内存中存在于方法的静态区,2.声明周期:随着类的加载而加载和销毁和销毁,程序运行结束而销毁
只加载了一次; 3可以使用对象名和类名进行调用;
话不多少
public class Demo03静态变量 {
public static void main(String[] args) {
AVGirl girl1 = new AVGirl(); // 代表girl1 使用 AV模板创建出来;
girl1.name = "苍老"; // girl1 保存的是地址可以找到AVGirl()的位置,通过地址去堆里找小苍;
// AVGirl.country = "日本";// 并且给country赋值日本;
// girl1.sayHi();
AVGirl girl2 = new AVGirl();
girl2.name = "小兰"; //当country属性变成static以后,他就不存在于堆,而存在于类中,通过对象也可以找到;
AVGirl.country = "本天"; //在这里就可以直接通过类名进行获取country 属性 ; 并且获取的country属性可以被
girl2.sayHi(); // girl1 和 girl2 ...... 以及后面的girl(n)同时使用;
girl1.sayHi();
// 这时可以打印国籍;单girl1 并没有写国籍; country 存在静态区;
}
}
class AVGirl {
String name;
// 如果加上static 就会把该属性加载到静态区; 再类的这里country前面加上static
static String country;
public void sayHi() {
System.out.println("我的名字是:" + name + " " + "国家" + country);
}
// 思考构造方法能用private? 可以的(特殊用途;)
AVGirl() {
}
}
3.静态方法
1.静态方法是使用公共内存空间的,就是说所有的对象都是可以直接引用,不需要创建对象就可以使用该方法;
例如: 创建一个类
class Test{ //静态方法
public static int function1int x,int y){
return x+y;
}
public int funtion2(int a,int b){
return x +y;
}
}
import Test;
public class mainClass{
int sum;
public static void main(String args[]){
sum = Test.function1(1,2)
//直接可以通过类.方法进行调用;
sout(sum);
Test t = new Test();
t.function2(1,2);
//因为function2不是静态方法,所以只能用Test类创建一个t对象,然后才能调用该对象的方法;
}
}
静态变量只能调用静态; 成员方法即可以使用成员变量,也可以使用静态变量和方法
静态方法: 随着类的加载而加载(和静态变量一样);
执行位置 在栈中执行,只要是方法就会在栈中执行;
静态方法中 不能使用成员变量(由于还没有被加载)
静态方法 出栈以后不会消失而是存在于方法区里面;
public class Demo04静态方法 {
public static void main(String[] args) { //main函数是一个静态方法;
}
}
class Test {
int num1 = 10; //成员变量
static int num2 = 20;//静态变量
/*
* 成员方法中 既可以使用成员变量 也可以使用静态变量
*/
public void fun1() { //这就是一个成员方法:可以使用num1,也可以使用num2;
System.out.println(num1);
System.out.println(Test.num2); // 可以用Test(静态变量) ;可以用this
Test.fun2();
}
/*
* 静态方法 什么时候加载:随着类的加载的加载而加载(跟静态变量是一样的); 执行位置 在栈中执行 (只要是方法都在栈中执行执行完以后出栈);
* 静态方法中不能使用成员变量(静态方法加载还没有对象) 只能使用静态变量; 静态方法出栈以后不会消失存在于方法区;
*
* 简单: 静态变量 静态只能调用静态; 成员变量 可以调用成员 也可以调用静态;(成员有对象了类肯定就已经被加载了;)
*/
public static void fun2() { //静态方法
System.out.println(num1); //num1相当于this.num1 还没有对象(不能调用成员方法)
System.out.println(num2); //num1 爆红说明不能调用成员变量;
}
public static void fun3() {
System.out.println("我是fun3");
Test.fun1();//爆红说明不能调用成员方法;因为实在静态方法中;
}
}