- this关键字
类的基本组成
1:成员属性
2:成员方法
3:构造方法
成员方法可以相互调用 :直接写方法名即可
注意:实际上在java中方法都是通过 对象.方法名 调用的
如果漆面没有直接写对象名,java会默认是this来调用的
this关键字的用法
this:当前对象的引用地址(对于方法调用来说。谁调用我,this就是谁)
1:调用方法:this.方法名
this是一个关键字可以省略不写,所以可以直接调用方法
2:调用属性:this.属性名
当成员属性和方法的形参同名的时候,this可以放在成员属性的前面,为了区分同名
3:调用构造方法:this(参数1,参数2…)
注意:
3.1 成员方法可以调用成员方法
3.2 成员方法不可以调用构造方法
3.3 构造方法可以调用成员方法
3.4 构造方法可以调用构造方法
注意:this()只能出现在构造方法的第一句
因为构造方法的作用就是给对象初始化,所以this只能出现在构造器的第一行,先让对象的属性初始化,然后在做其他事情
注意:this不可以出现在static方法中
注意:实际开发中,我们会给一个类至少提供2个构造器
一个无参的,一个有参的
.
- static关键字
static关键字的用法
语法格式
static 数据类型 变量名= 值; 静态
数据类型 变量名 = 值 非静态
1:static修饰变量
1.1:static 修饰变量,会让变量成为类变量,也是静态变量,这个变量属于当前这个类,和对象没有关系
1.2:静态变量是随着JVM第一次把类加载到内存中的时候,就把值赋值好了,比对象要提前,静态变量都有默认值
1.3:静态变量属于一个共享的变量,每个对象都可以使用这个变量,静态变量存放的位置是内存中方法区
静态变量和非静态变量的区别 ?
共同点:
1:都是变量
2:都有默认值
不同点:
1:内存位置
静态变量:方法区
非静态变量:堆
2:个数
静态变量 :1个 被所有对象共享
非静态变量:多个 每个对象都有各自的1个
3:调用形式
静态变量: 对象名.变量名 不推荐
类名.变量名 推荐
非静态变量:对象名.变量名
4:加载时机
静态变量 :类被第一次加载进内存的时候,空间就分配好了
非静态变量:当你new对象的时候,才分配空间
静态变量和非静态变量的使用场合
根据这个变量是否被对象所共享来判断这个变量应该定义成哪种变量
注意:局部变量不可以加static关键字
public class Demo {
static修饰方法
1:static修饰方法,那么这个方法就被称为静态方法,或者类方法
2:方法之间的调用
2.1 非静态方法调用非静态方法:可以调用 直接调用
2.2 非静态方法调用静态方法:可以调用 直接调用
2.3 静态方法调用非静态方法:可以调用,必须手动的new一个对象,通过对象名.方法名
2.4 静态方法调用静态方法:可以调用,直接调用 建议,在调用的前面把类名加上
3:变量在方法的中用法
3.1 :非静态变量可以在非静态方法中直接使用
3.2: 静态变量可以在非静态方法中直接使用
3.3: 非静态变量不可以在静态方法中直接使用,如果要使用必须手动的new一个对象,通过对象名.变量名来调用
3.4 :静态变量可以在静态方法中直接使用
注意:静态方法不能以任何方式引用this和super关键字
静态代码块:static经常用来进行static变量的初始化。
当类被第一次加载的时候,首先会加载静态代码块
如果这个类被加载多次,那么这个静态代码块,不用多次加载,只需要使用第一次加载好的值即可,可以提高效率
语法格式
static{
代码块
}
注意:静态代码块只能初始化静态变量,不能初始化非静态变量
非静态代码块: 初始化变量值
语法格式
{
代码块
}
注意:非静态代码块可以初始化非静态变量以及静态变量
java各个语法结构的执行顺序
顺序: 静态代码块
非静态代码块
构造方法
注意:1:无论创不创建对象,静态代码块,一定会执行,而且是第一个被执行。
2:如果不创建对象,非静态代码块,不能执行。
public class Demo1{
int a = 1;//成员变量
static int b;//静态类变量
public void eat(){
System.out.println(a);
System.out.println(b);
}
public static void main(String[] args) {
Demo d = new Demo();
System.out.println(d.b);
System.out.println(Demo.b);
//System.out.println(Demo.a);
//System.out.println(a);
}
}
-----------------------------------------------------
public class Demo2 {
int a = 10;
static int b = 20;
public void a(){
}
public void b(){
System.out.println(a);
System.out.println(b);
}
public static void c(){
//System.out.println(a);
System.out.println(b);
}
public static void d(){
}
public static void main(String[] args) {
c();
d();
}
}
---------------------------------------------------------
public class Demo3 {
int a;
static int b = 10;
static int c = 20;
static{
b = 10;
c = 20;
//a = 100;
}
{
a = 100;
b = 100;
c= 2000;
}
public static void main(String[] args) {
}
}