初识think in java

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存在的理由,是为了提供命名空间的管理机制。

原文地址:https://www.cnblogs.com/crafet/p/2380653.html