java基基
1. java数据类型
- 基本数据类型(Primitive data type)
-
整型(四种)
- 字节大小分别为1字节、2字节、4字节、8字节
- 有四种表示形式:十进制、8进制(0开头)、2进制(0b开头)、16进制(0x开头)
- 默认为int,如果要表示long型,需要在后面加上l或者L
-
浮点型(两种)
- 字节大小分别为4字节、8字节
- 浮点型默认为double型,双精度,表示为float型需要加上f或者F后缀
- 有两种表示形式,十进制、科学计数法,这两种类型还是不适用于不产生精确计算,因为像0.1这样的小数无法精确表示。0.1f!=0.1。如果要精确计算,使用java math下的BigDecimal或者BigInteger。
-
字符型char
- char在内存中占2字节,用单引号'A'表示字符常量
- 可用于转义
- 可用十六进制表示,eg:'\u0061'
-
boolean型
- 两种值:true、false
- 在内存中使用1位,bit。不可以用1或者0来替代
-
- 引用数据类型(reference data type)
引用数据类型大小统一为4个字节,保存的是引用对象的地址。
2. java数组
3. java面向对象编程
-
名词
- java 面向对象特性:封装、继承、多态,封装了数据和功能。面向过程特性:封装,只封装了功能。
- 类:class,对具体事物的抽象,是同一类对象的模板;对象:Object,具体的事物。
- 类规则:一个.java文件中有且只有一个public class,可以有多个class,类名需要和文件名保持一致,类中有属性(不初始化就会使用默认值)、方法、构造器,可以用UML图表示类。
- 面向对象的内存分析:java虚拟机的内存可以分为三个区域:栈(Stack)、堆(heap)、方法区(method area)
-
Stack
- 栈描述的是方法执行的内存模型。每个方法被调用都会创建一个栈帧(存储局部变量、操作数、方法出口等)
- JVM为每个线程创建一个栈,用于存放该线程执行方法的信息(实际参数、局部变量等)
- 栈属于线程私有,不能实现线程间的共享!
- 栈的存储特性是“先进后出,后进先出”
- 栈是由系统自动分配,速度快!栈是一个连续的内存空间!
-
Heap
- 堆用于存储创建好的对象和数组(数组也是对象)
- JVM只有一个堆,被所有线程共享
- 堆是一个不连续的内存空间,分配灵活,速度慢!
-
method area
- JVM只有一个方法区,被所有线程共享!
- 方法区实际也是堆,只是用于存储类、常量相关的信息!
- 用来存放程序中永远不变或唯一的内容。(类信息【Class对象】、静态变量、字符串常量等)
-
构造器(constructor)
-
垃圾回收机制
原理:new创建对象,对象置为null释放对象。
过程:寻找无用对象,释放无用对象。
方法:
引用计数法:堆(Heap)中的每个对象有一个引用计数器,引用依次加1,引用值为null,减一,当为0时即为无用对象。缺点:循环引用的无用对象无法识别
引用可达法:
分代垃圾回收机制 -
内存泄漏
创建大量无用对象
静态集合类的使用:List、HashMap、vector
各种连接对象未关闭
监听器的使用 -
对象创建的实质过程
分配空间,将成员变量全部赋值为0或空
属性值的显示初始化
执行构造函数
返回对象的地址给相关变量
这就是可以使用this的原因,在执行构造函数前已经分配好了空间,this可以指代当前对象,也因此this不能用于静态。 -
static--静态初始化块
-
传值:值传递、引用传递,具体可以看
-
包:管理类(同名类), com.gao和com.gao.car,这两个包没有包含关系,是两个完全独立的包。只是逻辑上看起来后者是前者的一部分。
-
import语句,当导入同名类,需要在前面加上包名和类名。如果选择导入.*,会降低编译速度,不会降低运行速度。静态导入:导入指定类的静态属性