先把以前的笔记整理后发上来,剩下的尽快补齐。
1 java优势:跨平台性
虚拟机:java运行时系统,就是一个字节码解释器,虚拟机将字节码解释成机器码给cpu执行.
在java中我们用虚拟机来屏蔽底层操作系统的差异.
编译:生成可执行文件像a.out,a.exe 效率高,但不跨平台
解释:解释器把源文件逐行解释,跨平台但效率不高
在java中:先编译后解释
把.java文件编译成.class字节码文件.(平台中立的) 比重新解释快一点.
由虚拟机解释执行.class字节码文件
jre=虚拟机+编译器
jdk=虚拟机+编译器+类库 //jdk又称java开发工具包
2 第一个程序:
public class Test{
public static void main(String [] args){
System.out.println(“hello world”);
}
}
任何代码都要封装在类里.
一个文件里只能有一个公开类,文件名要和公开类类名一致.如上例文件只能叫Test.java
一个源文件里可以有多个类,一个类生成一个.class文件,.class文件和类对应.
编译:javac + 文件名
运行:java + 类名
print 打印一行
println:打印一行换行
3 环境变量:
JAVA_HOME:/opt/1.5.06 指向jdk安装目录. 给别的软件用的.
PATH:$JAVA_HOME/bin 一些jdk命令放在bin目录下比如java javac命令
CLASS_PATH:. 类路径,告诉虚拟机去哪找类, 点表示当前路径
4 包:把不同的源文件放在不同目录下.
关键字:package //一个源文件只能有一个package语句.
加了包结构的类编译时javac –d . Test.java会自动生成目录结构,点表当前目录,前后都有空格.
运行时要写全限定名: 包名.类名 java p1.HelloWorld
运行时要在包的上一级目录
5 import:是一个声明 后面遇到类名可以不写包名.
import p6.p7.*;表示以后用p6包下的p7子包下的所有类不用在写包结构了.
import只能表示类,不能表示子包
java.lang.* 这个包下的类是默认引入的.
一个类里可以有0个或多个import,跟c++里的include不一样
6 注释
//单行注释 到本行结束的所有字符会被编译器忽略.
/* */ 多行注释 在/* */之间的所有字符会被编译器忽略.
/** */ 文档注释 java特有的, 在/** */之间的所有字符会被编译器忽略.
javadoc 工具,把java源程序中这种注释抽取出来形成html页面.
javadoc –d doc Tarena.java
7 标识符命名规则:包括包名,类名,属性名,方法名等等
(1) 由字母,数字,下划线,$组成,不能以数字开头.
(2) 大小写敏感.
(3) 不得使用java中的关键字和保留字.
关键字:都是小写的 jdk1.4多了 assert关键字 jdk1.5多了enum 关键字
保留字:goto 和const
字面值:true 和false 是boolean类型字面值
习惯:
(1) 标识符要符合语义信息.
(2) 包名所有字母小写
(3) 类名每个单词首字母大写,其它小写 //TarenaStudent
(4) 变量和方法: 第一个单词小写,从第二个单词开始首字母大写 //tarenaStudent
(5) 常量: 所有字母大写
8 局部变量:定义在方法里的变量.
(1)必须要先赋值,后使用.用之前要初始化,否则通不过编译.
(2)作用范围:定义开始到定义它的代码块结束.
(3)重合范围内,不允许2个局部变量命名冲突.
9 java中的数据类型:基本数据类型和对象类型
基本类型:8种 与整型有关的前4种
(1) byte 1B -128-127
(2) short 2B -32768-32767
(3) int 4B -2147483648-2147483647
(4) long 8B 加后缀L 赋给long类型变量
(5) float 4B 加后缀f
(6) double 8B 加后缀d 或不跟
(7) boolean 1B 字面值 true 和false //整数和boolean值不能相互转换了.
(8) char 2B 采用unicode编码方式.全球统一的字符集. // char c='达'; 可以保存汉字
任何国家编码方式都兼容ASCII编码, 编码方式和解码方式不同才会出现乱码.
char类型的三种字面值.
char c='a';
char c= 97;
char c='\u0061'; //unicode 码值是用16进制表示的,一个字节可以用2个16进制表示
byte a=1;
byte b=2;
byte c=a+b; //编译出错自动类型提升成int
自动类型提升,把高字节转成低字节,需要作强制类型转换. byte c=(byte)a+b;
类型自动提升规则:
a和b作某种运算
a和b中有double,结果就是double
a和b中有float,结果就是float
a和b中有long,结果就是long
除此之外,结果都是int
对象类型: String
java中一个字符串是一个对象.这个对象有字面值,java中内置重载了+号,表示字符串的连接
String s=”abcd” //双引号引起来
"1"+2+3 结果 "123"
1+2+"3" 结果 "33"
int x=1;
int y=2;
System.out.println(x+"+"+y+"="+(x+y));
10 运算符:
byte a=20;
a+=10; //自加没有自动类型提升问题
a=a+10;
>> 有符号右移,补符号位
>>> 右移后高位都补0;
a1=1000;
System.out.println(a1>>1); a1=500
System.out.println(a1>>1); a1=500
a2= -1000;
System.out.println(a2>>1); a2= -500;
System.out.println(a2>>1); a2=214553;
5/2=2 //整数除整数是整数
5.0/2=2.5
11 程序流程控制:
if else: 和c++的区别就在条件语句if(true)
switch(byte short int char) //必须是整形兼容的
循环:
for(int i=0;i<=10;i++){语句块} //知道循环次数时使用
while (条件){语句块} //不知道循环次数时使用
do{语句块} while(条件) //至少执行一次