关于Java208面试题答案java基础

  1. JDK 和 JRE 有什么区别?
    jdk Java 开发工具包 jdk 是整个 Java 开发的核心
    jre Java 运行时环境
    jvm java虚拟机 它只认识 xxx.class jvm 是 Java 能够跨平台的核心
  2. == 和 equals 的区别是什么?
    ==比较内存地址
    equals比较的是值
  3. 两个对象的 hashCode()相同,则 equals()也一定为 true,对吗?
    不对 如果equals()为处则hashCode一定相等
  4. final 在 Java 中有什么作用?
    final修饰类不能被继承
    修饰方法不能被重写
    修饰变量自定义常量
  5. Java 中的 Math.round(-1.5) 等于多少?
    -1.5的绝对值是-1
    -1.500000001的绝对值是-2
  6. String 属于基础的数据类型吗?
    不属于因为string是类,是被final修饰的
  7. Java 中操作字符串都有哪些类?它们之间有什么区别?
    string stringBuffer stringBuilder
    string 常量赋值 使用+或者concat()来拼接字符串 每次拼接都需要新的内存
    拼接效率低
    stringBuffer stringBuilder 必须通过new实例化复制 使用append()方法追加字符串
    不需要新的内存空间 拼接效率高
    stringBuilder 是线程不安全的 而stringBuffer是线程安全的 因为有线程锁关键字
  8. String str="i"与 String str=new String(“i”)一样吗?
    用==比较是不一样的 ==比较的是内存地址 实例化存放在堆中 而str是存放在栈中
    用eques比较值是一样
  9. 如何将字符串反转?
//  递归方法
public static String reverse1(String s) {
  int length = s.length();
  if (length <= 1){
     return s;
    }
  String left = s.substring(0, length / 2);
  String right = s.substring(length / 2, length);
  return reverse1(right) + reverse1(left);
 }
  1. String 类的常用方法都有那些?
    length()//返回该字符串的长度
    charAt(int index)//返回字符串中指定位置的字符;注意字符串中第一个字符索引是0,最后一个是length()-1。
    substring(int beginIndex)//该方法从beginIndex位置起,从当前字符串中取出剩余的字符作为一个新的字符串返回。
    substring(int beginIndex, int endIndex)//该方法从beginIndex位置起,从当前字符串中取出到endIndex-1位置的字符作为一个新的字符串返回。
    compareTo(String anotherString)//该方法是对字符串内容按字典顺序进行大小比较,通过返回的整数值指明当前字符串与参数字符串的大小关系。若当前对象比参数大则返回正整数,反之返回负整数,相等返回0。
    compareToIgnore(String anotherString)//与compareTo方法相似,但忽略大小写。
    equals(Object anotherObject)//比较当前字符串和参数字符串,在两个字符串相等的时候返回true,否则返回false。
    equalsIgnoreCase(String anotherString)//与equals方法相似,但忽略大小写。
    concat(String str)//将参数中的字符串str连接到当前字符串的后面,效果等价于"+"。
    indexOf(int ch/String str)//用于查找当前字符串中字符或子串,返回字符或子串在当前字符串中从左边起首次出现的位置,若没有出现则返回-1。
    indexOf(int ch/String str, int fromIndex)//改方法与第一种类似,区别在于该方法从fromIndex位置向后查找。
    lastIndexOf(int ch/String str)//该方法与第一种类似,区别在于该方法从字符串的末尾位置向前查找。
    lastIndexOf(int ch/String str, int fromIndex)//该方法与第二种方法类似,区别于该方法从fromIndex位置向前查找。
    toLowerCase()//返回将当前字符串中所有字符转换成小写后的新串
    toUpperCase()//返回将当前字符串中所有字符转换成大写后的新串
    replace(char oldChar, char newChar)//用字符newChar替换当前字符串中所有的oldChar字符,并返回一个新的字符串。
    replaceFirst(String regex, String replacement)//该方法用字符replacement的内容替换当前字符串中遇到的第一个和字符串regex相匹配的子串,应将新的字符串返回。
    replaceAll(String regex, String replacement)//该方法用字符replacement的内容替换当前字符串中遇到的所有和字符串regex相匹配的子串,应将新的字符串返回。
    trim()//截去字符串两端的空格,但对于中间的空格不处理。
    split(String str)//将str作为分隔符进行字符串分解,分解后的字字符串在字符串数组中返回。
  2. 抽象类必须要有抽象方法吗?
    抽象类不一定有抽象方法,也可以有普通方法
    抽象方法必须出现在抽象类中
  3. 普通类和抽象类有哪些区别?
    抽象类不能实例化
    抽象类可以有构造函数,被继承时子类必须继承父类一个构造方法,抽象方法不能被声明为静态。
    抽象方法只需申明,而无需实现,抽象类中可以允许普通方法有主体
    含有抽象方法的类必须声明为抽象类
    抽象的子类必须实现抽象类中所有抽象方法,否则这个子类也是抽象类。
  4. 抽象类能使用 final 修饰吗?
    可以,但是被final修饰后的抽象类失去了抽象类的作用,抽象类不能被继承
  5. 接口和抽象类有什么区别?
    抽象类有默认的实现方式,接口完全是抽象的他完全不存在方法的实现
    子类使用关键字extends来继承抽象类,如果子类不是抽象类的话,他需要提供抽象类中所有的声明方法的实现/ 接口子类使用关键字implements来实现接口,他需要提供接口中所有声明的方法的实现
    抽象方法可以有public、protected和default这些修饰符,接口方法默认修饰符是public。你不可以使用其它修饰符
    抽象方法可以有main方法并且我们可以运行它,接口没有main方法,因此我们不能运行它。(java8以后接口可以有default和static方法,所以可以运行main方法)
    抽象方法可以继承一个类和实现多个接口,接口只可以继承一个或多个其它接口
    它比接口速度要快,接口是稍微有点慢的,因为它需要时间去寻找在类中实现的方法。
    如果你往抽象类中添加新的方法,你可以给它提供默认的实现。因此你不需要改变你现在的代码。,如果你往接口中添加方法,那么你必须改变实现该接口的类。
  6. Java 中 IO 流分为几种?、
    将不同的输入输出源通过流的形式进行相关操作(输入,输出),流是一种抽象描述,在程序中表示数据的一种转移方式
    Jdk提供了各种不同的流用于处理不同的输入输出源,根据流性质划分分为以下类型:
    按流向分(站在程序角度考虑)
    输入流(input)
    输出流(output)
    按类型分:
    字节流(InputStream/OutputStream)
    任何文件都可以通过字节流进行传输。
    字符流(Reader/Writer)
    非纯文本文件,不能用字符流,会导致文件格式破坏,不能正常执行。
    节点流(低级流:直接跟输入输出源对接)
    FileInputStream/FileOutputStream/FileReader/FileWriter/PrintStream/PrintWriter.
    处理流(高级流:建立在低级流的基础上)
    转换流:InputStreamReader/OutputStreamWriter,字节流转字符流/字符流转字节流
    缓冲流:BufferedInputStream/BufferedOutputStream BufferedReader/BufferedReader可对节点流经行包装,使读写更快
  7. BIO、NIO、AIO 有什么区别?
    BIO是一个连接一个线程
    NIO是一个请求一个线程
    AIO是一个有效请求一个线程
  8. Files的常用方法都有哪些?
