• JAVA 编程思想二


    1: java  单根继承的优点?

               方便垃圾回收: 垃圾回收的设计会方便实现。

         多重继承的函数重名的问题。

    2: 向下转型和向上转型?

          向下转型不安全,向上转型安全。

    3: system.gc() ?

         只是提醒JVM做垃圾处理。不保证一定做。

    4:ArrayList  VS  LinkedList?

    5: java 基本类型大小? 对应的包装类用处?

              boolean(没有明确指定)    char(2)  byte(1)   short(2)   int(4)    long(8)  float(4)  double(8) : 每个基本类型都有对应的包装类。

              包装类用处:

          作为和基本数据类型对应的类类型存在,方便涉及到对象的操作;

          包含每种基本数据类型的相关属性如最大值、最小值等,以及相关的操作方法;

    基本数据类型

    包装类

    byte

    Byte

    boolean

    Boolean

    short

    Short

    char

    Character

    int

    Integer

    long

    Long

    float

    Float

    double

    Double

    6: JAVA堆和栈? 

      一:在方法中声明的变量,即该变量是局部变量,每当程序调用方法时,系统都会为该方法建立一个方法栈,其所在方法中声明的变量就放在方法栈中,当方法结束系统会释放方法栈,其对应在该方法中声明的变量随着栈的销毁而结束,这就局部变量只能在方法中有效的原因

          在方法中声明的变量可以是基本类型的变量,也可以是引用类型的变量。

             (1)当声明是基本类型的变量的时,其变量名及值(变量名及值是两个概念)是放在JAVA虚拟机栈中

             (2)当声明的是引用变量时,所声明的变量(该变量实际上是在方法中存储的是内存地址值)是放在JAVA虚拟机的栈中,该变量所指向的对象是放在堆类存中的。

       二:在类中声明的变量是成员变量,也叫全局变量,放在堆中的(因为全局变量不会随着某个方法执行结束而销毁)。

           同样在类中声明的变量即可是基本类型的变量 也可是引用类型的变量

           (1)当声明的是基本类型的变量其变量名及其值放在堆内存中的

           (2)引用类型时,其声明的变量仍然会存储一个内存地址值,该内存地址值指向所引用的对象。引用变量名和对应的对象仍然存储在相应的堆中

     7: 将字符串“12”转成16进制数?

     int a = Integer.parseInt("12", 16) ;

    8:  整数转String?

      String a1 = Integer.toString(5); // 其他类型都可以转String
      String a2 = String.valueOf(5);   // String本身也有函数可以把其他类型转string

    9:在精度要求高的计算中用浮点数?

      浮点数值不适合用于禁止出现舍入误差的金融计算中。例如System.out.println( 2.0 - 1.1);将打印0.899999999999999,而不是0.9。因为浮点数值采用二进制系统表示,而二进制无法精确表示分数1/10,就像十进制无法精确表示1/3一样。如果需要在数值计算中不含有舍入误差,就应该使用BigDecimal类和BigInteger。

      BigDecimal类:   支持任何精度的定点数。

      BigInteger类:支持任何精度的整数。

    10: 当float, double转int时,都是截尾操作,如果想四舍五入,用java.lang.Math.round(5.8)方法

    int a3 = (int) java.lang.Math.round(5.8);   // 6 

    11:数据提升: 

      如果对基本数据类型执行算术运算货按位运算,只要类型比INT 小(char,byte,short),在运算前,会自动转成int.。如果想把结果转成较小类型,必须使用类型转换。通常运算中最大的类型决定了结果的类型。

    12:switch的类型?

       int , char,    enum,  String

    13:   类的惊天数据成员的初始化?

              静态成员只被初始化一次; 当首次生成这个类的实例或首次访问类的静态成员时;先初始化静态的,然后是非静态的             

    14: 子类如何调用父类构造函数?

                    super(x)   

    15: @override注解的作用?

       想在子类中覆写某个函数,添加这个注解,在不小心重载的时候,编译器会提示错误。

    16:final用法?

              当修饰引用时,表示永远指向这个引用,但是指向的对象可以变化。

     final List<String >  list = new ArrayList<String>();    
     list.add("afa");  // 正确     
     list = new LinkedList<String>();  // 错误

      final Person p1 = new Person(a2, a);
      p1.setAge(5);  // 正确

      final String s= "fsdf";
      s = "fsdfsdfsdfdsf";  // 错误, 因为String是不可变对象,重新赋值导致new了新对象,与final冲突。

        final 可以是空白的,在构造函数的时候进行初始化。

           当修饰函数参数的时候,无法更改参数引用指向的对象(可以改变对象的值,但是不能重新指向其他的对象)。

           final方法:防止继承。

              类中所有的private 方法都隐式的指定为final。

              final类:不能有子类(不能被继承)   

    17:抽象类特性?

              抽象类可以没有抽象方法;    抽象方法没有函数体,子类必须实现,如果不实现,子类也是抽象类;     抽象类不能实例化;

    18:  接口中属性?

        接口中如果定义属性是static final的,所以一般不定义属性;       

    19: 接口中的方法是public的,默认是public的; 实现接口的类的函数是public的。

    20: 抽象列和接口都是为了实现多态,向上转型,解耦合。

  • 相关阅读:
    ROS_Kinetic_08 ROS的集成开发环境(IDEs)之使用Eclipse
    如何写好一份竞品运营分析报告?
    我眼中的Linux设备树(六 memory&chosen节点)
    【干货】前端开发者最常用的六款IDE
    【前端图表】echarts散点图鼠标划过散点显示信息
    【前端图表】echarts实现散点图x轴时间轴
    三分钟教你学会如何将密文解码成明文
    2018上半年GitHub上最热门的开源项目
    进阶攻略|前端完整的学习路线
    进阶攻略|前端最全的框架总结
  • 原文地址:https://www.cnblogs.com/liufei1983/p/7634463.html
Copyright © 2020-2023  润新知