1、equals与==的区别,判断两个对象是否相同,能使用equlas比较吗?
2、JDK、JRE、JVM关系是什么?
3、Java支持的数据类型有哪些?什么是自动拆装箱?
4、面向对象是什么?
5、面向对象的四大基本特性
6、面向对象的七大设计原则
7、&和&&的区别
8、|和||的区别
9、什么是值传递和引用传递
10、是否可以在static环境中访问非static变量
1、equals与==的区别,判断两个对象是否相同,能使用equlas比较吗?
==是判断两个变量或实例是不是指向同一个内存空间
equals是判断两个变量或实例所指向的内存空间的值是不是相同
不能。equlas大多用来做字符串比较,要判断基本数据类型或者对象类型,需要使用==
2.JDK、JRE、JVM关系是什么?
JDK(Java Development Kit)即为Java开发工具包,包含编写Java程序所必须的编译、运行等开发工具以及JRE。开发工具如:用于编译java程序的javac命令、用于启动JVM运行java程序的java命令、用于生成文档的javadoc命令以及用于打包的jar命令等等。
JRE(Java Runtime Environment)即为Java运行环境,提供了运行Java应用程序所必须的软件环境,包含有Java虚拟机(JVM)和丰富的系统类库。系统类库即为java提前封装好的功能类,只需拿来直接使用即可,可以大大的提高开发效率。
-
JVM(Java Virtual Machines)即为Java虚拟机,提供了字节码文件(.class)的运行环境支持,用硬件或软件手段实现的虚拟的计算机,Java虚拟机包括:寄存器,堆栈,处理器。
简单说,就是JDK包含JRE包含JVM。
3、Java支持的数据类型有哪些?什么是自动拆装箱?
-
基本数据类型:
整数值型:byte,short,int,long, (默认是都是0)
字符型:char (默认值是'')
浮点类型:float,double (默认是0.0)
布尔型:boolean (默认值是false)
(对象类型的默认值是null)
整数默认int型,小数默认是double型。Float和long类型的必须加后缀。
首先知道String是引用类型不是基本类型,引用类型声明的变量是指该变量在内存中实际存储的是一个引用地址,实体在堆中。引用类型包括类、接口、数组等。String类还是final修饰的。
拆箱:把包装类型转成基本数据类型
装箱:把基本数据类型转成包装类型包装类就属于引用类型,自动装箱和拆箱就是基本类型和引用类型之间的转换,至于为什么要转换,因为基本类型转换为引用类型后,就可以new对象,从而调用包装类中封装好的方法进行基本类型之间的转换或者toString(当然用类名直接调用也可以,便于一眼看出该方法是静态的),还有就是如果集合中想存放基本类型,泛型的限定类型只能是对应的包装类型。
4、面向对象是什么?
面向对象是一种思想,世间万物都可以看做一个对象,这里只讨论面向对象编程(OOP),Java是一个支持并发、基于类和面向对象的计算机编程语言,面向对象软件开发的优点:
代码开发模块化,更易维护和修改;
代码复用性强;
增强代码的可靠性和灵活性;
增加代码的可读性。
类和对象的关系:类是对象的抽象,对象是类的具体,类是对象的模板,对象是类的实例
5、面向对象的四大基本特性
抽象:提取现实世界中某事物的关键特性,为该事物构建模型的过程。对同一事物在不同的需求下,需要提取的特性可能不一样。得到的抽象模型中一般包含:属性(数据)和操作(行为)。这个抽象模型我们称之为类。对类进行实例化得到对象。
封装:封装可以使类具有独立性和隔离性;保证类的高内聚。只暴露给类外部或者子类必须的属性和操作。类封装的实现依赖类的修饰符(public、protected和private等)
继承:对现有类的一种复用机制。一个类如果继承现有的类,则这个类将拥有被继承类的所有非私有特性(属性和操作)。这里指的继承包含:类的继承和接口的实现。
多态:多态是在继承的基础上实现的。多态的三个要素:继承、重写和父类引用指向子类对象。父类引用指向不同的子类对象时,调用相同的方法,呈现出不同的行为;就是类多态特性。多态可以分成编译时多态和运行时多态。
6、面向对象的七大设计原则
抽象、封装、继承和多态是面向对象的基础。在面向对象四大基础特性之上,我们在做面向对象编程设计时还需要遵循有一些基本的设计原则。
SOLID原则(单一职责原则、开放关闭原则、里氏替换原则、接口隔离原则和依赖倒置原则)
迪米特法则
组合优于继承原则(合成复用原则)。
7、&和&&的区别
Java中&&和&都是表示与的逻辑运算符,都表示逻辑运输符and,当两边的表达式都为true的时候,整个运算结果才为true,否则为false。最终结果一样。
&无论左边是false还是true,右边都执行。
&&具有短路效果,左边是false,右边不执行。
&可以用作位运算符,当&两边的表达式不是Boolean类型的时候,&表示按位操作
&&效率更高,项目中推荐使用。
8、|和||的区别
最终的结果一样。
|无论左边是false还是true,右边都会执行。
||具有短路效果,左边是true,右边不执行。
||效果效率更高,项目中推荐使用。
9、什么是值传递和引用传递
值传递是对基本型变量而言的,传递的是该变量的一个副本,改变副本不影响原变量.
引用传递一般是对于对象型变量而言的,传递的是该对象地址的一个副本, 并不是原对象本身 。
一般认为,java内的传递都是值传递. java中实例对象的传递是引用传递。
10、是否可以在static环境中访问非static变量
static变量在Java中是属于类的,它在所有的实例中的值是一样的。当类被Java虚拟机载入的时候,会对static变量进行初始化。
如果你的代码尝试不用实例来访问非static的变量,编译器会报错,因为这些变量还没有被创建出来,还没有跟任何实例关联上。