Java基础面试题
jdk和jre的区别
JRE
Java Runtime Environment java运行环境,包括Java虚拟机和Java程序所需的核心类库等。
JDK
Java Development Kit java开发工具包,提供java的开发环境和运行环境。
JDK包含了JRE和JVM。
&与&&的区别
&和&&都可以用作逻辑与的运算符(and),当运算符两边的表达式的结果都为true时,整个结果才会返回true,否则
一方为false,则结果为false。&&还具有短路功能,即如果第一个表达式为false,则不在进行第二个表达式。例如判
断一个字符串是否为空我们通常都是if(str!=null &&str.equals(" "));当str==null时,后面的表达式不会执行,所以不会
出现空指针异常。
&还可以用作位运算符,当&两边的表达式不为boolean类型时,&表示按位与操作。参加运算符的两个数据按照二进
制进行与运算。我们通常使用n&n-1将二进制最低位的1变为0
==和equlas的区别
符号== 它的作用是用来比较两个对象的值是否相等,也就是判断两个变量所对应的内存中所存储的数值是否相同。即,
判断两个对象是不是同一个对象。(基本数据类型 == 比较的是值,引用数据类型 == 比较的是内存地址)
equals() : 它的作用也是判断两个对象是否相等。但它一般有两种使用情况:
情况1:类没有覆盖 equals() 方法。则通过 equals() 比较该类的两个对象时,等价于通过“==”比较这两个对象。
情况2:类覆盖了 equals() 方法。一般,我们都覆盖 equals() 方法来两个对象的内容相等;若它们的内容相等,则返回 true .
例如:
String c1=new String("123");
String c2=new String("123");
因为String类中重写了equlas方法所以比较的是两个对立对象的内容是否相等。如果自己编写的类需要判断两个对象
Integer和int的区别
Java 是一个近乎纯洁的面向对象编程语言,但是为了编程的方便还是引入了基本数据类型,但是为了能够将这些基
本数据类型当成对象操作,Java 为每一个基本数据类型都引入了对应的包装类型(wrapper class),int 的包装类就
是 Integer,从 Java 5 开始引入了自动装箱/拆箱机制,使得二者可以相互转换。int的默认值是0,Integer的默认值为
null。Integer可用来区分出未赋值和0之间的区别。例如未参加考试和考0分。Integer还提供了多个与整数操作相关的方法。例如将字符串转化成整数(Integer.valueOf()),还定义了表示整数最大值(Integer.MAX_VALUE)、最小值的
常(Integer.MIN_VALUE)。
Java 为每个原始类型提供了包装类型:
原始类型: boolean,char,byte,short,int,long,float,double
包装类型:Boolean,Character,Byte,Short,Integer,Long,Float,Double
方法的重载和重写的区别
方法的重载和重写都是实现多态的方式,区别在于前者实现的是编译时的多态性,而后者实现的是运行时的多态性。
**重载:**发生在同一个类中,方法名相同参数列表不同(参数类型不同、个数不同、顺序不同),与方法返回值和访问
修饰符无关,即重载的方法不能根据返回类型进行区分。
**重写:**发生在父子类中,方法名、参数列表必须相同,返回值小于等于父类,抛出的异常小于等于父类,访问修饰符
大于等于父类(里氏代换原则);如果父类方法访问修饰符为private则子类中就不是重写。
面向对象的特征
1.抽象:抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面。抽象并不
打算了解全部问题,而只是选择其中的一部分,暂时不用部分细节。抽象包括两个方面,一是过程抽象,二是数据抽
象。
2.继承:继承是一种联结类的层次模型,并且允许和鼓励类的重用,它提供了一种明确表述共性的方法。对象的一个
新类可以从现有的类中派生,这个过程称为类继承。新类继承了原始类的特性,新类称为原始类的派生类(子类),而原始类称为新类的基类(父类)。派生类可以从它的基类那里继承方法和实例变量,并且类可以修改或增加新的方法使之更适合特殊的需要。
3.封装:封装是把过程和数据包围起来,对数据的访问只能通过已定义的界面。面向对象计算始于这个基本概念,即现实世界可以被描绘成一系列完全自治、封装的对象,这些对象通过一个受保护的接口访问其他对象。
4.多态性:多态性是指允许不同类的对象对同一消息作出响应。多态性包括参数化多态性和包含多态性。多态性语言具有灵活、抽象、行为共享、代码共享的优势,很好的解决了应用程序函数同名问题。
什么是值传递?什么是引用传递?
值传递:是对基本型变量而言的,传递的是该变量的一个副本,改变副本不影响原变量.
引用传递:一般是对于对象型变量而言的,传递的是该对象地址的一个副本, 并不是原对象本身 。 所以对引用对象进行
操作会同时改变原对象.
一般认为,java内的传递都是值传递.
区别:
值传递:指的是在方法调用时,传递的参数是按值的拷贝传递,传递的是值的拷贝,也就是说传递后就互不相关了。
引用传递:指的是在方法调用时,传递的参数是按引用进行传递,其实传递的引用的地址,也就是变量所对应的内存
空间的地址。传递的是值的引用,也就是说传递前和传递后都指向同一个引用。