零、Java环境搭建
jdk安装、环境变量设置、cmd窗口操作、javac命令、java命令、main方法
一、Java基本语法
1、常量与变量(常量不可位于赋值运算符左侧)
2、标识符命名规则:由字母、数字、下划线、美元符$组成,不能以数字开头
类名、接口名:必须大写字母开头,通常由单词或缩写组成
方法名:必须小写字母开头,通常由单词或缩写组成
常量名:必须全部大写,单词之间以下划线分割
变量名:不能由数字开头
3、数据类型
基本数据类型——四类8种
boolean:布尔型,占1个字节
char:字符型,占2个字节,可作整型计算
byte:整型,占1个字节
short:短整型,占2个字节
int:整型,占4个字节
long:长整型,占8个字节
float:浮点型,占4个字节
double:双精度浮点型,占8个字节
其他数据类型——
String:字符串类型,大小不可变
Type[]:数组类型,大小不可变,通过下标访问
Type[][]:二维数组
3、运算符
(1)算术运算符
+、-、*、/、%、++、--
(2)赋值运算符
=、+=、-=、*=、/=、%=
(3)比较运算符
==、!=、>、<、>=、<=
(4)逻辑运算符
&(与)、|(或)、!(非)、^(异或)、&&(短路与)、||(短路或)
(5)三目运算符
条件表达式?表达式1:表达式2
4、流程控制:if-else、for循环、while循环、switch-case
public static void main(String[] args) {
int[] arr = {1,2,3,4,5};
for (int min = 0, max = arr.length - 1; min < max; min++, max--) {
int temp = arr[min];
arr[min] = arr[max];
arr[max] = temp;
}
}
5、方法的定义与使用
/**
* 打印n*n乘法表
*/
public void PrintTable(int n) {
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= i; j++) {
System.out.print(j + "*" + i + "=" + j * i + "\t");
}
System.out.println();
}
}
6、类的定义与使用
7、集合定义与使用
(1)ArrayList
(2)HashMap
二、关键技术点
动态代理:
JDK提供了Proxy类静态方法和InvocationHandler函数式接口来生成动态对象。
public static Object newProxyInstance(ClassLoader loader,Class<?>[] interfaces,InvocationHandler h)
第一个参数,类加载器
第二个参数,接口Class对象数组
第三个参数,InvocationHandler接口对象
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
/**
* 代理对象要实现的目标接口
* @author Administrator
*
*/
interface Human {
void speak();
void write();
}
/**
* 实现了目标接口的普通类
* @author Administrator
*
*/
class Chinese implements Human {
@Override
public void speak() {
System.out.println("说汉语。。。");
}
@Override
public void write() {
System.out.println("写中文。。。");
}
}
/**
* 程序主类
* @author Administrator
*
*/
public class Main {
/**
* 程序入口
* @param args
* @throws Exception
*/
public static void main(String[] args) throws Exception {
/*
* Proxy.newProxyInstance方法入参:
* 类加载器
* Class对象数组(代理对象要实现的接口Class对象)
* InvocationHandler接口对象
*/
Human proxy = (Human) Proxy.newProxyInstance(
// 类加载器,在同级目录下的类都可以
Main.class.getClassLoader(),
// 创建Class对象数组
new Class[] { Human.class },
// 创建InvocationHandler接口对象(此处用匿名内部类直接实现invoke方法)
new InvocationHandler() {
@Override
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
String methodName = method.getName();
if ("speak".equals(methodName)) {
System.out.println("说人类语言。。。");
}
if ("write".equals(methodName)) {
System.out.println("写人类文字。。。");
}
return null;
}
});
// 代理对象调用方法,执行时将被替换为invoke方法
proxy.speak();
// 代理对象调用方法,执行时将被替换为invoke方法
proxy.write();
}
}