粗略的看了看黑皮书系列的java前半部分,这里整理一下知识要点。
java与c语言最大的区别就是java是一种面向对象的编程语言,何谓面向对象,我最直观的理解是一种抽象的方法。比如说你为了某个功能编写了一段代码,在解决问题中用到了这段代码,这时你就可以将此段代码所能实现的功能抽象成一个对象。当你用到它时,声明并且执行其中响应的方法。这样的设计可以大大的提高编程的效率,也可以帮助编程人员清晰的掌握程序的结构,更重要的一点是你可以不必理解一个对象的实现方式,传入规定参数就可以得到正确的结果。
工欲善其事,必先利其器,我用的是sun公司的eclipse,当然还有许多优秀的编程工具,选择一款适合自己的才是高效的第一步。
1、配置java环境变量:
JAVA_HOME:配置JDK的目录
CLASSPATH:指定到哪里去找运行时需要用到的类代码(字节码)
PATH:指定可执行程序的位置
LINUX系统(在" .bash_profile "下的环境变量设置)
JAVA_HOME=/opt/jdk1.5.0_06
CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar
PATH=$PATH:$JAVA_HOME/bin:.
export JAVA_HOME CLASSPATH PATH (将指定的环境变量声明为全局的)
windows系统:
右击我的电脑-->属性-->高级-->环境变量
2、Java的运行过程:
在java中:先编译后解释,把.java文件编译成.class字节码文件
Java源代码文件(.java文件)--->Java编译器(javac)--->Java字节码文件(.class文件,平台无关的)--->Java解释器(java),执行Java字节码
3、Java的垃圾回收:
由一个后台线程gc进行垃圾回收,意味着java在编写中不像c一样必须手动回收内存。
回收机制:虚拟机判定内存不够的时候会中断代码的运行,这时候gc才进行垃圾回收
缺点:不能够精确的去回收内存
语句:java.lang.System.gc();建议回收内存,但系统不一定回应,他会先去看内存是否够用,够用则不予理睬,不够用才会去进行垃圾回收。
4、java的安全性:
沙箱机制:只能做沙箱允许的操作
通过下面环节,实现安全
加载有用的类文件,不需要的不加载
校验字节码,查看允许的操作
查看代码和虚拟机的特性是否相符
查看代码是否有破坏性
查看是否有违规操作,如越界
查看类型是否匹配,类型转换是否能正确执行
斯坦福大学的某教授说java和c的区别时,说过一句有趣的比喻:她将java比喻成一个敬职敬责的母亲,时刻提醒你不应该做什么应该做什么。
5、程序结构:
源程序:
package mypack;//相当于一个目录
public class HelloWorld{
public static void main(String[] args){
System.out.println(“Hello World”);
}
}
注:
1、文件名必须和public修饰的类名一致,以.java作为文件后缀,如果定义的类不是public的,则文件名与类名可以不同。
2、一个.java文件中可以有多个class,但是只有一个public修饰的类。
3、java源代码文件编译后,一个类对应生成一个.class文件
4、一个java应用程序应该包含一个main()方法,它是应用程序的入口方法,可以定义在任意一个类中,不一定是public修饰的类
包(package):把源文件放在目录下
由于工程的需要,将不同的源文件放在不同的目录下,从而引入了包。
执行该程序需要用" java 包名.类名 "
引进包中的某个类:import 包名.类名;
引进包中的所有类:import 包名.*;
注释:
// 单行注释, 到本行结束的所有字符会被编译器忽略
/* */ 多行注释, 在/* */之间的所有字符会被编译器忽略
/** */ 文档注释, java特有的,在/** */之间的所有字符会被编译器忽略
可以用javadoc把java源程序中这种注释抽取出来形成html页面(只有写在包,类,属性,方法,构造器,引入之前的注释才可以进行抽取)
6、标识符:
命名规则:
(1) 由字母、数字、下划线、$组成,不能以数字开头
(2) 大小写敏感
(3) 不得使用java中的关键字和保留字
习惯:
(1) 标识符要符合语义信息
(2) 包名所有字母小写
(3) 类名每个单词首字母大写,其它小写 //HelloWorld
(4) 变量和方法:第一个单词小写,从第二个单词开始首字母大写 //tarenaStudent
(5) 常量:所有字母大写,每个单词之间用" _ "连接
7、基本数据类型:8种
1) 整型
byte
short
int
long
2) 浮点类型
float
double
3) 字符类型
char
4) 布尔型
boolean false/true
元素初始值
类型 黙认值
byte 0
short 0
int 0
long 0l
float 0.0f
double 0.0d
char \u0000
boolean false
reference types null
注意:
1、Java中的自动类型转换问题。
1)、正向过程:从低字节到高字节可以自动转换。
byte->short->int->long->float->double
2)、逆向过程:从高字节到低字节用强制类型转换。
例:int i = Integer.parseInt(F);
注:逆向转换将丢失精度。
2、boolean:只有true和false。
3、char:Java中用" \u四位十六进制的数字 (即使在注释中出现\u,后面如果跟的不是4个数字,也会报错)"表示将字符转换成对应的unicode编码,字符类型要用单引号括起来。
4、黙认浮点类型为double,float数据类型有一个后缀为" f "或" F "。
5、long类型有一个后缀,为" l " 或者" L "
8、引用数据类型:
类、接口、数组
引用类型 变量名 = new 引用类型名(参数);//new后面一般跟的都是类的构造器
成员:写在类体括号里面的
9、变量
全局变量:一般在类名之后方法名之前生命,作用域是整个类。
加之public字段表明其他类也可以访问此变量
static 字段表明变量可以被访问和修改
局部变量:不是声明在类体括号里面的变量
(1)必须要先赋值,后使用,否则通不过编译,局部变量没有默认初始化值
(2)作用范围:定义开始到定义它的代码块结束
(3)同一范围内,不允许2个局部变量命名冲突
10、运算符
移位运算符:效率最高
>> 有符号右移,补符号位
移负数位,则将该数值加32后再进行移位
数值的2进制是按照补码保存的
>>> 右移后高位都补0
逻辑运算符:
&/|也可以作为逻辑运算符
&& 先判断前面一个条件,如果为假,则不用计算后一个条件
|| 先判断前面一个条件,如果为真,则不用计算后一个条件
" + "运算符:
两个操作的对象是数值时,是加法
如果有一个是字符串时,则是字符串的连接
流程控制语句:
for、whlie、do-whlie
switch中的变量类型只能是byte、 short、int、char四种类型
11、数组
声明数组:
数组能以下列形式声明:
类型[] array;
类型 array[];
注:
JAVA中推荐用:类型[] array;
一个数组是一个对象
声明一个数组没有创建一个对象
声明时不用指定长度
创建数组:
创建基本数据类型数组:int[] i = new int[2];
创建引用数据类型数组:Student[] s = new Student[100];
创建时一定要指定长度
初始化数组:
声明、创建、初始化分开:
int[] i; //定义数组
i = new int[2]; //分配空间
i[0] = 0; //初始化
i[1] = 1;
声明、创建、初始化在同一时间 :
int[] i = {0,1}; //显示初始化 {}中有几个值,则数组长度为几
Student[] s = {new Student(),new Student()};
注: int[] i=new int[]{1,2,3}; //后面[]中不可以写数值
int[] i1=new int[3]{1,2,3}; //error
二维数组:(其实是一个一维数组,它的每一个元素又是一个一维数组)
int[][] i1 = new int[2][3];
int[][] i4 = {{1,1,1},{2,2,2},{3,3,3}};
int[][] i3 = new int[][3];//不允许高维没分配空间而先给低维分配空间
int[][] i2 = new int[2][];
i2[0] = new int[2];
i2[1] = new int[3];
数组长度:
数组的属性length
数组长度一旦确定,不可改变
int[] i = new int[5]; 则i.length= 5
数组拷贝:
系统类System提供的
static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length)
src: 源数组
srcPos: 从源数组哪个位置开始拷贝(位置指的是元素的下标)
dest: 目标数组
destPos: 拷贝的元素放到目标数组的起始位置
length: 拷贝多少个
数组排序:
自己实现一个排序方法来进行排序
或者调用java.util.Arrays.sort(Object o)
先到这里吧,这里的知识很多都和c语言很像。我身边的朋友有人会很多种语言,但是都是浅尝则止,我想说如果你想从事编程开发,最好精通一门语言的基础上再去学别的语言。因为编程思想是想通的,只是表达方式和语法不同。