基础概念与常识
#Java 语言有哪些特点?
- 简单易学
- 面向对象(封装,继承,多态)
- 平台无关性
- 支持多线程(C++语言没有内置的多线程,一般都是调用操作系统的多线程)
- 可靠性,安全性
- 支持网络编程 (TODO:后期需要具体复习)
- 编译与解释共存
编译与解释并存
什么是编译型语言和解释型语言
计算机是不能理解高级语言的,更加不能执行高级语言,他只能理解机器语言,所有的任何使用高级语言编写的程序想被计算机运行必须先转化成计算机语言,这种转换方式有两种:
1,编译 程序编译好之后就可以在这个平台运行,例如C、C++、Objective
2,解释 运行期间才进行编译 ,例如Python
这是因为 Java 语言既具有编译型语言的特征,也具有解释型语言的特征。因为 Java 程序要经过先编译,后解释两个步骤,由 Java 编写的程序需要先经过编译步骤,生成字节码(.class
文件),这种字节码必须由 Java 解释器来解释执行。
#JDK 和 JRE
JDK是JAVA Development Kit的缩写,是功能齐全的SDK,它拥有 JRE 所拥有的一切,还有编译器(javac)和工具(如 javadoc 和 jdb)。它能够创建和编译程序。
JRE 是 Java 运行时环境。它是运行已编译 Java 程序所需的所有内容的集合,包括 Java 虚拟机(JVM),Java 类库,java 命令和其他的一些基础构件。但是,它不能用于创建新程序。
Java 程序从源代码到运行的过程如下图所示:
当 JIT 编译器完成第一次编译后,其会将字节码对应的机器码保存perm gen,下次可以直接使用
Java 和 C++ 的区别?
java和c++都是面向对象的语言,都支持封装继承,多态,不同的地方
- java不提供指针来访问内存
- java类是单继承(接口可以多继承)的,c++支持多继承
- Java 有自动内存管理垃圾回收机制(GC),不需要程序员手动释放无用内存。C ++同时支持方法重载和操作符重载,但是 Java 只支持方法重载(操作符重载增加了复杂性,这与 Java 最初的设计思想不符)
- C ++同时支持方法重载和操作符重载,但是 Java 只支持方法重载(操作符重载增加了复杂性,这与 Java 最初的设计思想不符)
基本语法
#字符型常量和字符串常量的区别
- 形式 : 字符常量是单引号引起的一个字符,字符串常量是双引号引起的 0个或若干个字符。
- 含义 : 字符常量相当于一个整型值( ASCII 值),可以参加表达式运算; 字符串常量代表一个地址值(该字符串在内存中存放位置)。
- 占内存大小 : 字符常量只占 2 个字节; 字符串常量占若干个字节。
自增自减运算符
(++)(--)++ 和 -- 运算符可以放在变量之前,也可以放在变量之后,当运算符放在变量之前时(前缀),先自增/减,再赋值;当运算符放在变量之后时(后缀),先赋值,再自增/减。
符号在前就先加/减,符号在后就后加/减
public class TestMain {
public static void main(String[] args) {
int i = 0;
System.out.println(++i);
}
} // ->1
复制代码
public class TestMain {
public static void main(String[] args) {
int i = 0;
System.out.println(++i);
}
} // ->0
复制代码
静态方法为什么不能调用非静态成员?
- 静态方法是属于类的,在类加载的时候就会分配内存,可以通过类名直接访问。而非静态成员属于实例对象,只有在对象实例化之后才存在,需要通过类的实例对象去访问。
- 在类的非静态成员不存在的时候静态成员就已经存在了,此时调用在内存中还不存在的非静态成员,属于非法操作
重载和重写的区别
重载发生在同一个类中,方法名必须相同,参数类型,个数,顺序方法返回值和修饰符可以不同
重写发生在运行期,是子类对父类的允许访问的方法的实现过程进行重新编写
- 方法名、参数列表必须相同,子类方法返回值类型应比父类方法返回值类型更小或相等,抛出的异常范围小于等于父类,访问修饰符范围大于等于父类。
- 如果父类方法访问修饰符为
private/final/static
则子类就不能重写该方法,但是被static
修饰的方法能够被再次声明。 - 构造方法无法被重写
区别点 | 重载方法 | 重写方法 |
---|---|---|
发生范围 | 同一个类 | 子类 |
参数列表 | 必须修改 | 一定不能修改 |
返回类型 | 可修改 | 子类方法返回值类型应比父类方法返回值类型更小或相等 |
异常 | 可修改 | 子类方法声明抛出的异常类应比父类方法声明抛出的异常类更小或相等; |
访问修饰符 | 可修改 | 一定不能做更严格的限制(可以降低限制) |
发生阶段 | 编译期 | 运行期 |
hashCode() 与 equals()
Java 中的几种基本数据类型
java中存在八种数据类型,分别为:
-
6 种数字类型:
- 4 种整数型:
byte
、short
、int
、long
- 2 种浮点型:
float
、double
- 4 种整数型:
-
1 种字符类型:
char
-
1 种布尔型:
boolean
。
基本数据类型直接存放在虚拟机栈的局部变量表中,而包装类型属于对象类型,对象实例一般存在在堆中,局部变量表主要存放了编译期可知的基本数据类型 (boolean、byte、char、short、int、float、long、double) 、对象引用(reference 类型,它不同于对象本身,可能是一个指向对象起始地址的引用指针,也可能是指向一个代表对象的句柄或其他与此对象相关的位置)