Java基础-----基础小结

Java基础—–基础小结

最近在逛论坛看Java常见面试题,可以看的很多重复,也是比较”搞“的。所以就大概整理了一些我觉得比较有意思的面试题。(题目都是比较精短的,大神勿喷!)

  1. Overload和Override的区别

    override(重写)
    1)方法名、参数、返回值相同。
    2)子类方法不能缩小父类方法的访问权限。
    3)子类方法不能抛出比父类方法更多的异常(但子类方法可以不抛出异常)。
    4)存在于父类和子类之间。
    5)方法被定义为final不能被重写。
    overload(重载)
    1)参数类型、个数、顺序至少有一个不相同。
    2)不能重载只有返回值不同的方法名。
    3)存在于父类和子类、同类中。

  2. &和&&的区别

    &是位运算符。&&是布尔逻辑运算符。
    还有一种回答:当一个&表达式在求值的时候,两个操作数都会被求值,&&更像是一个操作符的快捷方式。当一个&&表达式求值的时候,先计算第一个操作数,如果它返回true才会计算第二个操作数。如果第一个操作数取值为fale,第二个操作数就不会被求值。

  3. 数据类型之间的转换

    如何将数值型字符转换为数字(Integer,Double)
    使用Integer.parseInt()和Double.parseDouble()方法。
    如何将数字转换为字符
    class my
    {
    int a=12;
    Label label=new Label();
    label.setText(String.valueOf(a));
    }
    如何取小数点前两位,并四舍五入。
    System.out.println(“四舍五入取整:(3.856)=”
    +new BigDecimal(i).setScale(2, BigDecimal.ROUND_HALF_UP));

  4. 数组和集合

    数组与集合的区别:
    一:数组声明了它容纳的元素的类型,而集合不声明。这是由于集合以object形式来存储它们的元素。
    二:一个数组实例具有固定的大小,不能伸缩。集合则可根据需要动态改变大小。
    三:数组是一种可读/可写数据结构没有办法创建一个只读数组。然而可以使用集合提供的ReadOnly方 只读方式来使用集合。该方法将返回一个集合的只读版本。

  5. 谈谈final, finally, finalize的区别。

    final 用于声明属性,方法和类,分别表示属性不可变,方法不可覆盖,类不可继承。
    finally是异常处理语句结构的一部分,表示总是执行。
    finalize是Object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,可以覆盖此方法提供垃圾收集时的其他资源回收,例如关闭文件等。

  6. 使用StringBuffer类与String类进行字符串连接时有何区别?

    JAVA平台提供了两个类:String和StringBuffer,它们可以储存和操作字符串,即包含多个字符的字符数据。这个String类提供了数值不可改变的字符串。而这个StringBuffer类提供的字符串进行修改。当你知道字符数据要改变的时候你就可以使用StringBuffer。典型地,你可以使用StringBuffers来动态构造字符数据。

    7.==与equals的区别

    ==比较两个对象在内存里是不是同一个对象,就是说在内存里的存储位置一致。两个String对象存储的值是一样的,但有可能在内存里存储在不同的地方。

    8.Collection 和 Collections的区别。

    Collection是集合类的上级接口,继承与他的接口主要有Set 和List.
    Collections是针对集合类的一个帮助类,他提供一系列静态方法实现对各种集合的搜索、排序、线程安全化等操作。

    9..接口和抽象类的区别是什么?

    Java提供和支持创建抽象类和接口。它们的实现有共同点,不同点在于:
    接口中所有的方法隐含的都是抽象的。而抽象类则可以同时包含抽象和非抽象的方法。
    类可以实现很多个接口,但是只能继承一个抽象类
    类如果要实现一个接口,它必须要实现接口声明的所有方法。但是,类可以不实现抽象类声明的所有方法,当然,在这种情况下,类也必须得声明成是抽象的。
    抽象类可以在不提供接口方法实现的情况下实现接口。
    Java接口中声明的变量默认都是final的。抽象类可以包含非final的变量。
    Java接口中的成员函数默认是public的。抽象类的成员函数可以是private,protected或者是public。
    接口是绝对抽象的,不可以被实例化。抽象类也不可以被实例化,但是,如果它包含main方法的话是可以被调用的。

    10.Iterator和ListIterator的区别是什么?

    下面列出了他们的区别:
    Iterator可用来遍历Set和List集合,但是ListIterator只能用来遍历List。
    Iterator对集合只能是前向遍历,ListIterator既可以前向也可以后向。
    ListIterator实现了Iterator接口,并包含其他的功能,比如:增加元素,替换元素,获取前一个和后一个元素的索引,等等。

    11.hashCode()和equals()方法的重要性体现在什么地方?

    Java中的HashMap使用hashCode()和equals()方法来确定键值对的索引,当根据键获取值的时候也会用到这两个方法。如果没有正确的实现这两个方法,两个不同的键可能会有相同的hash值,因此,可能会被集合认为是相等的。而且,这两个方法也用来发现重复元素。所以这两个方法的实现对HashMap的精确性和正确性是至关重要的。

    12.Comparable和Comparator接口是干什么的?列出它们的区别。

    Java提供了只包含一个compareTo()方法的Comparable接口。这个方法可以个给两个对象排序。具体来说,它返回负数,0,正数来表明输入对象小于,等于,大于已经存在的对象。

    Java提供了包含compare()和equals()两个方法的Comparator接口。compare()方法用来给两个输入参数排序,返回负数,0,正数表明第一个参数是小于,等于,大于第二个参数。equals()方法需要一个对象作为参数,它用来决定输入参数是否和comparator相等。只有当输入参数也是一个comparator并且输入参数和当前comparator的排序结果是相同的时候,这个方法才返回true。

    13.char型变量中能不能存贮一个中文汉字?为什么?

    能够定义成为一个中文的,因为java中以unicode编码,一个char占16个字节,所以放一个中文是没问题的。

    14.TreeMap和TreeSet在排序时如何比较元素?Collections工具类中的sort()方法如何比较元素?

    TreeSet要求存放的对象所属的类必须实现Comparable接口,该接口提供了比较元素的compareTo()方法,当插入元素时会回调该方法比较元素的大小。TreeMap要求存放的键值对映射的键必须实现Comparable接口从而根据键对元素进行排序。Collections工具类的sort方法有两种重载的形式,第一种要求传入的待排序容器中存放的对象比较实现Comparable接口以实现元素的比较;第二种不强制性的要求容器中的元素必须可比较,但是要求传入第二个参数,参数是Comparator接口的子类型(需要重写compare方法实现元素的比较),相当于一个临时定义的排序规则,其实就是是通过接口注入比较元素大小的算法,也是对回调模式的应用。

    15.简述synchronized 和java.util.concurrent.locks.Lock的异同?

    Lock是Java 5以后引入的新的API,和关键字synchronized相比主要相同点:Lock 能完成synchronized所实现的所有功能;主要不同点:Lock 有比synchronized 更精确的线程语义和更好的性能。synchronized 会自动释放锁,而Lock 一定要求程序员手工释放,并且必须在finally 块中释放(这是释放外部资源的最好的地方)。

    16.多线程有几种实现方法?同步有几种实现方法?

    多线程有两种实现方法,分别是继承Thread类与实现Runnable接口

    同步的实现方面有两种,分别是synchronized,wait与notify
    wait():使一个线程处于等待状态,并且释放所持有的对象的lock。
    sleep():使一个正在运行的线程处于睡眠状态,是一个静态方法,调用此方法要捕捉InterruptedException异常。
    notify():唤醒一个处于等待状态的线程,注意的是在调用此方法的时候,并不能确切的唤醒某一个等待状态的线程,而是由JVM确定唤醒哪个线程,而且不是按优先级。
    notityAll():唤醒所有处入等待状态的线程,注意并不是给所有唤醒线程一个对象的锁,而是让它们竞争。

    上述总结面试题,是根据自己目前所学内容从网上摘录整理的,随深入学习Java,后期要补充更多的相关面试题。
    本文借鉴了
    http://blog.csdn.net/jackfrued/article/details/17566627
    http://blog.sina.com.cn/s/blog_4965eea8010003jp.html
    http://www.lupaworld.com/article-242000-1.html

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java实验,我学习了Java语言的基础知识和编程技巧。Java是一种跨平台的编程语言,具有优秀的性能和可移植性,因此在软件开发领域得到了广泛的应用。学习Java语言不仅可以提高编程技能,还可以提高软件开发的效率和质量。 Java实验主要包括以下内容: 1. Java语言基础知识:Java语言有自己独特的语法和数据类型,需要掌握基础知识才能进行编程。在实验,我学习了Java语言的基本语法、数据类型、控制语句、数组、字符串等知识。 2. 面向对象编程:Java是一种面向对象的编程语言,面向对象编程是Java编程的核心。在实验,我学习了面向对象编程的基本概念、类和对象的定义、封装、继承和多态等知识。 3. 异常处理:在Java编程,异常处理是非常重要的。异常处理可以使程序更加健壮和可靠。在实验,我学习了Java异常的种类、处理方式和抛出异常的方法。 4. 文件操作:在实际的软件开发,文件操作是非常重要的。在Java实验,我学习了如何使用Java语言进行文件的读写操作,包括文件的创建、写入、读取和删除等操作。 5. GUI编程:GUI编程是图形用户界面编程的缩写,是Java编程的一个重要方向。在实验,我学习了如何使用Java Swing和AWT库进行GUI编程,包括窗口、按钮、文本框、标签等控件的创建和使用。 通过这些实验,我深入了解了Java语言的特点和应用领域。我掌握了Java语言的基础知识和编程技巧,提高了我的编程能力和实践能力。在实验过程,我也学会了如何进行程序设计和开发,如何进行调试和测试,以及如何进行代码的优化。同时,我也意识到在编程过程需要注重代码的可读性、可维护性和可扩展性,这对于程序的开发和维护都非常重要。 总之,Java实验是我学习Java语言的重要一步。通过Java实验的学习,我可以更好地掌握Java语言的特点和应用,提高我的编程能力和实践能力,为将来的软件开发奠定良好的基础

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值