this关键字
代表当前对象
使用方法
在构造器中
this在构造器首行调用本类中其他构造器
this(参数)//匹配不同构造器的参数
构造器之间不能相互调用
区分同名变量
解决成员变量与局部变量,参数之间同名问题
this使用在成员方法中,this指代当前调用成员方法的对象
不存在同名变量|参数问题,变量就是指代成员,前面默认省略this
static关键字
static 静态的 成员修饰符
1.类变量 | 静态变量
static修饰变量只能是成员变量 不能修饰局部变量
2.类 方法|静态方法 static修饰的方法
静态内容使用方式
类名.方法名(参数列表);
类名.属性名;
对象.方法名(参数列表);
对象.属性名;
总结
- 被static修饰的内容是属于类的,可以通过类使用,可以通过对象使用
- 成员内容是属于对象的,成员变量,成员方法只能通过对象调用
- 静态的内容中只能使用静态的内容,成员内容只能通过对象使用
- 非静态内容中,可以直接使用静态的,也可以使用非静态的
- 静态内容只有一个内存空间,所有的对象共享一个静态内容.
public class StaticDemo01 {
//静态变量
static int age=5;
//成员变量
int id=10;
//静态的方法
public static void main(String[] args) {
//局部变量不能使用static修饰
//int a=5;
System.out.println(age); //当前类中,可以省略类名
StaticDemo01 demo=new StaticDemo01();
System.out.println(demo.id); //10
System.out.println(demo.age);
System.out.println(StaticDemo01.age); //5
//System.out.println(StaticDemo01.id);
System.out.println(demo);
demo.change(); //6 11
System.out.println(demo.id); // 11
System.out.println(StaticDemo01.age); //6
demo.change(); // 7 12
System.out.println(demo.id); // 12
System.out.println(demo.age); // 7
StaticDemo01.change2(); //8 -> 11
System.out.println(demo.id); // 12
System.out.println(demo.age); // 8
demo.change2(); // 9-> 11
System.out.println(demo.id); // 12
System.out.println(demo.age); // 9
}
/*
* 改变属性值
*/
public void change(){
age++; //静态的
id++; //成员的
System.out.println(age+"-->"+id);
System.out.println("this:"+this);
}
public static void change2(){
age++; //静态的
StaticDemo01 demo=new StaticDemo01();
demo.id++; //成员的
System.out.println(age+"-->"+demo.id);
}
}
块(block)
在块中 {}即为作用域
有四种类型
-
局部代码块:定义在方法中: 执行时机:调用时
-
构造块:定义在类中方法外:构造块 执行时机:new,创建对象时
构造块先于构造器的代码执行,如果存在多个构造块,从上到下依次执行
-
静态块 :static{} 定义在类中方法外: 执行时机:类第一次加载后执行一次.
静态块先于主方法执行,如果存在多个静态块,从上到下依次执行
4.同步块
执行顺序;
static-> main->构造块->构造器
public class BlockDemo01 {
//如果存在静态块,静态变量,从上到下依次执行
static int a=10;
static{
System.out.println(a);
}
int b=5;
static{
System.out.println("我是静态块1"+a);
//BlockDemo01 bd=new BlockDemo01();
//System.out.println(bd.b);
}
static{
System.out.println("我是静态块2");
}
public BlockDemo01() {
System.out.println("我是构造器");
}
//构造块
{
System.out.println("我是构造块1");
System.out.println(a);
System.out.println(b);
}
{
System.out.println("我是构造块2");
}
{
System.out.println("我是构造块3");
}
public static void main(String[] args) {
System.out.println("main");
int a=15; //作用域在变量声明开始,到离我最近的,包裹你的{}的}为止
//同一个作用域之内变量不能重名,使用就近原则使用
//局部代码块
{
int b=5; //作用域就在代码块中
System.out.println(a);
}
System.out.println("-------"+BlockDemo01.a);
BlockDemo01 bd=new BlockDemo01();
System.out.println(bd.a);
//System.out.println(b); 无法使用
}
}
运行结果
[外链图片转存失败(img-1Jdnn1BL-1562326316656)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\1562324604899.png)]
lockDemo01.a);
BlockDemo01 bd=new BlockDemo01();
System.out.println(bd.a);
//System.out.println(b); 无法使用
}
}
运行结果
[外链图片转存中...(img-1Jdnn1BL-1562326316656)]