java中含有许多自带的关键字方便我们编程实现程序,关键字的使用是javaEE部分的重点和基础
static
“static方法就是没有this的方法。在static方法内部不能调用非静态方法,反过来是可以的。而且可以在没有创建任何对象的前提下,仅仅通过类本身来调用static方法。这实际上正是static方法的主要用途。”
引用自Java编程思想
重点抽取之后 再没有穿件对象的情况之下也能使用的方法和变量
static可以用来修饰成员方法,类的成员方法,可以被用来优化程序性能
1)staitc方法
一般被称作静态方法,在使用时直接用类名去调用
在静态方法中不能访问类的非静态成员变量和非静态成员方法,因为非静态成员方法/变量都是必须依赖具体的对象才能够被调用。
但是在非静态成员方法中是可以访问静态成员方法/变量的。
2)static变量
修饰的变量被称为静态变量,静态变量被所有的对象所共享,在内存中只有一个副本,它当且仅当在类初次加载时会被初始化。而非静态变量是对象所拥有的,在创建对象的时候被初始化,存在多个副本,各个对象拥有的副本互不影响。
static成员变量的初始化顺序按照定义的顺序进行初始化。
3)static代码块
静态代码块以优化程序性能。static块可以置于类中的任何地方,类中可以有多个static块。在类初次被加载的时候,会按照static块的顺序来执行每个static块,并且只会执行一次。
特点 执行的级别在类中最高,在类加载时就执行且只执行一次。
this
在某种情况下区分调用对象
1)调用本类的属性
引用成员变量出现最多的情景,就是封装
class test{
private String name;
public void setName(String name){
this.name=name;
}
}
区分传入的参数name与本类中对象调用name的区别
某个变量前面加上一个this关键字,其指的就是这个对象的成员变量或者方法,而不是指成员方法的形式参数或者局部变量。
this.name代表的就是对象中的成员变量,又叫做对象的属性,而后面的name则是方法的形式参数。
2)在构造器中调用对象本身的其他构造器
使用的场景体现在构造器的重载
class Test{
void test(){
System.out.println("wudi");
}
void test(String name){
this.test();
System.out.println("shuaihui");
}
}
这是一点测试的代码假如我们去调用有参数的test就会在有参的中this调用无参test;最终执行两段代码
wudiu
shuaihui
在构造器中可以通过this()方式来调用其他的构造器。但在一个构造器中最多只能调用一个其他的构造器。并且,对其他构造器的调用动作必须放在构造器的起始处(也就是构造器的首行),否则编译的时候将会出现错误,另外不能在构造器以外的地方以这种方式调用构造器。
3)返回类的引用
可以使用return this来返回某个类的引用。此时,这个this关键字就代表类的名称。
为什么有static就不能有this
1.Static方法是类方法,先于任何的实例(对象)存在。即Static方法在类加载时就已经存在了,但是对象是在创建时才在内存中生成。而this指代的是当前的对象,在方法中定义使用的this关键字,它的值是当前对象的引用.也就是说你只能用它来调用属于当前对象的方法或者使用this处理方法中成员变量和局部变量重名的情况.而且,更为重要的是this和super都无法出现在static 修饰的方法中,static 修饰的方法是属于类的,该方法的调用者可能是一个类,而不是对象.如果使用的是类来调用而不是对象,则 this就无法指向合适的对象.所以static 修饰的方法中不能使用this.。简单的说就是this的使用必须伴随对象而static的存在不需要对象所有有static不能有this
final
字面意思就是最终的,可以理解不可变的
1、被final修饰的方法,JVM会尝试为之寻求内联,这对于提升Java的效率是非常重要的。因此,假如能确定方法不会被继承,那么尽量将方法定义为final的。
2、被final修饰的常量,在编译阶段会存入调用类的常量池中。
1)变量
表示该变量不可改变,对基本类型来说是其值不可变,而对于对象变量来说其引用不可变。
被final修饰的变量不可以被改变
2)方法
将方法声明为final,说明这个方法提供的功能已经满足当前要求,不需要进行扩展,并且也不允许任何从此类继承的类来覆盖这个方法。
但任然可以继承这个方法。即可以直接使用。
被final修饰的方法不可以被重写
3)类
被final修饰的类不可以被继承,也就是说该类不能被扩展。对于final类中的成员,可以定义其为final也可以不是final。
被final修饰的类不可以被继承
总结
生命不息!!!奋斗不止!!!