1.Java环境变量配置
系统变量JAVA_HOME:直接复制jdk目录,不要在末尾加逗号或分号
系统变量Path:执行dos命令,系统会在path指定的路径中寻找该命令对应的可执行文件
classpath:jdk5.0以后可以不配置
修改环境变量,重启cmd窗口
2.第一个Java程序
在目录下新建.java文件
cmd窗口更改目录
java 类名执行,结果是: Could not find or load main class 类名
解决办法 使用命令: java -cp . 类名
java -cp E:\MyJavaCode 类名
java -classpath . 类名
Java命令运行有包名的类名:
编译:javac -d . 类名.java
运行:java 包名.类名 args 空格分隔
反编译:javap 类名.class
自定义classpath,把引用的jar引进来,这样关联的类就不会缺失了:
javac -encoding UTF-8 -classpath E:\kuaipan\study\jar\lucene.jar GraphDatabaseReader.java
3.第一个Java程序深入学习
(1)Java大小写敏感
(2)一个.java文件可以有多个类,但文件名必须与public修饰的类名相同
(3)一个java文件不能有多个public修饰的类
(4)多行注释不能嵌套
4.标识符
(1)标识符以字母、下划线或美元符号$开头
(2)标识符的其他部分可以是字母、下划线或美元符号$和数字的任意组合(只能为这四种,不能有其他符号)
(3)大小写敏感,长度无限制
(4)不能为java的关键字
(5)java内部采用Unicode字符集
5.字符集
(1)ISO8859-1
西欧字符集
(2)BIG5
台湾大五码,表示繁体中文
(3)GB2312
大陆使用最早、最广的简体中文字符集
(4)GBK
GB2312的扩展,可以表示繁体中文
(5)GB18030
最新GBK的扩展,可以表示汉字、维吾尔文、藏文等中华民族字符
(6)Unicode
国际通用字符集
6.java基本数据类型
(1)基本数据类型8种:
6.1数值型:6.1.1:整数类型byte(1字节:-128~127) ,short(2字节:-2^15~2^15-1),int(4字节:-2^31~2^31-1, 数值型默认是int类型),long(8字节:-2^63~2^63-1);
6.2.2:浮点类型float(4字节),double(8字节,浮点型默认是double类型)。6.2字符型:char(2字节) 6.3布尔型:boolean(1位)
(2)引用数据类型(4字节):类(class),接口(interface),数组
(3)进制
默认十进制
八进制 int a = 010;
十六进制 int a = 0x10;
java语言的整型常数默认为int型,声明long型常量可以在后面加L
long a1 = 123;//不出错,int的表示范围内
long a2 = 123456234789L;//不加L会出错,已经超出int的表示范围
(4)浮点数
默认double(8字节) 在成员变量里默认是0.0
float(4字节)
float f = 6.28;//编译报错,损失精度
float f = 6.28F;//编译通过
浮点数存在舍入误差,如果需要进行不产生舍入误差的精确数字计算,需要使用BigDecimal类
(5)字符型
5.1 char类型表示在Unicode编码表中的字符
5.2 java中使用转义字符'\',来将其后的字符转变为其他的含义
5.3 字符可以直接当作数字来用
5.4 整数转成字符需要强制转型
(6)布尔型
只占一位
7.基本数据类型转换
基本原则:容量小的数据类型可以转换为容量大的数据类型,容量指的是表述的范围
可以自动转换:byte->short ,short->int ,char->int, int->long, int->double,float->double
转换会损失精度:int->float, long->float, long->double
int可以直接赋值给short,char,byte,但是要在它们能表示的范围内
类型提升问题:做所有二元运算(+-*/%)都会有类型提升问题,结果会自动转为容量大的类型,就需要强制类型转化
jdk1.7新特性:下划线分隔
8.变量
变量是内存中最基本的存储单元
8.1 本地变量,局部变量 写在一个方法内.使用前必须声明和赋值
8.2 常量 只能被赋值一次 一般命名时全部大写
命名规范:
变量、方法名:首字母小写,驼峰原则
常量:全大写
类名:首字母大写,驼峰原则
9.运算符
位运算符
~--取反 &--与 |--或 ^--异或
"+"两边的操作数只要有一个是字符串类型,系统会自动将另一个操作数转换为字符串然后进行连接
10.控制语句
if语句不加括号,只对接下来的第一条语句有效
switch语句每case语句后都要加一个break,防止发生case穿透
JDK7.0新特性switch表达式可以是字符串
带标签的循环,类似goto语句:
示例:
outer:for (int i = 101; i < 150; i++) {
for (int j = 2; j < i/2; j++) {
if (i % j == 0) {
continue outer;
}
}
System.out.print(i+" ");
}
11.方法
形式参数:在方法调用时用于接收外界输入的数据
实参:调用方法时世界传给方法的数据
return作用:(1) 返回值 (2)结束方法运行
java中只有值传递
12.递归
方法无限调用自己,会引起栈溢出异常
13.包(package)
解决类重名问题,方便管理类,合适的类位于合适的包
包名:域名的倒着写,别人很容易知道这些包来自哪个公司
注意: com.lcw与com.lcw.action是两个独立的包,没有包含关系,只是逻辑上看起来后者是前者的一部分
14.面向对象
以类的方式组织代码,以对象的方式组织(封装)数据
属性的默认值:数值型的默认是0,char:\u0000, boolean: false,所有引用类型:null
方法里定义的变量:需要手动初始化
15.内存分析
栈:存放局部变量 (自动分配连续的空间,先进后出)
堆:存放new出来的对象(不是连续的存储空间)
方法区:也是堆,存放类的代码(字节码)信息,static常量、常量池
要点:1.new出的对象引用放在栈区,具体代码放在堆区,每执行一个方法设置一个栈帧,数值型常量可以直接赋值。引用型常量需要从方法区取值。
16.构造器
16.1 通过new关键字调用
16.2 构造器虽没有返回值,但不能定义返回类型(返回的类型肯定是本类),不能在构造器里调用return
16.3 如果没有定义构造器,编译器会自动添加一个无参的构造函数
17.方法重载
两同三不同
- 同一个类,同一个方法名
- 参数类型不同, 参数个数不同, 参数顺序不同
只有返回值不同不构成方法的重载,并不是说方法的重载返回类型一定要相同
形参名不一样也不构成方法的重载
18.static关键字
类中,用static声明的成员变量为静态变量,或叫做类属性,类变量
18.1 静态变量为类的公用变量,属于类,被该类的所有实例共享,在类呗载入内存时被显示初始化。静态方法中不可访问非静态成员
19.this关键字
普通方法中,this总是指向调用该方法的对象 当前对象的引用(地址)
构造方法中,this总是指向正在初始化的对象
this();放在构造函数的第一句用于调用其它构造函数,也可以是带参的构造函数
this不能用于static方法
20.Object类
所有的类默认继承Object类
21.Super关键字
super是直接父类对象的引用。可以通过super来访问父类中被子类覆盖的方法和属性
每个类的构造函数的第一行默认都是super();
每个类的方法中都有(this, super)
main在逻辑上是与类独立的
22.继承VS组合
"is-a"继承 "has-a"组合,从代码复用角度分析基本是相同的,is-a "是" has-a 组合
23.final关键字
final修饰变量,是一个常量,不能被重新赋值。final修饰方法,不能被重写,但可以被重载,final修饰类,不能被继承
24.封装 private default protected public
private:本类 default:本类 本包 protected:本类 本包 子类 public:本类 本包 子类 所有类,类的属性一般使用private ,get/set方法一般为public,boolean的get方法是:is开头
private boolean can;
public boolean isCan(){
return can;
}
public boolean setCan(){
this.can = can;
}
25.多态 polymorphism
主要用于实现动态联编,意思就是程序的最终状态只有在执行过程中才被决定而不是在编译期间就决定了。能提高系统的灵活性和扩展性
Java中多态的实现:
(1) 编译时类型:模糊一点,一般是一个父类,由声明时类型决定
(2) 运行时类型:由实际对应的对象类型决定
多态存在条件:要有继承,要有方法重写,父类引用指向子类对象
26.抽象类
1.有抽象方法的类只能定义为抽象类
2.抽象类不能实例化
3.抽象类也可以包含属性、方法、构造方法
4.抽象方法必须被子类实现
5.抽象类把类的设计和实现分开了
27.内部类
1.成员内部类(可以使用private、protected、public任意进行修饰。类文件:外部类$内部类.class)
非静态内部类必须寄存在一个外部类对象里
静态内部类对象存在,并不一定存在对应的外部类对象
28.数组
1.数组是相同数据类型的有序集合
2.数组也是对象,数组元素相当于对象的成员变量
3.数组长度是固定的
数组的三种声明方式:
1.Object[] os = new Object[SIZE];
2.Object[] os = new Object[]{obj1,obj2,obj3};
3.Object[] os = {obj1,obj2,obj3};
29.String
String不可变字符序列
1.trim只去除首尾的空格
2.public final char value[];
value数组中的值是可以变的
public set charValue(char c , int index){
value[index] = c;
}
3.通过return this实现方法链
30.多维数组
1.二维数组可以看成以数组为元素的数组
31.File类
文件和目录的抽象表示形式
mkdir(); mkdirs(); mkdir 创建目录的上级目录必须存在 mkdirs 创建目录的上级目录不一定需要存在
32.Exception异常机制
Java提供的处理程序中错误的一种机制
抛出异常:在执行一个方法时,如果发生异常,这个方法会生成代表该异常的一个对象,停止当前执行路径,并把异常对象提交给JRE
捕获异常:JRE得到异常后,寻找相应的代码来处理该异常。JRE在方法的调用栈中查找,从生成异常的方法开始回溯,直到找到相应的异常处理代码为止
注意:在代码中没有错误,说明编译通过,当然不能保证运行时没有错误
如果try catch块中有return语句
执行顺序:
1.执行try , catch ,给返回值赋值
2.执行finally
3.return语句 这个语句是程序中最后执行的!!!
public void openFile() throws FileNotFoundException{} throws抛出异常,在其他地方调用这个方法,要处理这个异常,可以用try catch块也可以throws抛出给JRE处理,但是建议用try catch块处理! 在实际编程中使用try catch还是使用throws根据具体情况选择