环境变量
安装 jdk-8u40-windows-x64
- 配置 环境变量->系统变量-> Path路径
- C:\Program Files\Java\jdk1.8.0_40\bin
- C:\Program Files\Java\jdk1.8.0_40\jre\bin
CMD命令输入 java、javac、java -version 查看是否成功
bin目录下
- java.exe:负责运行
- javac.exe:负责编译
- javadoc.exe:解析javadoc注释,生成帮助文档
- native2ascii.exe:可以将文字转为unicode编码
classpath(没用过)
.;otherpath
Hello W运行
HelloWorld.java文件
// 以下javadoc注释
/**
* javadoc注释
* javadoc注释
*/
// public 的 class只能有一个,类名跟文件名要一致
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello World!");
}
}
// 类中必须要有主方法
class A {
public static void main(String[] args) {
System.out.println("AAAA!");
}
}
- javac -encoding utf-8 .\HelloWorld.java (编译的是文件)
- 生成 HelloWorld.class 文件
- java HelloWorld(运行 HelloWorld 这个类名)
javac *.java(编译所有java文件)
dos命令:del *.class(删除所有class文件)
del *.jpg 等等
1 byte = 8 bit; 1 bit表示一个二进制位; 最大值:01111111
二进制:1010 = 十进制:1*2三次方 + 0*2平方 + 1*2一次方 + 0*2零次方
= 8 + 0 + 2 + 0 = 10
八进制以0开头:0272 = 十进制:2*8平方 + 7*8一次方 + 2*8零次方
= 128 + 56 + 2 = 186
十六进制以0x开头:0x10 = 十进制:16
* 标识符:类名、方法名、变量名、接口名、常量名......
* 关键字
* 字面值:整数型999、浮点型3.14159、字符型'A'、字符串型"AAAAA"、布尔型false
引用数据类型:new对象、String对象
基本数据类型:
* byte、short、int 字节:1、2、4 (1 byte = 8 bit)
* long 字节:8(long类型字面值加L表示,88888L)
* float单精度:4(float类型字面值加f表示)
* double双精度:8(默认类型)(浮点型都比整数型容量大)
* char 2
* boolean 1
* 自动类型转换:小转大;强制类型转换:大转小(float)5.1
* byte < short < int < long < float < double
* char <
* 整数字面值 小于 byte、short、char 时可以直接赋值,三个混合运算时会自动转换为 int 再做运算
* 多类型混合运算,会转换为容量最大的类型运算
* ++运算符:x ++(先赋值后++(先执行语句后自加))、++ x(先++后赋值(先自加后执行语句))
* &逻辑与:两边 true = true
* |逻辑或:一边 true = true
* !逻辑非:取反 !false = true 单目运算符
* ^逻辑异或:两边不一样 = true
* &&短路与:左边 false,右边直接不执行
* ||短路或:左边 true,右边直接不执行
* ?: 三目运算符:true 左,false 右
* +=运算符:int x = 20;long y = 10L; x += y;(相当于 x = (int)(x + y) 赋值运算符不改变运算结果类型)
* A:for(for循环起名为A) break A;(终止A的循环) continue A;(跳到A的循环)
* switch(int / String)
* return:终止函数执行
* 奇数:x % 2 == 1;
* 偶数:x % 2 == 0;
* 质数:能够被1和自身整除(自身 % 其它数 == 0 非质数)
* 转义字符:\n换行、\t制表符、\'单引号、\\反斜杠、\"双引号、\u6211我
变量
- 成员变量:类里面定义的,在构造方法执行时,没有赋值会自动赋默认值,包括以下
– 实例变量:没有static
– 静态变量:有static,具有共同特征的一般加上static,存放在方法区内存,减轻堆内存消耗 - 局部变量:类里面的方法定义的,不会自动赋值
- 变量作用域:类作用域、函数作用域(离开大括号就不认识了)
普通方法
- 有static:类名.方法名使用
- 无static实例方法:引用类型变量名.方法名使用
构造方法
- 要跟类名相同,并且没有void这些关键字,使用new User()创建,返回类型是 User本身
参数传递
- 基本类型变量:传递字面值
- 引用类型变量:传递的是堆内存地址
方法区内存、栈内存、堆内存
- 方法只定义,不调用,就不会分配内存空间
- 方法区内存 在类加载的时候 存放 class、方法的代码片段,存放静态变量
- 调用方法的时候会在栈中分配内存,在栈中进行压栈,方法执行结束后会释放内存,进行弹栈
- 最后调用的方法在栈顶,main在栈低
- 局部变量会在栈中分配内存
- new 的实例对象(实例变量)在堆内存中,二次new一个对象会将前一个垃圾回收,如果设为 null 会出现空指针错误
- 堆的对象给栈的变量一个地址,让栈的变量可以访问堆的对象
- 最先有数据:方法区内存;变化频繁:栈内存;垃圾回收针对:堆内存;
this
- this 在对象中,是一个引用,保存对象 堆内存地址,我指我自己
- 比如:局部变量 new 一个新对象的时候,this 就指向那个局部变量(也就是一个对象)
- this 不能用在static方法中
static静态代码块
- static { }:可以有多个,上往下执行,只执行一次
- 在类加载时执行,完成预备工作,完成数据的准备,初始化连接池,解析XML等等
代码块
- { }:不实用
- 在构造方法前执行
final修饰符,不可变的,常量
- 类不能被继承、方法不能被重写
- 变量不可二次赋值(实例变量必须手动赋值)
访问控制权限修饰符
- public:公开的,在任何位置都可以访问
- protect:同一个包可以访问,不同包中通过继承在子类中也可以访问
- 缺省:不写修饰符,同一个包可以访问
- private:私有的,在本类可以访问
- 类只能用public和缺省写法(内部类除外,类中类)
方法重载
- 发生在同一个类中
void rep(); void rep(int a);这是重载
int rep();这是重复方法了
修饰符 static 可不同,返回值类型 void 要相同,方法名 rep 要相同,参数 int a (数量、类型、顺序)要不同
方法重写(不用看)
- 发生在继承的类中,当父类的方法不满足时,在子类重写
- 返回值类型 void 要相同,方法名 rep 要相同,参数也要相同
- 修饰符访问权限:低private(父) <= 高public(子)
- 方法重写最好复制粘贴父类
方法递归调用:一定条件下,我用我自己,直到满足条件return,不然会内存溢出
类的继承 extends
- 私有的不继承,构造方法不继承,其他数据都可以继承
- 所有类默认继承 Object
- 在写方法时,跟父类方法重名,优先使用本类方法,本类没写的话可以使用父类方法
多态:父类型引用子类型对象(面向抽象编程)
向上转型:左边类型 父 Animal a = 右边类型 子 new Dog()
-- a变量只能使用Animal类型的方法,Dog里自己的方法a不能使用,如果Dog里有方法跟Animal发生重写,a会执行Dog的方法
向下转型:父类型转向子类型
判断 a instanceof Dog {Dog d = (Dog)a}()
包名
package com.dalao.me;
javac -encoding utf-8 -d ./ ./HelloWorld.java(-d 编译 HelloWorld 到 ./ 当前文件夹下创建 com.dalao.me 文件夹存放class文件)
java com.dalao.me.A
import com.dalao.me.*;(* 指类名)
导入 com.dalao.me 文件夹里面的 class 类,就可以直接 new class 对象
MyEclipse
- .metedata文件夹:保存工作状态,删除只是项目丢失,还在硬盘
- 切换java se / java ee :在右上角
- 窗口视图恢复:window > show view > Other > 搜索名字
重置窗口:window > reset perspective - Package Explore / Navigator / Project Explore:java源文件
- Console:控制台
- JRE:类库
- java右键:Run As > 执行java代码;Source > 自动get、set;