黑马程序员-java基础-总结的几点问题

时间:2023-01-02 00:31:27

----<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流!----

final, finally, finalize的区别。

 final?修饰符(关键字)如果一个类被声明为final,意味着它不能再派生出新的子类,不能作为父类被继承。因此一个类不能既被声明为 abstract的,又被声明为final的。将变量或方法声明为final,可以保证它们在使用中不被改变。被声明为final的变量必须在声明时给定初值,而在以后的引用中只能读取,不可修改。被声明为final的方法也同样只能使用,不能重载

  finally?再异常处理时提供 finally 块来执行任何清除操作。如果抛出一个异常,那么相匹配的 catch 子句就会执行,然后控制就会进入 finally 块(如果有的话)。

  finalize?方法名。Java 技术允许使用 finalize() 方法在垃圾收集器将对象从内存中清除出去之前做必要的清理工作。这个方法是由垃圾收集器在确定这个对象没有被引用时对这个对象调用的。它是在 Object 类中定义的,因此所有的类都继承了它。子类覆盖 finalize() 方法以整理系统资源或者执行其他清理工作。finalize() 方法是在垃圾收集器删除对象之前对这个对象调用的。

Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类,是否可以implements(实现)interface(接口)?
      匿名的内部类是没有名字的内部类。不能extends(继承) 其它类,但一个内部类可以作为一个接口,由另一个内部类实现。

Static Nested Class 和 Inner Class的不同,说得越多越好(面试题有的很笼统)。

 Nested Class (一般是C++的说法),Inner Class (一般是JAVA的说法)。Java内部类与C++嵌套类最大的不同就在于是否有指向外部的引用上 

   具体可见http: //www.frontfree.net/articles/services/view.asp?id=704&page=1

   静态内部类(Inner Class)意味着1创建一个static内部类的对象,不需要一个外部类对象,2不能从一个static内部类的一个对象访问一个外部类对    象

&和&&的区别。
     &是位运算符。&&是布尔逻辑运算符。

Collection 和 Collections的区别
  Collections是个java.util下的类,它包含有各种有关集合操作的静态方法。

  Collection是个java.util下的接口,它是各种集合结构的父接口。


重写和重载有什么区别?
   重写是子类继承父类后,有一模一样的方法,子类重写父类的方法
   重载,一个类中,方法名相同,参数列表不同
   
方法的重载能不能改变返回值类型

     可以


this 和 super 的含义,应用场景
   this 本类对象引用
   super 父类的存储空间标识
   this 区别成员和局部变量重名,this调用本类中的方法
   super 调用父类中的成员


抽象类和接口区别

    |--使用区别
接口:实现类实现接口,全部抽象方法重写,建立实现类对象;
抽象类:抽象类子类继承,重写全部抽象方法.建立子类对象,普通方法子类继承直接使用;
    |--继承体系关系
接口:继承体系中是 like..a关系,整个体系的扩展内容;
抽象类:继承体系中是is..a关系,整个体系最共性内容;


静态成员与非静态成员的区别:
静态成员是所有对象的共享数据
非静态成员是对象自己的特有数据


成员变量和局部变量的区别:
A:在类中的位置不同
* 成员变量:在类中方法外
* 局部变量:在方法定义中或者方法声明上
B:在内存中的位置不同
* 成员变量:在堆内存(成员变量属于对象,对象进堆内存)
* 局部变量:在栈内存(局部变量属于方法,方法进栈内存)
C:生命周期不同
* 成员变量:随着对象的创建而存在,随着对象的消失而消失
* 局部变量:随着方法的调用而存在,随着方法的调用完毕而消失
D:初始化值不同
* 成员变量:有默认初始化值
* 局部变量:没有默认初始化值,必须定义,赋值,然后才能使用。


接口继承Object类吗? 
   不继承.   但是曾经Sun公司官网曾说过一个接口中,隐含定义了Object类的全部方法,但是全部抽象;


equsle  和 == 的区别?
   根本上区别,equsle是方法, == 是比较运算符;
   equsle方默认比较的是对象的地址;
   重写equsle方法,比较对象中的成员变量值;
   == 两边是基本数据类型,比较的是具体的数值;
   == 两边是引用数据类型,比较的是对象的地址;

字符串的常量和变量的区别
   String s1 = "你好";
   String s2 = "吗";
   String s3 = "你好吗";
   s3 == (s1+ s2)  // false
   参与运算s1 s2变量,变量在编译时期,不确定相加后的值是什么
   运行期间JVM,会对变量相加后的结果,从新开辟内存空间;
   s3 == ("你好"+ "吗") //ture
   参与运算的是常量,固定不变,编译的时候,已确定计算结果;

String,StringBuffer,StringBuilder的区别?
   String是不可变的,StringBuffer,StringBuilder 不可变的;
   StringBuffer   线程安全,运行慢;
   StringBuilder 线程不安全,运行块;

StringBuffer 和 数组的区别?
   数组定长,
   StringBuffer底层也是数组,可以是使用复制的方式实现一个变长的数组;
   
数组和集合的区别?
   共性:容器存储;
   不同:
1.集合的长度是可变的
   数组的长度是固定的
2.集合存储对象,引用数据类型;
 数组存储对象,基本数据类型;
3.数组存储的类型单一化
 集合存储的类型可以是多个;

如果两个对象的哈希值一样,两个对象调用equals方法的时候,一定返回true吗?
如果两个对象调用equals方法返回true,两个对象的哈希值一样吗?

根据Sun公司规定的hashCode协定:
第一个: 不一定;
第二个: 一样;

HashMap 和 Hashtable 的区别:
   共性:
底层都是哈希表;
        存储的键,必须实现hashCode equals 保证对象的唯一性;
   区别: 
HashMap 是线程不安全集合,运行速度快;
允许null值null键;
Hashtable 线程安全集合,运行速度慢;
 不允许存储null