java基础知识——java入门与加深二

2016-02-19 14:00 8 1 收藏

今天给大家分享的是由图老师小编精心为您推荐的java基础知识——java入门与加深二,喜欢的朋友可以分享一下,也算是给小编一份支持,大家都不容易啊!

【 tulaoshi.com - 编程语言 】


  31 throw和throws有什么不同?
  
  答:throws用于声明一个方法会抛出哪些异常。而throw是在方法体中实际执行抛出异常的动作。
  
  假如你在方法中throw一个异常,却没有在方法声明中声明之,编译器会报错。
  
  注重Error和RuntimeException的子类是例外,无需非凡声明。
  
  32 什么是异常?
  
  答:异常最早在Ada语言中引入,用于在程序中动态处理错误并恢复。
  
  你可以在方法中拦截底层异常并处理之,也可以抛给更高层的模块去处理。
  
  你也可以抛出自己的异常指示发生了某些不正常情况。常见的拦截处理代码如下:
  try
  {
  ...... //以下是可能发生异常的代码
  ...... //异常被抛出,执行流程中断并转向拦截代码。
  ......
  }
  
  catch(Exception1 e) //假如Exception1是Exception2的子类并要做非凡处理,应排在前面
  {
  //发生Exception1时被该段拦截
  }
  catch(Exception2 e)
  {
  //发生Exception2时被该段拦截
  }
  finally //这是可选的
  {
  //无论异常是否发生,均执行此段代码
  }
  
  33 final和finally有什么不同?
  
  答:final请见26。finally用于异常机制,参见32。
  
  五、 面向对象篇
  
  34 extends和implements有什么不同?
  
  答:extends用于(单)继续一个类(class),而implements用于实现一个接口(interface)。
  
  interface的引入是为了部分地提供多继续的功能。
  
  在interface中只需声明方法头,而将方法体留给实现的class来做。
  
  这些实现的class的实例完全可以当作interface的实例来对待。
  
  有趣的是在interface之间也可以声明为extends(单继续)的关系。
  
  35 Java怎么实现多继续?
  
  答:java不支持显式的多继续。
  
  因为在显式多继续的语言例如c++中,会出现子类被迫声明祖先虚基类构造函数的问题,而这是违反面向对象的封装性原则的。
  
  java提供了interface和implements要害字来部分地实现多继续。参见34。
  
  36 abstract是什么?
  
  答:被声明为abstract的方法无需给出方法体,留给子类来实现。
  
  而假如一个类中有abstract方法,那么这个类也必须声明为abstract。
  
  被声明为abstract的类无法实例化,尽管它可以定义构造方法供子类使用。
  
  37 public,protected,private有什么不同?
  
  答:这些要害字用于声明类和成员的可见性。public成员可以被任何类访问,protected成员限于自己和子类访问,private成员限于自己访问。
  
  Java还提供了第四种的默认可见性,当没有任何public,protected,private修饰时.
  
  类可以用public或默认来修饰。
  
  38 Override和Overload有什么不同?
  
  答:Override是指父类和子类之间方法的继续关系,这些方法有着相同的名称和参数类型。
  
  Overload是指同一个类中不同方法(可以在子类也可以在父类中定义)间的关系,这些方法有着相同的名称和不同的参数类型。
  
  39 我继续了一个方法,但现在我想调用在父类中定义的方法。
  
  答:用super.xxx()可以在子类中调用父类方法。
  
  40 我想在子类的构造方法中调用父类的构造方法,该怎么办?
  
  答:在子类构造方法的第一行调用super(...)即可。
  
  41 我在同一个类中定义了好几个构造方法并且想在一个构造方法中调用另一个。
  
  答:在构造方法第一行调用this(...)。
  
  42 我没有定义构造方法会怎么样?
  
  答:自动获得一个无参数的构造方法。
  
  43 我调用无参数的构造方法失败了。
  
  答:假如你至少定义了一个构造方法,就不再有自动提供的无参数的构造方法了。
  
  你需要显式定义一个无参数的构造方法。
  
  44 我该怎么定义类似于C++中的析构方法(destrUCtor)?
  
  答:提供一个void finalize()方法。在Garbarge Collector回收该对象时会调用该方法。
  
  注重实际上你很难判定一个对象会在什么时候被回收。作者从未感到需要提供该方法。
  
  45 我想将一个父类对象转换成一个子类对象该怎么做?
  
  答:强制类型转换。如
  public void meth(A a)
  {
  B b = (B)a;
  }
  假如a实际上并不是B的实例,会抛出ClassCastException。所以请确保a确实是B的实例。
  
  46 其实我不确定a是不是B的实例,能不能分情况处理?
  
  答:可以使用instanceof操作符。例如
  
  if( a instanceof B )
  {
  B b = (B)a;
  }
  else
  {
  ...
  
  
  }
  
  47 我在方法里修改了一个对象的值,但是退出方法后我发现这个对象的值没变!
  
  答:很可能你把传入参数重赋了一个新对象,例如下列代码就会造成这种错误:
  
  public void fun1(A a) //a是局部参数,指向了一个外在对象。
  {
  a = new A(); //a指向了一个新对象,和外在对象脱钩了。假如你要让a作为传出变量,不要写这一句。
  
  a.setAttr(attr);//修改了新对象的值,外在对象没有被修改。
  }
  
  基本类型也会出现这种情况。例如:
  
  public void fun2(int a)
  {
  a = 10;//只作用于本方法,外面的变量不会变化。
  }
  
  六、java.util篇
  
  48 java能动态分配数组吗?
  
  答:可以。例如int n = 3; Language[] myLanguages = new Language[n];
  
  49 我怎么知道数组的长度?
  
  答:用length属性。如上例中的 myLanguages.length 就为 3。
  
  50 我还想让数组的长度能自动改变,能够增加/删除元素。
  
  答:用顺序表--java.util.List接口。
  
  你可以选择用ArrayList或是LinkedList,前者是数组实现,后者是链表实现。
  
  例如: List list = new ArrayList(); 或是 List list = new LinkedList(); 。
  
  51 什么是链表?为什么要有两种实现?
  
  答:请补习数据结构。
  
  52 我想用队列/栈。
  
  答:用java.util.LinkedList。
  
  53 我希望不要有重复的元素。
  
  答:用集合--java.util.Set接口。例如:Set set = new HashSet()。
  
  54 我想遍历集合/Map。
  
  答:用java.util.Iterator。参见API。
  
  55 我还要能够排序。
  
  答:用java.util.TreeSet。例如:Set set = new TreeSet()。放进去的元素会自动排序。
  
  你需要为元素实现Comparable接口,还可能需要提供equals()方法,compareTo()方法,hash Code()方法。
  
  56 但是我想给数组排序。
  
  答:java.util.Arrays类包含了sort等实用方法。
  
  57 我想按不同方法排序。
  
  答:为每种方法定义一个实现了接口Comparator的类并和Arrays综合运用。
  
  58 Map有什么用?
  
  答:存储key-value的要害字-值对,你可以通过要害字来快速存取相应的值。
  
  59 set方法没问题,但是get方法返回的是Object。
  
  答:强制类型转换成你需要的类型。参见45。
  
  60 我要获得一个随机数。
  
  答:使用java.util.Random类。
  
  61 我比较两个String总是false,但是它们明明都是"abc" !
  
  答:比较String一定要使用equals或equalsIgnoreCase方法,不要使用 == !
  
  ==比较的是两个引用(变量)是否指向了同一个对象,而不是比较其内容。

