Java特性Java是一门面向对象的编程语言。面向对象和面向过程的区别,参考第三个问题。Java独立于平台且可移植。Java有一句??口号:Writeonce,runanywhere,Writeonce,runeverywhere。这也是Java的魅力所在。而实现这一特性的正是Java虚拟机JVM。编译后的Java程序可以在任何带有JVM的平台上运行。你可以在windows平台上写代码,然后让它在linux上运行。Java培训只要在写完代码后将代码编译成.class文件,然后将class文件打包成Java包,jar包就可以在不同的平台上运行了。Java很健壮。Java是一种强类型语言,它允许对潜在的类型不匹配进行扩展的编译时检查。Java需要显式方法声明,它不支持C风格的隐式声明。这些严格的要求确保编译器捕获调用错误,从而产生更可靠的程序。异常处理是Java中使程序更健壮的另一个特性。异常是类似于错误的某种异常情况的信号。使用try/catch/finally语句,程序员可以找到错误处理代码,从而简化了错误处理和恢复的任务。Java和C++的区别Java是纯面向对象的语言,所有的对象都继承自java.lang.Object,C++兼容C,不仅支持面向对象还支持面向过程。Java通过虚拟机实现跨平台的特性,而C++依赖于特定的平台。Java没有指针,它的引用可以理解为安全指针,而C++和C一样有指针。Java支持自动垃圾回收,而C++需要手动回收。Java不支持多重继承,只能通过实现多个接口来达到同样的目的,而C++支持多重继承。面向对象和面向过程有什么区别?面向对象和面向过程是一种软件开发思想。面向过程就是分析解决问题所需要的步骤,然后用函数来实现这些步骤,使用的时候依次调用。面向对象就是将组成问题的事务分解成一个个的对象,对这些对象分别进行设计,然后将它们组装成一个功能完整的系统。面向过程只是用函数实现,面向对象是用类来实现各个功能模块。以西洋双陆棋为例,面向过程的设计思想是分析问题的第一步:1.开始游戏;,判断输赢,8,返回第2步,9,输出最终结果。用单独的函数实现上面的每一步,问题就解决了。面向对象设计是从另一种思路来解决问题。整个五子棋可以分为:黑白板系统,负责画图规则系统,负责判定如犯规,输赢等,黑白两边负责接受用户的输入,并通知棋盘系统,棋子的布局发生了变化。棋盘系统收到棋子变化信息后,负责将变化显示在屏幕上。同时,它使用规则系统来判断棋局。JKD和JRE的区别?JDK和JRE是Java开发和运行工具,其中JDK包含JRE,JRE可以独立安装。JDK:JavaDevelopmentKit,JAVA语言的软件工具开发包,是整个JAVA开发的核心。包括JAVA运行时(JVM+JAVA类库)环境和JAVA工具。JRE:JavaRuntimeEnvironment,Java运行时环境,包括JVM标准实现和Java核心类库。JRE是Java运行环境,不是开发环境,因此不包含任何开发工具(如编译器、调试器)。JRE是运行用Java语言编写的程序不可或缺的运行环境。也正是通过它,Java开发者可以将自己开发的程序发布给用户使用。面向对象的特点是什么?面向对象的四大特点:封装、继承、多态、抽象1、封装是将类的信息隐藏在类内部,不允许外部程序直接访问,而是通过类实现对隐藏信息的操作和访问类的方法。良好的包装减少了耦合。2.继承就是从一个已经存在的类派生出一个新的类。新类继承了父类的属性和行为,可以扩展新的能力,大大增加了程序的可重用性和易维护性。在Java中是单继承,即一个子类只有一个父类。3.多态性是同一行为具有多种不同表现形式的能力。在不修改程序代码的情况下,更改程序运行时绑定的代码。多态的三要素:继承、重写和指向子类对象的父类引用。静态多态:通过重载实现,同一个方法有不同的参数列表,可以根据不同的参数做不同的处理。动态多态:在子类中覆盖父类的方法。运行时判断被引用对象的实际类型,根据其实际类型调用相应的方法。4.抽象。用代码抽象客观事物。Java的基本数据类型有哪些?byte,8bitchar,16bitshort,16bitint,32bitfloat,32bitlong,64bitdouble,64bitboolean,只有两个值:true,false,可以用1bit来存储什么是值传递和引用传递?值传递是针对基本变量的,传递的是变量的副本,改变副本不会影响原变量。引用传递一般是针对对象变量,传递的是对象地址的副本,而不是原始对象本身。所以对引用对象的操作也会改变原始对象。Java中自动装箱拆箱的基本数据类型及其对应的包装类如下表所示:装箱:将基本类型转换为包装类型。拆箱:将包装类型转换为基础类型。当基本类型及其封装类有以下几种情况时,编译器会自动帮我们装箱或拆箱:赋值操作(装箱或拆箱)进行加减乘除混合运算(拆箱)>、<、==比较操作(拆箱)调用equals进行比较(装箱)ArrayList、HashMap等集合类添加基本类型数据(装箱)示例代码:Integerx=1;//装箱调用Integer.valueOf(1)inty=x;//拆箱并调用X.intValue()来看一个常见的面试题:publicvoidtestAutoBox(){inta=100;Integerb=100;System.out.println(a==b);Integerc=100;整数d=100;System.out.println(c==d);整数e=200;整数f=200;System.out.println(e==f);}output:truetruefalse为什么第三个输出是假的?看看Integer类的源代码就知道了。publicstaticIntegervalueOf(inti){if(i>=IntegerCache.low&&i<=IntegerCache.high)returnIntegerCache.cache[i+(-IntegerCache.low)];returnnewInteger(i);}整数e=200;将调用Integer.valueOf(200)。从Integer的valueOf()的源码可以看出,这里的实现并不是简单的newInteger,而是使用了IntegerCache作为缓存。privatestaticclassIntegerCache{staticfinalintlow=-128;staticfinalinthigh;staticfinalIntegercache[];static{//高值可以通过property配置inth=127;StringintegerCacheHighPropValue=sun.misc.VM.getSavedProperty("java.lang.Integer.IntegerCache.high");if(integerCacheHighPropValue!=null){try{inti=parseInt(integerCacheHighPropValue);i=Math.max(i,127);//最大数组大小为整数.MAX_VALUEh=Math.min(i,Integer.MAX_VALUE-(-low)-1);}catch(NumberFormatExceptionnfe){//如果属性不能解析成int,忽略它。}}high=h;}...}这是IntegerCache静态代码块的一部分。Integer缓存默认下限为-128,上限默认为127。在给Integer赋值100的时候,刚好在这个范围内,所以从缓存中取出对应的Integer返回,所以同一个对象返回了两次,所以==比较相等。给Integer赋值200时,不在缓存范围内,所以会返回新的Integer,当然==比较的结果不是equal_java培训机构。为什么String是不可变的?先看Java8String类的源码:publicfinalclassStringimplementsjava.io.Serializable,Comparable
