变量类型
参考下图总结,Java是强类型语言,静态类型。
静态类型语言:变量定义时有类型声明的语言。
-
变量的类型在编译的时候确定
-
变量的类型在运行时不能修改
这样编译器就可以确定运行时需要的内存总量。
动态类型语言:变量定义时无类型声明的语言。
-
变量的类型在运行的时候确定
-
变量的类型在运行可以修改
基本类型和封装类型
下图为Java的基本类型和对应的封装类,封装类提供了对各个类型间进行转换和运算操作的方法。
其中,常用的String也是封装类,且一旦定义之后不支持改变。StringBuffer和StringBuilder是String的操作类,支持在同一个对象中改变其值,其中
- StringBuffer是线程安全的,效率较低
- StringBuilder是线程不安全的,但效率高。
String a = "a";//创建了一个对象,变量a指向了对象"a"
a = a+"b";//重新创建了一个对象,变量指向了对象"ab"
String str = "a"+"b"+"c";//只创建了一个对象
StirngBuffer sb = new StringBuffer("a");
sb.append("b");//调用方法进行字符串拼接,此过程未创建第二个对象
值传递与引用传递
基本数据类型传值,对形参的修改不会影响实参
- 基本数据类型在声明时系统就给它分配空间
int a;
a=10;//正确,因为声明a时就分配了空间
引用类型传引用,形参和实参指向同一个内存地址(同一个对象),所以对参数的修改会影响到实际的对象
- 引用则不同,它声明时只给变量分配了引用空间,而不分配数据空间
Date date;
//执行实例化,开辟数据空间存放Date对象,然后把空间的首地址传给today变量
//date=new Date();
//如果注释掉上一步操作
//The local variable date may not have been initialized
//也就是说对象的数据空间没有分配
date.getDate();
值传递:
方法调用时,实际参数把它的值传递给对应的形式参数,函数接收的是原始值的一个copy,此时内存中存在两个相等的基本类型,即实际参数和形式参数,后面方法中的操作都是对形参这个值的修改,不影响实际参数的值。
引用传递:
也称为传地址。方法调用时,实际参数的引用(地址,而不是参数的值)被传递给方法中相对应的形式参数,函数接收的是原始值的内存地址
util包工具类
Collection下的子接口有List、Set
-
List:有序可重复的序列,下面的常用子类:ArrayList、LinkedList、Vector
-
ArrayList:本质为Object[]
-
LinkedList:链式结构,首尾相连,插入和删除快速
-
Vector:与ArrayList相同,但是是线程安全的
-
-
Set:无序不重复,下面的常用子类有:
- HashSet、TreeSet- TreeSet可通过Comparable接口来指定排序规则(按什么进行排序)
-
Map:key-value(键值对的形式),无序不重复的,因为其key是HashSet;缓存可以使用Map,如Redis就像一个大型的Map,缓存数据可以存在里面。下面的子类:HashMap、HashTable(线程安全)、TreeMap
- Collections:集合的操作类,其方法可对集合进进排序、反转等
-
其他的工具类:Date(时间)、DateFormat、SimpleDateFormat(时间格式化类)、Properties(用于配置文件读取)、Calendar(日历)、UUID(生产不重复序列)等
面向对象
-
封装:将数据以对象属性的形式封装到一个对象中,比如数据库的一个表的所有字段都可以用java的对象进行封装
-
继承:子类可以父类所有方法和属性,包括private的,但不能继承被final修饰的方法;被private修饰的方法不能被访问而已
-
多态:父类的引用指向子类的实例,编译时当成父类对象,但实际运行时则为实际具体对象
-
抽象:任何事物都可以被抽象为一个类,类具有公共的属性和方法
关于子类能继承父类private的属性的解释:父类属性一般都是private的,但是可以通过getter、setter方法进行访问,子类对象也可以通过getter、setter方法访问父类的属性,所以是继承了父类的private的属性
Java不允许多继承,需通过接口实现“多继承”
public interface 接口名 {}
public class 类名 implements 接口名 {}
接口与抽象类的区别:
- 接口不能实现任何方法,而抽象类可以
- 类可以实现许多接口,但只有继承一个父类
- 接口不是类分级结构的一部分,没有联系的类可以实现相同的接口