JAVAJava特点、Java面试小问题、对象存储
JAVA特点
1. Java的特性
1.一种纯面向对象的编程语言
2.一种与平台无关(跨平台)的语言。(提供了在不同平台下运行的解释环境)
3.一种健壮的语言,吸收了 C/C++ 语言的优点
4.有较高的安全性。(自动回收垃圾,强制类型检查,取消指针)
2. Java技术的两种核心机制
(1) Java虚拟机(JVM)
Java文件通过编译器编写为Java字节码文件(.class文件),在类装载器中进行字节码的验证并加载Java类库,通过解释器组件实现Java字节码与计算机操作系统之间的通信。
JVM可以理解为一个可运行的JAVA字节码的虚拟计算机系统
- 它有一个解释器组件,可以实现Java字节码和计算机操作系统之间的通信
- 对于不同的运行平台,有不同的JVM
JVM屏蔽了底层运行平台的差别,实现了“一次编译,随处运行”
(2) 垃圾回收机制(GC)
- 在 C/C++ 等语言中,由程序员负责回收无用内存
- Java 语言消除了程序员回收无用内存空间的责任
- JVM 提供了一种系统线程跟踪存储空间的分配情况,在 JVM 空闲时,检查并释放那些可以释放的存储空间。
- 垃圾回收机制在 Java 程序运行过程中自动启用,程序员无法精确控制和干预
JAVA命名规范
- 命名不能以 _ 、 数字、$ 开始或结束
- 类名命名首字母大写
public class StudentInfomation; - 方法名、参数名、成员变量、局部变量使用首字母小写风格
int studentCount = 0;
JAVA每日一练
-
switch语句能否作用在byte上,能否作用在long上,能否作用在String上?
由于byte、short、char都可以隐含转换为int,所以这些类型以及这些类型的包装类型也是可以的。longl和String类型都不符合switch的语法规定,并且不能隐式转换成int类型,所以他们不能作用于switch语句中。但在JDK7的新特性中,switch语句可以用字符串。 -
a++和++a的区别,&和&&区别
a++先使用数据后自加,++a是先自加再使用数据。&逻辑不管前面条件是否正确,后面都执行,&&前面条件正确惨执行后面,若前面是false,后面的不执行,比&效率高。 -
equals与==区别
==和equals比较的是基本数据类型和引用数据类型中的地址是否相同
String类重写equals方法后变成比较两个对象的值 -
Overload 和 Override的区别,Overloaded方法是否可以改变返回值的类型?
Overload 是重载,被重载的方法必须改变参数列表(参数个数或类型不同);方法能够在同一个类中或子类中被重载,允许存在同名函数,但是他们的参数数量或参数类型不同,可以改变返回值的类型,但无法以返回值类型作为重载函数的区分标准,多数用于构造函数的重载;被重载的方法可以改变访问修饰符,也可以声明新的或更广的检查异常。
Override 重写,作用在子类继承父类,子类重写父类中的方法,参数必须完全相同;返回值类型可以不同,但必须是父类返回值类型的派生类;子类重写的方法权限修饰符不能小于父类(如果父类中的一个方法声明为public,那么子类中重写的方法不能为protected);子类中的重写方法不能抛出比父方法更多的异常;r如果子类和父类在一个包中,方法被定义为private\final时则不能被重写;如果子类和父类不在一个包中,子类只能重写声明为public和protected的非final方法;构造函数不能重写。 -
解释说明java的三大特性
封装、继承、多态
封装:将实现细节和对象属性封装起来,对外不可见,仅对外公开访问方法
继承:子类可继承父类功能并继续发展
多态:方法的重载就是多态的表现 -
抽象类与接口的区别
共同点:1.两者均不能被实例化
2.两者的抽象方法中没有具体的实现
不同点:1.抽象类要被子类继承,接口要被类实现
2.抽象类可以声明抽象和非抽象方法,接口只能声明抽象方法
3.抽象类声明变量是普通变量,接口定义变量是公开静态常量(public static final)
4.接口不能有构造函数,抽象类可以有自己的构造函数 -
作用域 public,private,protected,以及不写时的区别?
当被public修饰时,成员变量或方法可以在本类、包中、其他包中被访问
当被修饰为protected,成员变量或方法可以在本类、子类、同一个包中进行访问
当被修饰为private时,成员变量或方法只能在本类中被访问,对外不可见
当不写(default)时,成员变量或方法只能在本类和本包中访问
创建对象内存分析
1. 栈
Java栈的区域很小,大概2m左右,特点是存取速度特别快
栈存储特点:先进后出
存储速度快的原因:
- 栈内存通过栈指针来创建空间与释放空间
- 指针向下移动,会创建新的内存,向上移动会释放这些内存(自动释放)
- 这种方式的速度特别快,仅次与PC寄存器,但必须明确移动的大小和范围,这是为了方便指针的移动。
缺点:存储数据大小是固定的,影响程序的灵活性,所以更大部分的数据存储到了堆内存中。
2.堆
堆中存放的是类的对象属性及赋值
Java通过 new 关键字创建对象时,是在告诉JVM,需要去开辟一块新的堆内存空间
堆内存优点:不必关注堆内存中需要开辟多少存储空间,也不需要关注内存占用时长
堆内存中内存的释放是由**GC(垃圾回收器)**完成的
GC回收堆内存的规则:
- 当栈内存中不存在此对象的引用时,则视其为垃圾,等待垃圾回收器回收
权限修饰符
修饰符 | 类 | 包 | 子类 | 其他包 |
---|---|---|---|---|
public | √ | √ | √ | √ |
protected | √ | √ | √ | × |
default | √ | √ | × | × |
private | √ | × | × | × |