• java基础(一)


    一、java基础部分

    1、java基本数据类型

    共有八种:四种整数类型(byte、short、int、long)

                     两种浮点数类型(double、float)

              一种字符类型(char)

                    一种布尔类型(boolean)

    记忆:8位 Byte(字节型)

             16位short(短整型)char(字符型)

             32位 int(整型) float(单精度型/浮点型)

             64位 long(长整型) double(双精度型)boolean(布尔型)

    2、基本数据类型和封装类的区别 

    原始类型是类,引用类型是对象

    原始类型大小比较用"==" , 引用类型大小比较用"equals"

    引用类型可以被序列化,原始类型不行。

    在集合类中只能使用引用类型,不能使用原始类型

    基本数据类型不用new,封装类需要new

    基本数据参数传递是以值传递,封装类型是以地址传递的

    3、String、StringBuffer、StringBuilder区别 

    String是字符串常量,StringBuffer、StringBuilder是字符串变量,

    String创建的字符内容不可变(String底层char数组是final的),StringBuffer、StringBuilder的字符内容是可加长的

    StringBuffer是线程安全的,StringBuilder线程不安全的,但是速度快(因为它不会为线程安全消耗性能)

    补充:String为什么不可变

    虽然String、StringBuffer和StringBuilder都是final类,它们生成的对象都是不可变的,而且它们内部也都是靠char数组实现的,但是不同之处在于,String类中定义的char数组是final的,而StringBuffer和StringBuilder都是继承自AbstractStringBuilder类,它们的内部实现都是靠这个父类完成的,而这个父类中定义的char数组只是一个普通是私有变量,可以用append追加。因为AbstractStringBuilder实现了Appendable接口

    4、运行时异常和非运行时异常区别 

    运行时异常是运行时报错:比如ClassCastException(类转换异常)、IndexOutOfBoundsException(数组越界)、NullPointerException(空指针)、ArrayStoreException(数据存储异常,操作数组时类型不一致)、IO操作的BufferOverflowException异常

    非运行时异常是还未运行可见的错误,可以try、catch捕获异常 5、简述一下面向对象的特征,并举例说明你对面向对象的理解 

    面向对象的特征归结为封装继承多态,把现实世界的事物的属性、行为特征抽象出来放到一个容器里(类),比如人类,人的走、听、吃、说等动作可以归结为类里的方法,但又是人类的共同点,人有身高、体重归结为类里的属性

    封装:就是设计者把不愿意透露给使用者的那部分代码就是封装过的,通过修饰词private(权限最小)、public(权限最大)
            还用protected、default(属性前默认为该类型),这些才能起到限制类对象权限的作用.
        继承:子类继承父类的过程,继承者可以拥有父类全部方法属性,
            好处提高代码复用性,子类只需要写特有的功能或者字段可以把公共的代码 抽出到父类里面
        多态:通过父类统一子类方法属性,然后通过调用,可以任意使用子类方法,优化代码量,原理是子类对父类方法进行重写
            左边某个变量编译期是一个类型,右边运行期是另一个类型父类 变量名 = new 子类();条件是一个建立在继承关系中

    6、正则表达式的用法 

    定义要规范的字符串->制定规则->调用正则方法

    示例:String str = "dqwda16165"; String 正则表达式="[a-z]*[0-9]+"; system.out.println(str.matches(正则表达式)判断是否匹配)

    7、Java 语言如何进行异常处理,关键字:throws、throw、try、catch、finally分别代表什么意义?finally代码是在return之后还是之前执行? 

    throws抛出所有可能异常  throw是抛出具体异常类型  try是将会发生异常的语句括起来,异常处理 catch是有异常就执行其它代码

    finally无论如何都会执行,如果在try或catch有return,return执行完会等待finally结束才返回;

    8、abstract class和interface有什么区别?接口可以继承接口吗?接口可以继承抽象类吗,为什么?

    抽象类和接口区别:抽象类里抽象方法必须被子类实现,抽象类可以继承多个抽象类,普通类只能单继承抽象类,不能有主方法,可以有普通方法,抽象方法默认被public abstract修饰

    接口类里只能写抽象方法,属性默认被public static final修饰,多个接口可以被同一类实现,

    9、构造器(constructor)是否可被重写(override)? 

    构造器(constructor)不能被继承,所有不能重写,但能重载(overloading)

    10、是否可以继承String类? 

    public final class String extends Object,里边有final关键字,所以不能被继承。

    11、Java 中的final关键字有哪些用法? 

    修饰的变量必须初始化或不能修改,修饰类不能被继承,修饰方法不能被重写

    12、try{}里有一个return语句,那么紧跟在这个try后的finally{}里的代码会不会被执行,什么时候被执行,在return前还是后? 

    会执行 会在return执行完之后还没返回结果之前执行,return会把返回结果放到函数栈等待finally执行完之后才真正的返回;

    13、阐述final、finally、finalize的区别。

     final用于修饰类(不能继承)、变量(不能修改,只能赋值一次)、方法(不能重写)

    finally是用于try{}catch执行过程中有没有异常捕获都要执行的finally块,关闭资源等...

    finalize是方法名,对象遗言,用于在垃圾收集器回收清理对象之前要执行的方法,在object类定义的,所有类都继承了它

    14、如何通过反射创建对象? 

    通过Class对象的newInstance()方法来创建Class对象对应类的实例

    使用Class对象获取指定的Constructor对象,调用Constructor对象的newInstance()方法来创建Class对象对应类的实例。

    15、Java 8的新特性 

    (1)Java 8引入了函数式接口的概念。Lambda允许把函数作为一个方法的参数,或者把代码看成数据。

    (2)接口的默认方法与静态方法,在接口中定义默认方法,使用default关键字,并提供默认的实现。所有实现这个接口的类都会接受默认方法的实现,除非子类提供的自己的实现,在接口中定义静态方法,使用static关键字,也可以提供实现

    (3)方法引用,结合Lambda表达式联合使用

    • 构造器引用。语法是Class::new 
    • 静态方法引用。语法是Class::static_method
    • 特定类的任意对象方法引用。它的语法是Class::method
    • .特定对象的方法引用,它的语法是instance::method

    (4)四、Java 8引入重复注解,相同的注解在同一地方可以声明多次。重复注解机制本身需要用@Repeatable注解。Java 8在编译器层做了优化,相同注解会以集合的方式保存,因此底层的原理并没有变化

    (5)扩展注解的支持,java 8扩展了注解的上下文,几乎可以为任何东西添加注解,包括局部变量、泛型类、父类与接口的实现,连方法的异常也能添加注解

    (6)引入Optional类,防止空指针异常,Optional类实际上是个容器:它可以保存类型T的值,或者保存null。使用Optional类我们就不用显式进行空指针检查了

    (7)引入Stream API ,函数式编程风格,让代码变得连串支持连续、并行聚集操作,简单明了

    (8)JavaScript引擎NashornNashorn允许在JVM上开发运行JavaScript应用,允许Java与JavaScript相互调用。

    9Base64Base64类提供了对URL、MIME友好的编码器与解码器

    10Date/Time API (JSR 310)提供了新的java.time包,可以用来替代 java.util.Date和java.util.Calendar,一般会用到Clock、LocaleDate、LocalTime、LocaleDateTime、ZonedDateTime、Duration这些类,对于时间日期的改进还是非常不错的;

    除了这十大新特性之外,还有另外的一些新特性:

    • 更好的类型推测机制:Java 8在类型推测方面有了很大的提高,这就使代码更整洁,不需要太多的强制类型转换了。
    • 编译器优化:Java 8将方法的参数名加入了字节码中,这样在运行时通过反射就能获取到参数名,只需要在编译时使用-parameters参数。
    • 并行(parallel)数组:支持对数组进行并行处理,主要是parallelSort()方法,它可以在多核机器上极大提高数组排序的速度。
    • 并发(Concurrency:在新增Stream机制与Lambda的基础之上,加入了一些新方法来支持聚集操作。
    • Nashorn引擎jjs:基于Nashorn引擎的命令行工具。它接受一些JavaScript源代码为参数,并且执行这些源代码。
    • 类依赖分析器jdeps:可以显示Java类的包级别或类级别的依赖。
    • JVMPermGen空间被移除:取代它的是Metaspace(JEP 122)

    16、Java数组和链表的两种结构的操作效率 

    数组效率高,数组底层是一个连续的内存空间,根据基地址和偏移量计算地址的;

    链表的数据是通过地址指向下一个数据地址找到的;

    17、Java的引用类型有哪几种 

    强引用、弱引用、软引用、虚引用

  • 相关阅读:
    configure: error: Unable to use libevent (libevent check failed)
    ZABBIX修改用户名密码
    《平凡的世界》
    Directory "/usr/share/zabbix/assets" must be writable.
    《人生第一次》纪录片
    前端语言开发模板
    cometd源码阅读SecurityPolicy授权模块(十二)
    设计思路已读未读设计
    cometd源码阅读Extension扩展(十)
    计算2个时间相差多少天多少分钟多少秒
  • 原文地址:https://www.cnblogs.com/zlbstruggl/p/13776100.html
Copyright © 2020-2023  润新知