zoukankan      html  css  js  c++  java
  • Java面试系列05(static、JVM内存模、final、abstract、interface)

    static:

    static修饰的变量和方法是属于类的,且只有一份,虽然所有方法都是只有一份,不过变量不是啊。

    静态方法和静态代码块里都不可以使用this、super

    静态方法:

      必须被实现;不能被重写(因为是属于类的,而不是对象)(可以被继承)

      字父类中不可以存在:子父类有同命名方法,一个为静态一个为非静态。

    静态方法只允许访问静态变量和静态方法

    静态代码块中定义的变量是局部变量,只能访问静态成员(看一下我多态的那篇文章就很容易理解了)。

    只执行一次,在创建对象之前执行,main函数之后。

    JVM:
    1.栈

      程序执行的位置,每一个线程会拥有一个虚拟机栈,

      方法对应栈中的栈帧,方法之间的调用也就是栈帧的存取关系。

      默认分配内存1M,栈帧中存储的是方法中定义的值类型和引用类型,值类型对应的内存中放的它的值,引用类型对应的内存放的在堆内建的对象或数字的地址(引用类型指向对象和数组),所有的新建的对象和数组都在堆里放的。(方法区里也有对象)

    2.堆:对象实例(所有新建的对象实例以及数组都要在堆上分配)

    3.方法区

    运行时常量池:常量,编译期生成的各种字符面量和符号引用,这部分内容将在类加载后存放在常量池中。  

    :存储已被虚拟机加载的类信息,字段信息,方法信息,静态变量,类classloader的引用,类Class的引用,即时编译器编译后的代码等数据。

    在方法区中,每个类型都对应一个常量池,存放该类型所用到的所有常量。
    这里暂且只认为 常量池 = final修饰的变量 + ""String的值。(”“String存在,是因为,String的构造函数,创建空String 的时候会用到)

    4.本地方法栈为虚拟机使用到的native方法服务.

    5.程序计数器:当前线程所执行字节码的行号指示器。

    静态导入: import static 包.静态属性或静态方法

    final修饰符:(不可以修饰抽象类和抽象成员方法)

    final修饰类,该类不能被继承,没有子类。

    final修饰方法,该方法不能被覆盖。

    final修饰变量,该变量是常量(放在该类型的常量池中)(只能被显示赋值一次)

    private类型的方法默认是final类型的,final不能修饰构造方法

    final修饰的非静态成员变量必须要被赋值,并且只能在声明的同时赋值,匿名代码块内赋值,类的构造器内赋值

    final修饰static静态的成员变量可以在声明的同时赋值,static代码块内赋值

    final可以修饰任何变量、final修饰的变量必须赋初值、final修饰的变量被一次赋值之后不能更改

    abstract修饰符。(抽象类)

    abstract可以修饰类、方法,修饰类表示抽象类、修饰方法表示抽象方法且不能有方法体

    interface,是抽象到机制的抽象类。接口内部不能有任何形式的代码块。

    interface中的方法默认被public abstract修饰,变量被public static final 修饰,抽象方法和常量

    接口支持多实现。。

    接口相当于是一个标准吧,别人给你一套你可以用的东西,但是你前提要达到人家的要求才可以用。

    什么时候用接口什么时候用抽象类

    接口侧重于方法,如果抽象出来没有属性就用接口。

    抽象类侧重于属性,抽象出来有属性就可以使用抽象类

    在面向对象了理解抽象的时候:可以使用抽象类的地方就可以使用接口,使用接口的地方也可以使用抽象类。

    面向接口编程:
    优点:接口和实现分离了,适于团队的协作开发。主要为了实现松散耦合的系统,便于以后升级,扩展。
    缺点: 设计难,在没有写实现的时候,就得想好接口,接口一变,全部乱套,这就是所谓的设计比实现难。

    接口和抽象类对比
    1. 相同点:
    a. 都不能被实例化;
    b. 都能包含抽象方法;
    2. 不同点;
    a. 抽象类中可以为部分方法提供默认的实现,从而避免子类中重复实现它们,提高代码的可重用性,而接口中只能包含抽象方法;
    b. 一个类只能继承一个直接的父类,这个父类有可能是抽象类;但一个类可以实现多个接口,这是接口的优势所在。

    内部类看另一个博客吧,很详细https://www.cnblogs.com/mcmx/p/11335291.html

  • 相关阅读:
    网红面试题['1','2','3'].map(parseInt)解析
    微信小程序——评论点赞功能
    微信小程序背景音频播放在6.7.2微信版本兼容
    微信小程序之音频播放
    jquery判断是否为空
    自定义单选按钮
    AJAX防重复提交
    dedecms 开发问题总结及解决方案
    程序员面试被问到“三次握手,四次挥手”怎么办?
    问题:The project cannot be built until build path errors are resolved
  • 原文地址:https://www.cnblogs.com/mcmx/p/11341046.html
Copyright © 2011-2022 走看看