• 唯智笔试心经


    1. final,finally,finalize都是Java语言的关键字,长得还挺像,意义可大不一样。这三者的区别也是再经典不过的面试题了。


    先谈谈final,它是一个修饰符,可以用于以下4个地方。

    1. 定义变量,包括静态变量,非静态变量。

    2. 定义方法的参数。

    3. 定义方法。

    4. 定义类。

    当用final定义一个变量时,表示该变量是不可改变的,即常量。被final修饰的变量必须初始化,可以在变量定义时或者类的初始化块或者构造器中进行初始化工作。

    当用final定义一个方法时,表示这个方法不能被子类修改,但不影响子类继承它。

    当用final定义一个类时,表示这个类不能被继承,即没有子类。我们常用的String类就是fianl型的。final定义的类中的所有方法不能被重写,但不代表final类中的属性值是不能改变的。


    接着来看finally语句。它其实很简单,它只能用在try/catch语句中,附带一个语句块,表示该语句块中的内容最终总是被执行,无论捕获异常成功与否。


    最后说说finalize,它是一个方法,是GC(garbage collection)运行机制的一部分。该方法可以告诉GC在清理对象时要完成的一些任务。


    综上所述,三个关键字看起来很像,使用却千差万别。实际上,finally和finalize还是很简单的,用起来也只有各自那种单一的情况。final是一个很灵活而且不小心就会出错的东西,要留心了。
    2.

     1import java.util.ArrayList;
     2
     3
     4public class tlist {
     5
     6    
     7    public static void main(String[] args) {
     8       ArrayList s1=new ArrayList();
     9       s1.add("1a");
    10       s1.add("2b");
    11       s1.add("3c");
    12       System.out.println(s1.size());
    13       System.out.println(s1.get(0));
    14       System.out.println(s1.get(1));
    15       System.out.println(s1.get(2));
    16       System.out.println("---华丽的分割线---");
    17       s1.add(2,"sdfs");
    18       System.out.println(s1.get(2));
    19    }

    20
    21}

    22
    3 .JAVA如何实现字符串的颠倒
    1)

    public class MyReverse {

     /**
      * @param args
      */
     public static void main(String[] args) {
      // TODO Auto-generated method stub
      String str = "asdf";
      char c[] = str.toCharArray();
      char t[] = new char[c.length];
      for(int i=0,j=c.length-1;i<c.length;i++,j--){
       t[i]=c[j];
      }
      System.out.println(String.valueOf(t));  
     }

    2)String   a=   "1000 ";
    StringBuffer   b=new   StringBuffer(a);
    System.out.println(b.reverse());
    ArrayList.Synchronized方法 
        IsSynchronized属性指示当前的ArrayList实例是否支持线程同步,而ArrayList.Synchronized静态方法则会返回一个ArrayList的线程同步的封装。
        如果使用非线程同步的实例,那么在多线程访问的时候,需要自己手动调用lock来保持线程同步,例如:
    ArrayList list = new ArrayList();
    //...
    lock( list.SyncRoot ) //当ArrayList为非线程包装的时候,SyncRoot属性其实就是它自己,但是为了满足ICollection的SyncRoot定义,这里还是使用SyncRoot来保持源代码的规范性
    {
    list.Add( “Add a Item” );
    }

         如果使用ArrayList.Synchronized方法返回的实例,那么就不用考虑线程同步的问题,这个实例本身就是线程安全的,实际上ArrayList内部实现了一个保证线程同步的内部类,ArrayList.Synchronized返回的就是这个类的实例,它里面的每个属性都是用了lock关键字来保证线程同步。

    ****

    但是,使用这个方法(ArrayList.Synchronized)并不能保证枚举的同步,例如,一个线程正在删除或添加集合项,而另一个线程同时进行枚举,这时枚举将会抛出异常。所以,在枚举的时候,你必须明确使用 SyncRoot 锁定这个集合。



    Hashtable与ArrayList关于线程安全性的使用方法类似。
  • 相关阅读:
    Linux安装gitlab
    logback日志配置
    spring源码-aop动态代理-5.3
    【转】阿里云免费SSL证书申请与安装使用(IIS7)
    WebApi 全局使用filter
    Mint-UI Picker 三级联动
    P标签莫名有了margin-top值的原因
    Vue为v-html中标签添加CSS样式
    【转】C# string数组转int数组
    【转】SQLServer汉字转全拼音函数
  • 原文地址:https://www.cnblogs.com/redcoatjk/p/3562413.html
Copyright © 2020-2023  润新知