java语言是解释执行,java源码是通过编译生成一种特殊的.class的中间字解码文件,然后再有JVM进行解释执行。
java语言对指针进行了上层的封装,它保证能够通过这个指针(引用),来访问有效的内存单元。
java语言不允许多继承,使继承关系成树装图,每个类都只能由一个父类。
java语言的开发效率高,但执行效率低(相当于c++的55%)。
java的垃圾回收机制,在java中new的对象不需要向c++一样进行delete操作,JVM会根据情况回收垃圾对象。(懒汉机制,等待资源没有的时候才回收)
我们只能够建议JVM进行垃圾回收,例如∶System.gc() ,RunTime.gc()这两个方法就是建议JVM进行垃圾回收的方法。
JDK,java开发工具包(类库和运行命令),JRE,java运行环境,JVM,java虚拟机(解释执行的核心,对字节码进行翻译成运行环境的机器码,它可以屏蔽平台差异。JVM是不跨平台的。)
java源文件的文件名必须和文件中定义public class的类名(大小写页要相同)相同。
java源代码中的main方法是程序的入口,下面是main方法的定义写法。
public static void main(String[] args){
System.out.println("Hello world");
}
java源文件也要先编译,使用javac xxx.java格式的命令得来编译,使用java xxx来运行。
实例:
/**
本文件为:E:/Tomcat 5.5/webapps/northhujia/src/NorthhujiaUtil.java
javac NorthhujiaUtil.java -d ../WEB-INF/classes/
java com.jc.hujd.NorthhujiaUtil
*/
package com.jc.hujd;
import java.io.*;
public class NorthhujiaUtil{
public static void main(String[] args){
System.out.println(NorthhujiaUtil.escapeHtml("<html>/"="));
}
public static String escapeHtml(String str){
if( str == null ){
return null;
}
int len = str.length();
StringBuffer sb = new StringBuffer(len);
for(int i=0; i<len; i++){
char c = str.charAt(i);
switch( c ){
case ' ':
sb.append(" ");
break;
case '<':
sb.append("<");
break;
case '>':
sb.append(">");
break;
case '&':
sb.append("&");
break;
case '"':
sb.append("quot;");
break;
default:
sb.append(c);
}//end switch
}//end for
return sb.toString();
}
}
编译和运行方式
Microsoft Windows XP [版本 5.1.2600]
(C) 版权所有 1985-2001 Microsoft Corp.
E:/Tomcat 5.5/webapps/northhujia/src>javac NorthhujiaUtil.java -d ../WEB-INF/classes/
E:/Tomcat 5.5/webapps/northhujia/src>cd ../WEB-INF/classes
E:/Tomcat 5.5/webapps/northhujia/WEB-INF/classes>java com.jc.hujd.NorthhujiaUtil
<html>quot;=
E:/Tomcat 5.5/webapps/northhujia/WEB-INF/classes>
//......
/* .......*/
/** <p>this is a class </p>
*/
jar命令∶用于打一个xxx.jar文件
用法:jar {ctxu}[vfm0Mi] [jar-文件] [manifest-文件] [-C 目录] 文件名 ...
选项:
-c 创建新的存档
-t 列出存档内容的列表
-x 展开存档中的命名的(或所有的〕文件
-u 更新已存在的存档
-v 生成详细输出到标准输出上
-f 指定存档文件名
-m 包含来自标明文件的标明信息
-0 只存储方式;未用ZIP压缩格式
-M 不产生所有项的清单(manifest〕文件
-i 为指定的jar文件产生索引信息
-C 改变到指定的目录,并且包含下列文件:
如果一个文件名是一个目录,它将被递归处理。清单(manifest〕文件名和存档文件名都需要被指定,按‚m' 和 'f‘标志指定的相同顺序
示例1:将两个class文件存档到一个名为 ‚classes.jar‘ 的存档文件中:
jar cvf classes.jar Foo.class Bar.class
示例2:用一个存在的清单(manifest)文件 mymanifest 将 foo/ 目录下的所有文件存档到一个名为 classes.jar 的存档文件中:
jar cvfm classes.jar mymanifest -C foo/ .
一般在使用使用
jar cvf 文件名.jar 文件所在路径(xxx/xxx/xxx.class)
也可以压缩一个目录,只要在制定路径是指定为文件夹,jar命令的命令行参数在使用时可以以“-”开头,也可以不用。
java程序的运行过程:
如果要使用到其他的在JAVA_HOME中没有的类或者是其他公司提供的第三方的.jar(jar包)文件时,要把它的路径及文件名加到CLASSPATH中。
import 包名,导入包中的类文件。
java.lang包 | 基础包。系统会在每个java程序中隐含导入 |
java.util包 | 工具类。 |
java.io包 | 输入输出操作 |
java.net包 | 网络编程。 |
java.awt,java.swing,javax.swing java.event包 | java的图形编程 |
java应用程序中必须有一个main()方法。
Java语句以分号分隔,Java代码块包含在大括号内,忽略空格。
byte | 1字节 | 8位 | -128到127 |
short | 2字节 | 16位 | -2^15到2^15–1 |
int | 4字节 | 32位 | -2^31到2^31–1 |
long | 8字节 | 64位 | -2^63到2^63–1 |
float | 4字节 | 32位 |
double | 8字节 | 64位 |
char | 2字节 | 16位 |
boolean | false/true |
所有基本数据类型在使用时会事先分配空间,值本身就存在空间中,在传递时,就是值传递,不是引用传递。
static修饰的方法是类方法,否则是属于对象的方法
例如
public class Test{
public static void main(String[] args){
Test t=new Test(); int b=1; int c=2; int[] a=new int[10];
t.sqort(a); add(b,c)
}
public int[] sqort(int[] a){
.......
}
static int add(b,c){
.......
}
}
System.out.println(3/2) 按整型计算 得1
>>= | 前面是零补零,前面是一补一; |
>>>= | 无符号右移(强制右移都会移进一), |
&& | 短路与,前面为假,表达式为假,后面的操作不会进行,& 会对所有条件进行判断 |
双竖线 | 短路或,前面为真,表达式为真,后面的操作不会进行, |
单竖线 | 会对所有条件进行判断。 |
instanceof | 判断一个对象是否属于某个类型 |
java中的求余运算符“%”可以对两个实型变量求余 |
注意:else只是和其上面的同层的最近的if()来配对。
switch(){
case 'a':……..
case 1:……break;
default:
…………
}
注解:
循环语句
例子:
loop:for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
if(3==j){
break loop;
/*loop为标签 只能用在循环语句中,循环
嵌套中用于跳到外层循环*/
}
}
}
辨析:
int x,a=6,b=7;
x=a++ + b++; // a=7,b=8,x=13
注意:
注意:
java中的数组Array,其包含两个部分,分别是数组的引用和数组的空间两部分。
注:
注:
初始化、创建、和声明分开
int[] i;
i = new int[2];
i[0] = 0;
i[1] = 1;
初始化、创建、和声明在同一时间
int[] i = {0,1};
Car[] c = {new Car(),new Car()};
有效定义
int[][] i1 = new int[2][3]; (同时给定一维,二维的空间)
int[][] i2 = new int[2][]; (给定一维的空间,二维空间待定)
i2[0] = new int[2],i2[1] = new int[3];
- C++中 int[][] =new int[][3];有效
无效定义
int[][] i1 = new int[][3];
数组长度 -----数组的属性length(在二维数组中这个属性只代表第一维的长度)
int[] i = new int[5];
int len = i.length; //len = 5;
Student[][] st = new Student[4][6];
len = st.length; //len = 4;
len = st[0].length; //len = 6;
System.arrayCopy(Object src, int srcPos, Object dest, int destPos, int length);
srcPos从第几位开始拷贝, dest目标数组, destPos目标数组放置的起始位置, length,表示要拷贝的长度。拷贝一个数组到另一个数组。
一个className.Java文件中可以定义多个类但是只能有一个public修饰的类,也只能以这个类的类名作为.java的文件名。
java中的类的对象的创建,
注意:
Car[] c=new Car[3];
c[0]=new Car();
注意:存放基本类型的数组的数据是直接存放在数组的空间中,而对象的数组在数组空间中存放的则是对象的引用。
注:
Java中的方法调用中参数传递有两种,