Java跨平台的主要原因
Java源程序经过编译器编译后变成字节码,字节码由虚拟机解释执行,虚拟机将每一条要执行的字节码送给解释器,解释器将其翻译成特定机器上的机器码,然后在特定的机器上运行。
Java注释
文档注释
/**
* 相关的注释内容,甚至可以使用 HTML 标签
*
*/
标识符的命名规范
* 只能包含数字、字母(大小写,Unicode字符)、下划线 _、美元符$
* 不能以数字开头
基本数据类型
- 整数型:byte(-128-127)、short(15次方)、int(31次方)、long(63次方)
- 浮点型:float(38次方)、double(308次方)
- char
- boolean:表示逻辑中的真和假,值只有 true / false。
变量
数据类型 变量名 = 值;
变量的生命周期在 {} 定义的范围内。
运算符
三目运算符
int age = 16;
String ageStr = age > 18 ? "成年" : "未成年";
System.out.println(ageStr); // 未成年
流程控制
- 顺序结构
- 判断(分支选择)结构
- 循环结构
数组结构
定义语法
type[] 变量名; // 强烈建议用这种命名
type 变量名[]; // 只要知道就可以
数组的初始化
静态初始化
int[] arrs2;
arrs2 = new int[]{1, 2 ,3 ,4};
int[] arrs = {1, 2, 3, 4}; // 简写
动态初始化
type[] arrayName = new type[length];
类的定义
[修饰符] class 类名 {
// 成员变量
[修饰符] 数据类型 成员变量1;
[修饰符] 数据类型 成员变量2;
...
// 方法
[修饰符] 返回值 方法名1([参数列表]) {
方法体语句;
}
[修饰符] 返回值 方法名2([参数列表]) {
方法体语句;
}
...
// 构造器:创建对象用的方法
[修饰符] 类名([参数列表1]) {
方法语句;
}
[修饰符] 类名([参数列表2]) {
方法语句;
}
}
类的三大部件:成员变量、方法、构造器。
封装
把成员变量隐藏起来,暴露方法来提供成员的修改和访问
Getter 和 Setter
把属性定义为 private 类型,即私有,向外部暴露其 get 和 set 方法。
构造器重载
如果需要在构造器中调用另外一个构造器,可以使用 this(params);
类的继承
继承是面向对象的三大特性之一,也是实现软件复用的重要手段。
[修饰符] class SubClass extends SuperClass {
// 类定义部分
}
super限定
如果需要在子类中调用父类被覆盖的方法,可以使用super关键字。
调用父类的构造器
在子类的构造器中,无论如何在第一行语句中都会调用一次父类的构造器。
如果没有显式的调用,那么会调用父类的没有参数的构造器,如果父类没有定义空参数的构造器,则此时会无法编译。
instanceof运算符
instance运算符的前一个操作数一般是引用数据类型变量,后一个操作数是类名(接口),它是用于判断前面的对象是否是后面的类、或者其子类。如果是的话,返回true。
public class Client1 {
public static void main(String[] args) {
Animal tom = new Dog();
Animal mimi = new Cat();
Animal ani1 = new Animal();
if (ani1 instanceof Dog) { // 此处ani1的数据类型为 Animal 所以运算的结果为 false
Dog dog1 = (Dog) ani1;
System.out.println(dog1.getAge());
}
if (tom instanceof Dog) { // 此处tom运行时数据类型为 Dog 所以运算的结果为 true,可以进行转换
Dog dog2 = (Dog) tom; // 强制类型转换
dog2.setAge(20);
System.out.println(dog2.getAge());
}
tom.cry();
mimi.cry();
}
}
包装类
从引用数据类型转成基本数据类型,使用 对象.xxxxValue();
int y = 10;
Integer yi = new Integer(y);
Integer yi2 = y;
int y3 = yi.intValue();
boolean b = false;
Boolean bi = new Boolean(b);
Boolean bi2 = b;
boolean bi3 = bi2.booleanValue();
final 修饰符
- 如果修饰类:则该类不会被继承(一般在开发中很少使用);
- 如果修饰成员变量:一旦给成员变量赋值后就不允许修改其值,一般用在对常量的定义中。
- 如果修饰方法:
public class Client1 {
public static final String SCHOOL_NAME = "南通青鸟IT教育";
public static void main(String[] args) {
int r = 20;
System.out.println(Math.PI * 2 * r);
// Client1.SCHOOL_NAME = "青鸟IT教育"; // 错误代码,不能被修改
}
}
方法的重载和重写
方法签名:只包含了方法名和参数列表
重写:发生在父类和子类之间,方法签名必须是一样的
重载:发生在本类中,方法名一样,但是参数列表不一样,重载可以是构造器的重载,也可以是方法的重载。
抽象方法和抽象类
抽象方法和抽象类都是使用 abstract 修饰的
最彻底的抽象类:接口
接口定义使用 interface 定义
- 接口定义使用 interface 定义
- 接口的命名规范同类的命名规范;
- 在接口中,成员变量必须是静态的常量,方法必须是抽象方法,所以可以省略相关的修饰符。
接口的继承
接口的继承和类的继承不一样,接口支撑多继承
接口的使用
一个类是可以实现多个接口的,使用 implements 关键字,多个接口之间用逗号隔开。
集合框架
Collection 和 Map 两大接口。
在 Collection 中又分为 List (有序集合) 和 Set (无序集合)。List 和 Set 都是接口。
Map 存储的 Key-Value 结构。
List
插入元素:add()
遍历元素
- 通过元素索引下标方式 for 循环
- 通过 foreach 循环
- 通过迭代器 Iterator
Map
获取某个 key 的 value
Value get(Key)
如何遍历 Map 结构
- 获取 key 集合:map.keySet();
- 遍历 Key 集合:iterator;
- 获取 Value 值:get(key);
使用 Collections.sort(list) 进行排序
集合中的元素类要实现 Comparable 接口,重写 compareTo 方法;
调用 Collections.sort(list) 完成排序
常用类
Object
toString() :直接打印对象调用该方法,一般在类中重写(override)。
默认的 toString() 是打印类全名+hashcode
hashCode():返回该对象的哈希码值,内存地址。
String
charAt
replace
split
indexOf
substring
contains
日期 java.util.Date 和 Calendar
Date 和 SimpleDateFormat 的运用
Calendar 是更加先进的日期处理类
单例模式
所谓的单例模式,就是类只有一个对象,外部要使用该类的对象,通过调用一个类方法实现。
/**
* 饱汉式单例模式
* @author lzq31
*
*/
public class Service2 {
private static Service2 service = new Service2();
private Service2() {
}
public static Service2 getInstance() {
return service;
}
}
/**
* 饿汉式单例模式
* @author lzq31
*
*/
public class Service {
private static Service service;
private Service() {
}
public static Service getInstance() {
if (null == service) {
service = new Service();
}
return service;
}
}
JDBC
1. 选择数据库:加载数据库驱动
2. 连接数据库
3. 创建数据库查询
4. 获取查询结果
5. 关闭查询和连接