当前位置 > 主页 > 万和大讲堂 >


南京万和Java培训分享:Java的类常识(二)

2016-11-22 11:40

  本文南京万和Java培训继续和大家分享Java的类常识(二),请耐心看完哦,希望能帮助到大家!


  1.String类和StringBuffer类有什么区别?


  南京万和Java培训解析:String类是不可变类,字符串一旦初始化后,就不能被改变。而StringBuffer类是可变类,字符串值可以呗改变。常常在实际应用中看到累死这样的代码:String s=new(“hello”);s+=”world”,这两句代码首先创建一个字符hello,然后将world追加到hello结尾并重新赋值给变量s。然后,这个过程实际上是这样的:首先创建一个StringBuffer对象,然后用StringBuffer类的append方法追加字符串,最后对StringBuffer对象调用toString方法合成字符串返回。可见,使用+号连接字符串时,本质上是使用了可变的StringBuffer类,经变动肯定性能效率受到影响,所以建议需要追加字符串时,可以考虑直接使用StringBuffer类。


  参考答案:String类是不可变类,即字符串值一旦初始化后就不可能改变。StringBuffer是可变字符串类,类似String的缓冲区,可以修改字符串的值。


  2.StringBuffer和StringBuilder类有什么区别?


  南京万和Java培训解析: StringBuffer是JDK5中增加的一个新类,在以前版本中不存在这个类。StringBuilder中的方法和StringBuffer中的方法基本相同,但是StringBuffer是线程安全的,而StringBuilder不是线程安全的,因此在不考虑同步的情况下,StringBuilder有更好的性能。


  参考答案:StringBuffer是线程安全的字符串缓冲,而StringBuilder不是线程安全的。


  3.包装器类型包括哪些类,有什么作用?


  南京万和Java培训解析:初级程序员常常对float和Float或者double和Double感到混淆。在Java语言中,有八中基本数据类型,即byte、int、long、float、double、char、boolean。对应这八种基本数据类型,API中定义了八个类,能把这些基本类型转换成引用类型,分别是Byte、Short、Int、Long、Double、Character、Boolean。这八个类被统称为包装器类。


  JDK5之后,包装器类和基本数据类型之间可以直接转换,称为自动的装箱拆箱(boxing/unboxing)。例如integer it=3;it++;虽然写法上可以像使用基本数据类型一样使用包装器类型,但是本质上依**行了类似 it= new Integer(3)的转换,因此,不要轻易使用包装器类的自动装箱拆箱,以优化的性能。能够使用基本类型就使用基本类型。


  参考答案:包装类器包括Byte、Short、Integer、Long、Float、Double、Character、Boolean等类,主要用来对byte、short、integer、long、float、double、character、boolean这八种基本数据类型进行包装,使其称为引用类型。


  4.请说明Java语言中的值传递规则。


  南京万和Java培训解析:值传递时编写应用时不可避免的操作。例如某方法声明形式是public void f(int x){},写方法是,必须为其传递一个int类型的实际参数,如f(10)。又如public void g(Employee)。那么使用该方法时,必须为其传递一个Employee类型的实际参数,例如g(new Employee())。


  所以,对于初级程序员来说,了解Java语言的值传递规则非常重要。Java语言是本类型传递的值,例如f(10),仅仅把10复制给形式参数x,是值的拷贝。而引用类的传递时引用,即虚地址,例如g(new Employee())是把实际参数的虚地址传递给形式参数e,也就是说实际参数和形式参数的虚地址相同,物理上是同一个对象。


  参考答案:基本数据类型传递的是值,引用类型传递的是引用,即虚地址。


  5.使用static修饰属性或方法后,属性和方法有什么特征?


  南京万和Java培训解析:static修饰符是一个非常常见并重要的修饰符,称为静态。静态不是指值不能改变,很多初级程序员容易容易望文生义的地方。Static常常用来修饰类的属性或者方法。当一个属性或者方法和对象没有关系,或者说是任何对象共享的时候,那么就应该用static进行修饰。列如某类中的计数器,用来计算实例的个数。那么这个计数器属性就是所有对象共享的属性,就应该用static修饰。


  又例如Math类中的abs(int)方法,用来返回参数的绝对值,这个方法和Math类的对象没有关系,Math类对象可以共享这个方法,那么这个方法就可以用static修饰。程序员必须深入理解static修饰符的使用。


  参考答案:static修饰属性或方法后,属性和方法不在属于某个特定的对象,而是所有共享,也可以说是static成员不依赖某个对象,在类加载时就被初始化。Static修饰的属性或方法,可以直接使用类名调用,而不用先实例化对象再调用。


  6.使用final修饰属性后,属性有什么特征?


  南京万和Java培训解析:属性可以是变量也可以是常量,如果是常量,就需要使用final修饰。如果使用final修饰了某个属性,那么该属性值一旦被赋值,就不能被修改,实际中常常有这个样的码:private static final int ERROR=0;也就是说,常常会生命静态的常量。


  静态常量的命名规范非常特殊,往往都是用大写字母,如果包含多个单词,每个单词之间使用下划线连接。静态常量的意思是,该类所有的对象都拥有一个不变的常量ERROR,作为0.API中很多类都定义了很多的静态常量,使用时直接使用类名调用即可。


  参考答案:fianl修饰属性后,属性就成为一个常量。常量只要被赋值,就不能被改变。


  7.请说明操作符==的作用。


  南京万和Java培训解析:实际编程中,==是非常常用的操作符。很多初级程序员会使用这样的代码if(s==”save”0{},结果会发现,即使当字符串s的值为save时,if条件依然不能被执行。是==在比较引用类型时,比较的是两个对象的虚地址,而不是内容。


  要比较两个对象的内容是否相同,往往需要使用equal方法,例如if(s.equals(“save”)){}。==比较基本类型时,将比值的二进制是否相等,例如(x==0.5){}。值得注意的是,与空指针null值进行比较,往往用==进行,例如if(s==null||s.equals(“”)),表示如果字符串是空指针或者空串。


  参考答案:==可以用来比较基本类型或者引用类型。比较基本类型时,==用来比较二进制的值,比较引用类型时,用来比较对象的虚地址。


  8.请说明&&与&的区别和联系


  南京万和Java培训解析:实际编程中,常常需要使用“与”或者“或”的逻辑。其中&&和&存在一定区别&&可能发生各路问题,例如if(s!=null&&s.length()==6)中,如果要的值为null,那么第一表达式的值为false,返回值肯定是false,不会计算第二个表达式的值,这就是短路。然而使用&,例如if(s!=null&s.length()==6),假设s的值为,null,返回值肯定是false,但是会判断第二个表达式的值,将发生空指针异常。实际工作中,经常使用&&操作符。


  参考答案:&&会发生短路问题,当第一个表达式的值为false时,将直接返回结果为false而不会判断第二个表达式的值。而&不会发生短路问题,即使第一个表达式的值是false,会判断第二个表达式的值。


  9.break语句能在什么场景使用。


  南京万和Java培训解析:break语句表示中断,不能够随便使用,只能在循环语句中或者switch语句中使用。初级工程师往往容易将break和return混淆。Return是可以再方法体中任意位置使用,可以带值返回页可以不带值返回,执行return语句后,该方法将返回,也就是方法执行结束。而break只能在循环体中或者switch的case语句中使用,不能随意使用。


  参考答案:break语句可以再循环体中使用,也可以在switch的case语句中使用。


  10.for循环中的break语句和continue语句的使用。


  南京万和Java培训解析:很多时候,循环是为了查找某些符合条件的数据,只要找到就没有必要继续下去,称为中断循环,break语句就可以用来中断循环。而continue语句恰恰相反,是用来继续下一次循环。值得注意的是,java语言中可以再循环前面加标号,即label,然后可以使用break或continue中断或继续标号的循环。


  参考答案:break可以用来中断循环,continue可以用来继续下一次循环。


  今天南京万和Java培训就讲这么多,明天继续.....最后,江苏万和Java培训班正在火热招生中,欢迎小伙伴们来万和试听哦!

最近开班 more>
  • 全栈开发
  • 前端基础班
  • 软件测试
  • Java大数据开发工程师
  • 云原生精英班
  • 开发课程基础班第四期
  • 开发课程基础班第三期
  • 开发课程基础班第二期
  • 开发课程基础班第一期
  • Java Web UI Python
  • CISP
  • HCIE-Datacom(HCIA,HCIP基础)
  • HCIP-Datacom(HCIA基础)
  • HCIA-Datacom(0基础)
  • HCIE-Datacom(HCIA,HCIP基础)
  • HCIP-Datacom(HCIA基础)
  • HCIA-Datacom(0基础)
  • OCM 12C
  • OCP 19C
  • RHCE 9.0
  • 脱产班
  • 脱产班
  • 脱产班
  • 脱产班
  • 脱产班
  • 脱产班
  • 脱产班
  • 脱产班
  • 脱产班
  • vip班
  • 考试计划
  • 脱产班
  • 脱产班
  • 脱产班
  • 双休班
  • 双休班
  • 双休班
  • 双休班
  • 业余班
  • 业余班
  • 10月16日
  • 9月23日
  • 9月2日
  • 9月30日
  • 8月26日
  • 10月8日
  • 9月23日
  • 9月16日
  • 9月9日
  • 随时开课
  • 9月21日
  • 10月17日
  • 9月18日
  • 9月2日
  • 11月2日
  • 10月26日
  • 9月7日
  • ——
  • 随时开课
  • 9月26日
    • 姓 名 :
    • 电 话 :
    • 课 程 :

技术交流群

  • Java大数据交流群560819979加入
  • Python技术交流群595083299加入
  • Oracle技术交流群595119011加入
  • Web前端技术交流群604697610加入
  • Huawei技术交流群482919361加入
  • Redhat技术交流群587875348加入
  • UI设计技术交流群511649801加入
  • Cisco技术交流群596886705加入
  • IT运维技术交流群605888381加入