java基础
**
final和static关键字
**
这个,到了多态前最后的东西了,也是Java语法中最后仅剩的一些东西。废话不多说,嘿喂够
把这俩放一起也没别的意思(就是他俩没啥关系),此篇博客主要是这个static关键字。至于这个final关键字嘛,最后就剩这个了,一并搞了。
先搞final,这个简单。Let ’s go
final:
作用:修饰变量,方法,类
这个final嘛,和那个抽象有点相反的意思。
我们抽象方法,在使用的时候必须重写实现才能用,这个final则是不能重写。就像它的意思“最终”,就是它不能在向下了。
1、用final修饰常量:不能重赋值
2、用final修饰方法:不能重写
3、用final修饰类,不能被继承
结合接口抽象类。抽象方法、接口和抽象类的声明等都不可能出现final关键字。
简单说就是有abstract没final,有final没abstract(水火不容)
其实final也没啥,就这么简单。
记得使用final必须给定初始值即可。(绝对不能只给声明,无赋值。一旦赋值则不能更改)
重要的是static,这个关键字在Java语法这里算是第一个难点。
来,我们盘它!!!
static:
它还是修饰变量,方法,类(内部类)的一个关键字,当然比之前的关键字多了一个可以直接搞静态代码块
我们都知道这个关键字是声明为静态
这里我们需要知道的概念可能比较多!!!
从最开始使用Java的时候,我们知道主方法main,它就是静态的
public class Test{
public void play(){
}
public static void main(String []args){
play();//报错
}
}
我们知道,Java程序这么搞,先编译不通过。解决的话,要么将play方法改为static,要么实例化一个Test对象,然后通过对象调用(也就是 Test t = new Test();t.play(); )。
现在我们要知道的就是static的特点。
1、随着类的加载而加载
2、优先于对象存在
3、被所有对象所共享
4、可以直接被类名调用
至于这些特点的具体,到后面类加载过程,仔细盘一盘
先看static和非static的区别
1、生命周期
静态变量随着类的加载而加载,随着类的消失而消失。生命周期最长。
非静态变量随着对象的创建而存在,随着对象的消失而消失。
2、所属
静态变量和类相关,属于类,可以直接类名调用,也可以对象名调用。也称为类变量。
非静态变量和对象相关,属于对象,只能被对象名调用。称为实例(对象)变量。
3、内存(不急)
静态变量存储于方法区中的静态区。
非静态变量存储于对象的区域,在堆内存中。
4、数据
静态变量的数据被所有的对象共享。
非静态变量是每个对象特有的数据。
直接搞它就行了,试一试不就知道了
public class Test {
static class Person{
static String name = "张三";
String car;
public Person() {
}
//发现静态变量不能传参进构造方法this点不出来
public Person(String car) {
this.car = car;
}
void show (){
System.out.println(name+" "+car);
// show1();//可以调用
}
//静态方法内不能访问非静态方法和成员
static void show1(){
System.out.println(name);
}
}
public static void main(String[] args) {
Person p1 = new Person("玛莎拉蒂");
p1.show();
p1.show1();
Person p2 = new Person("保时捷");
p2.show();
p2.show1();
p1.name = "李四";p1.car="布加迪威龙";
//Person.name = "李四";//和p1或p2点name一样的
p1.show();
p1.show1();
p2.show();
p2.show1();
}
}
运行后看看结果
张三 玛莎拉蒂
张三
张三 保时捷
张三
李四 布加迪威龙
李四
李四 保时捷
李四
这下是不是明白特点里(2)所属和(4)数据了解了。
而static的生命周期和内存相关就需要对Java的底层原理进行分析,暂时我们知道这个static对数据的改变和它的所属即可。
需要注意的是
静态成员只能访问静态成员。
静态方法中不能有this,super关键字。
主函数是静态的
到了这里,前期所有的关键字基本上已经完了。
我们写代码是对static的使用考虑
1.属性
当这个属性是所有对象所共享的时候,我们就把它定义为static修饰的。
当这个属性是每个对象所特有的时候,就把它定义为非static修饰的。
2.方法
某个成员方法访问了对象所共享的内容。或者说,访问了静态成员。那么,该方法 就必须定义为static修饰的。访问了特有的属性,我们就不能要让它被静态修饰。
到这里,我们来对目前所有关键字看看
1、private、protected、public这些访问修饰符,处于安全及OOP思想开发合理运用即可,方法,类和字段上都可以对其设定访问修饰符
2、this、super用于类的实例方法和构造方法内。
用于实例方法内,方法被哪个对象调用,该方法内的this就代表哪个对象
3、abstract、final用于方法、类,final还能用于字段上。
两者类似相反关系,绝记不能同用。
4、static它和类绑定,属于类属性。
我们理解它就是类的私人财产;对象是引用,和对象没有私人所属关系即可。
到这里这么多关键字,我们要根据我们的需求合理去运用这些关键字,这样对我们的代码的复杂程度和可读性具有很大的提升。
接下来终于到了面向对象特征的最后一个多态~。
返回 》
接口抽象类
上一篇
下一篇
》
面向对象——多态
扩展
》
Java内存
》
类加载过程