• Java面试题之static、this关键字、变量详解


    • static翻译成中文就是:静态
      • 所有static关键字修饰的都是类相关的,类级别的
      • 所有static修饰的,都是采用“类名 . ”的方式访问,就是不用new这个类对象
      • static修饰的变量:静态变量
      • static修饰的方法:静态方法
        1. public class Student{
        2. public static void study(){
        3. System.out.println("我爱学习");
        4. }
        5. public static void main(String[] args){
        6. //因为是static修饰的静态方法,不用把Student真的new出来
        7. //直接用类名Student点.方法名study()就可以直接调用
        8. Student.study();
        9. }
        10. }

         

    • 变量的分类:
      • 在方法体中声明的变量叫做:成员变量
      • 在方法体外声明的变量叫做:成员变量 --分为-->(静态变量和实例变量)
    • static静态代码块在什么时候执行?
      • 类加载的时候执行,并且只执行一次(关于类加载,面试可能会被问到,可以去大致看一下jvm的视频了解了解大致的东西)
      • 注意:静态代码块在类加载的时候执行,并且在main方法执行之前执行(这也是jvm的知识点,面试很大概率会被问到的)
      • 静态代码块一般是从上到下顺序执行的
      • 静态代码块不是那么常用(不是每个类都需要写的东西,以前学习jdbc的时候用过)
      • 静态代码块这种语法是sun公司给Java程序员的一个特殊的时刻:类加载时刻
    • this是一个关键字,是一个引用,保存内存地址指向自身
      • this可以使用在实例方法种,也可以使用在构造方法种
      • this出现在实例方法中代表当前对象(比如当前类是学生(Student)类,this.的时候就是Student这个对象)
      • this不能使用在静态方法中
      • this大部分情况下可以省略,但是用来区分局部变量和实例变量的时候,不能省略
      • this();这种语法只能出现在构造方法第一行,表示当前构造方法调用本类的构造方法,目的是代码复用、

    this翻译过来这个,就是这个类,当前这个类,这个对象,当前的这个对象,就是你现在正在使用的这个类,也算是一种简写的方法。比如你想调用当前这个方法。

    可以看下面的代码在没有static修饰的eat()方法里,用this代表当前对象Student来调用study()方法,但是main方法用了static修饰,this就不能不用了

     因为上面出了问题,看下面这个,因为this的不可用,只能把StringTest对象创建出来,然后再去调用我们的eat方法,然后eat方法里用this调用了study方法,输出的时候就是先:学习学习然后在吃吃吃

    1. public class StringTest {
    2. public static void main(String[] args) {
    3. StringTest s = new StringTest();
    4. s.eat();
    5. //this.eat();
    6. }
    7. public void study(){
    8. System.out.println("学习学习");
    9. }
    10. public void eat(){
    11. this.study();
    12. System.out.println("吃吃吃");
    13. }
    14. }

  • 相关阅读:
    【重磅】华为云盘古大模型5.0,正式发布!
    scala(day01)
    java计算机毕业设计网上汽车售票系统源码+数据库+lw文档+系统+部署
    数据库、计算机网络,操作系统刷题笔记4
    #机器翻译
    【LeetCode】238. 除自身以外数组的乘积
    iOS_NestedScrollView(嵌套ScrollView)
    java-php-python-ssm学生综合测评系统计算机毕业设计
    java+idea+mysql采用医疗AI自然语言处理技术的3D智能导诊导系统源码
    Jmeter中是如何读取MYSQL数据来作为请求参数的?
  • 原文地址:https://blog.csdn.net/qq_43280993/article/details/127551844