JDK:java development kit,包括java编译器(将源程序编译成字节码)、jar打包工具、jdb调试工具、java运行编译后的java程序(.class后缀)、appletviewer(小程序浏览器)等。目前最新是JDK 7.
它包括了java运行环境,java工具和java基础的类库。
安装完JDK,设置path和classpath
系统变量中新建JAVA_HOME为:c:\java\jdk7;
在path中添加;%JAVA_HOME%\bin;
新建classpath为:
.;%JAVA_HOME%\lib\tools.jar;%JAVA_HOME%\lib\dt.jar;
classpath包含三个部分,.表示当前目录下、tools.jar与dt.jar是压缩工具.
java.lang是包含在任何一个java程序中的。
函数中对象的传入是object reference,所以函数内的改变会体现到函数外。这不同于c++,后者会为传入的对象区分是pass by value,还是pass by reference.
main函数入口:
public staic void main(String []args){
}
这里main是static,所以可以调用的函数也必须是static,至少这里接触的是如下形式:
public class MyTest{
static void f(String s,int i){
System.out.println(s+“= ”+i)
}
static void g(){
}
public static void main(String[]args){
f();
g();
}//main
}//class MyTest
上述的f中是采用+将String, ” ”以及一个int进行连接起来.+类似c++中的重载,那么String应该是实现将i进行int到String的类型转换了把?(疑问待解决)(JDK中找到答案:Java 语言提供对字符串串联符号("+")以及将其他对象转换为字符串的特殊支持。字符串串联是通过 StringBuilder
(或 StringBuffer
)类及其 append
方法实现的。字符串转换是通过 toString
方法实现的,该方法由 Object
类定义,并可被 Java 中的所有类继承。有关字符串串联和转换的更多信息,请参阅 Gosling、Joy 和 Steele 合著的 The Java Language Specification。)
第三章 控制程序流
为了产生随机数,调用Random类,该类在java.util中。
import java.util.Random (or) import java.util.*(两者都可,只是,*代表import所有的class,那么编译时间会多);
Random rand = new Random();
这里没有传入参数作为种子,所以java是使用当前时间作为种子(seed)。通过rand对象可以产生各种随机数,如:
rand.nextInt();
rand.nextFloat();
rand.nextDouble();
rand.nextLong();
关系运算符
==,!=这些运算符,他们比较是object reference,不是对象的值,因此,如下的比较可以看出来:
Integer n1 = new Integer();
Integer n2 = new Integer();
System.out.println(n1==n2);//false;
System.out.println(n1!=n2);//true;
n1和n2的object reference是不同的,如果要比较值,那么是需要是equals()函数
System.out.println(n1.equals(n2));//true
但是equals()是默认拿object reference来比较的,所以Integer是override了equals()函数才使得n1和n2是值之间的比较。许多class都override了equals()函数,所以可以放心当作取值比较来使用。但是如果自己实现class,那么就必须override这个equals(),否则它默认是object reference了。如下例子来解释自己定义的class
class MyInteger{
int i;
}
public class static void main(String []args)
{
MyInteger v1 = new MyInteger();
MyInteger v2 = new MyInteger();
v1.i = v2.i = 10;
System.out.println(v1 == v2);//false
}
这里由于MyInteger并没有override equals(),所以还是调用的equals()是默认的object reference 来比较,结果为false。
类比C++,我想这里的object reference 可以想象为对象的地址,或者类比python,v1和v2的id是不同的,所以object reference也是不同的。
从目前可以看出,java与c++的不同,c++总是区分pass by value还是pass by reference
逻辑运算符
三种:AND,OR,NOT
boolean值在java中只能使用上述三种操作,即 boolean && boolean,boolean ||boolean, !boolean三种,不同与c++中,可以将non-boolean作为操作数,如在c++中,1 &&2,1 ||2,!1这三种都是成立的。因为在c++中,非零即是true。零才是false。操作数1和2都被转化为boolean中的true然后参与逻辑运算。但是java中不允许这样的操作。
java中不提供sizeof()运算符,因为在所有机器上,每种数据类型都有相同的容量大小。
Math.random()同样会产生随机数,但是它是介于0和1之间的值。范围是[0,1),即前闭后开。
第四章 初始化和清理
构造函数,(呵呵,是否存在析构函数呢,拭目以待)来杜绝悲催的程序员可能忘记了初始化操作,这在c++中当包含指针时候,使用了为初始化的指针…)
第五章 隐藏实现细目
让变动的食物与不变的食物彼此隔离,是OOD的首要考虑。
access specifier(访问权限修饰词);
当你import java.util.Random或者Import java.util.*,那么就是取用的就是package。import存在的理由,是为了提供命名空间的管理机制。