来源:http://www.tulaoshi.com/n/20160219/1605915.html

延伸阅读
对于这个系列里的问题,每个学Java的人都应该搞懂。当然,如果只是学Java玩玩就无所谓了。如果你认为自己已经超越初学者了,却不很懂这些问题,请将你自己重归初学者行列。 问题一:我声明了什么! String s = "Hello world!"; 许多人都做过这样的事情,但是,我们到底声明了什么?回答通常是:一个String,内容...
  我们知道,Java的数据类型分为三大类,即布尔型、字符型和数值型,而其中数值型又分为整型和浮点型;相对于数据类型,Java的变量类型为布尔型boolean;字符型char;整型byte、short、int、long;浮点型float、double。其中四种整型变量和两种浮点型变量分别对应于不同的精度和范围。此外,我们还经常用到两种类变量,即String和Date。对...
What is Java? Why Java? 大家学习Java有各自的理由,基本上Java是一个比较好的面向对象语言,api丰富 是当前比较主流的编程语言,J2SE/J2ME/J2EE在各个开发领域都发展良好 Java不会取代其他开发语言或开发平台,如c/c++/c#或Delphi/.NET 没有最好的语言,只有某种应用场合下相对合适的语言 JR...
一、软件下载: 1、java 这里使用的是jdk1.4.2。 下载地址:http://dlc.sun.com/jdk/j2sdk-1_4_2_07-windows-i586-p.exe; 2、tomcat 这里的tomcat的版本是5.0的,安装版或是解压版都是可以的。 下载地址:http://apache.linuxforum.net/dis ... a-tomcat-5.0.28.exe 3、数据库 推荐使用mysql,but暂时找不到下载地址,由于此次偶...
  Abstractclass和interface是Java语言中对于抽象类定义进行支持的两种机制,正是由于这两种机制的存在,才赋予了Java强大的面向对象能力。abstractclass和interface之间在对于抽象类定义的支持方面具有很大的相似性,甚至可以相互替换,因此很多开发者在进行抽象类定义时对于abstractclass和interface的选择显得比较随意。其实,两者之间...

经验教程

208

收藏

31
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部