public static void main(String[] args) throws IOException {
        //创建方法
/*        @SuppressWarnings("unused")
        File file = new File("F:\\a.txt");
        System.out.println("创建成功了吗?"+file.createNewFile());
        System.out.println("单级文件夹创建成功了吗?"+file.mkdir());
        System.out.println("多级文件夹创建成功了吗?"+file.mkdirs());
        File dest = new File("F:\\电影\\c.txt");
        System.out.println("重命名成功了吗?"+file.renameTo(dest));
*/
        
/*      //删除方法
        File file = new File("F:\\电影");
        System.out.println("删除成功了吗?"+file.delete());
        file.deleteOnExit();
*/
        
        //判断方法
/*        File file = new File("F:\\a.txt");
        System.out.println("文件或者文件夹存在吗?"+file.exists());
        System.out.println("是一个文件吗?"+file.isFile());
        System.out.println("是一个文件夹吗?"+file.isDirectory());
        System.out.println("是隐藏文件吗?"+file.isHidden());
        System.out.println("此路径是绝对路径名?"+file.isAbsolute());
*/
        
        //获取方法
/*
         File file = new File("f:\\a.txt");
        System.out.println("文件或者文件夹得名称是:"+file.getName());
        System.out.println("绝对路径是:"+file.getPath());
        System.out.println("绝对路径是:"+file.getAbsolutePath());
        System.out.println("文件大小是(以字节为单位):"+file.length());
        System.out.println("父路径是"+file.getParent());
        //使用日期类与日期格式化类进行获取规定的时间
        long  lastmodified= file.lastModified();
        Date data = new Date(lastmodified);
        SimpleDateFormat simpledataformat = new SimpleDateFormat("YY年MM月DD日 HH:mm:ss");
        System.out.println("最后一次修改的时间是:"+simpledataformat.format(data));
*/
        
        //文件或者文件夹的方法

        File[] file = File.listRoots();
        System.out.println("所有的盘符是:");
        for(File item : file){
            System.out.println("\t"+item);
        }
        File filename =new File("F:\\Java workspace\\Java");
        String[] name = filename.list();
        System.out.println("指定文件夹下的文件或者文件夹有:");
        for(String item : name){
            System.out.println("\t"+item);
        }
        File[] f = filename.listFiles();
        System.out.println("获得该路径下的文件或文件夹是:");
        for(File item : f){
            System.out.println("\t"+item.getName());
            }

        }

猜你喜欢

转载自blog.csdn.net/weixin_44100313/article/details/89848100