java入门

来源:互联网 发布:防沉迷ipad软件 编辑:程序博客网 时间:2024/05/22 10:46

java的最大特点是:一次编译,到处运行!

设置环境变量的时候注意:set path=%path%;d:\java\jdk和set path =%path%;d:\java\jdk是不等同的,在环境变量的名字里面,空格也算是名字的组成部分,
所以上面两个是不同的环境变量,一定要注意了!

查看系统的环境变量的方法是用set命令即可查看所有的环境变量名和取值,也可以加环境变量的名字来查看具体的环境变量的值,
如:set path即可查看path环境变量的取值。

还有一个要注意的地方,当把环境变量设置到用户变量下面的话,需要注销再登录后,环境变量才生效。

环境变量的值是用户变量和系统变量的交集。如在用户变量下设置path=d:\java\jdk,那么path的值实际上是系统变量的值加“;d:\java\jdk”。
(注意:一个环境变量名称里面的各个值用“;”分隔,最后一个值不需要用“;”来结束。)

path环境变量的作用:当我们执行某个命令时,操作系统首先会在当前目录下查找这个命令,如果当前目录下没有这个命令程序,
操作系统就会沿着path环境变量中所指定的目录,依次查找这个命令程序,以最先找到的为准。

当Java程序运行时,就启动了一个Java虚拟机,Java虚拟机需要装载很多文件,但是如果你的系统同时安装了几个版本的java虚拟机,
怎么判断当前启动的是那一个Java虚拟机呢?我们可以使用java -verbose 那么Java虚拟机启动时就会把所要装载的文件的过程详细的打印出来。

(一个小技巧:当我们需要进入一个目录,比如cd lesson1,我们可以用通配符来写,cd le*   或者 cd l*s*1 灵活使用通配符可带来很多方便。)

classpath环境变量的作用:当我们运行java程序时,需要找到相应的类文件,而且在运行Java程序时,需要很多类库的支持。
classpath环境变量的值就是指定这一系列的路径,java虚拟机会沿着classpath环境变量中所指定的目录,依次查找这个类文件,以最先找到的为准。
        说的深入一些就是当我们运行Java程序的时候,Java虚拟机要装载Java的类,最顶层类加载器BootStrap负责加载JRE/lib/rt.jar里面的类,ExtClassLoader负责加载JRE/lib/ext/*.jar里面的类,AppClassLoader负责加载classpath指定的所有jar或目录里面的类,
而我们自己写的Java程序一般情况下是不位于JRE/lib/rt.jar里面,也不位于JRE/lib/ext/*.jar里面,那就只有在classpath中指定类所在的路径了。
       一般我们需要指定的classpath的值是:.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar

有一个问题一定要注意:classpath指定的目录,一定不能是含有空格的目录,同时一定不能是含有中文字符的目录。

(扩展:jad 反编译软件可以反编译.class文件到.java文件。)

javac -d . *.java     可编译当前文件夹下的所有java文件,这样做的主要好处是自动识别类的先后顺序去进行编译。

 

计算机中用补码的形式表示数值。

在计算机中,如果我们用一个字节表示一个数,一个字节有8位,超过8位就进1
如: 1 0000 0000    进位1被丢弃

    利用溢出,我们可以将减法变成加法。

    对于十进制数,如果从9得到结果5,可以用减法:
     9-4=5
    因为4+6=10(十进制),我们将6作为4的补数,将上式的减法改写为加法:
     9+6=15
    去掉高位1(也就是减去10),得到结果5。

    对于16进制数,如果从C得到结果5,可以用减法:
     C-7=5
    因为7+9=16(十六进制),我们将9作为7的补数,将上式的减法改写为加法:
     C+9=15(16进制中的15)
    去掉高位1(也就是减去16),得到结果5。


原码:
    将最高位作为符号位,(0为正,1为负),其余各位代表数值本身的绝对值。
    
          +7的原码:0000 0111
          -7的原码:1000 0111

    问题:+0的原码:0000 0000
          -0的原码:1000 0000

          +0和-0实际上都是0,但是在计算机中的表示却有两种表示方法,所以计算机中没有采用原码来表示数值。

反码:
    正数:反码跟原码相同
    负数:符号位为1,其余各位是原码取反。

          +7的反码:0000 0111
          -7的反码:1111 1000

    问题:+0的反码:0000 0000
          -0的反码:1111 1111

补码:
    正数:补码,反码,原码都相同
    负数:符号位为1,其余各位是对原码取反,然后整个数+1。
        
   +7的补码:0000 0111
          -7的补码:1111 1001

     OK: +0的补码:0000 0000
          -0的补码:0000 0000


正数:补码,反码,原码都相同
负数:原码转换为补码和补码转换为原码都是:符号位不变,其余按位取反 + 1

 

表达式的数据类型自动提升:

所有的byte型,short型,char型的值将被提升到int型再参与运算。
如果有一个操作数是long型,计算结果就是long型。
如果有一个操作数是float型,计算结果就是float型。
如果有一个操作数是double型,计算结果就是double型。

浮点数在内存中的表现形式:用二进制的指数形式表示一个浮点数的格式

float:把4个字节(32位)分为三部分,最高位代表符号位,接下来的8位代表幂指数,剩下的23位代表有效数字。
其具体表示形式可以查找JDK帮助文档:查找Float.intBitsToFloat的说明。

Float.intBitsToFloat(0x7f800001)   结果为不是一个数字NaN
       Float.intBitsToFloat(0x7f800000)   结果是正无穷大;
       Float.intBitsToFloat(0xff800000)   结果是负无穷大;
       Float.intBitsToFloat(0x7f7fffff)   能表示的最大值;
       Float.intBitsToFloat(0x00000001)   能表示的最小值;

因为浮点数是有精度的,所以程序中一般不能用“==”来做比较,一般用大于小于来比较。


对于各种基本数据类型对应的封装类都是只读类,其值不能修改。


移位运算的注意事项及小技巧:

移位运算符适用类型有byte、short、char、int、long
       对低于int型的操作数将先自动转换为int型再移位。 
       对于int型整数移位a>>b,系统先将b对32取模,得到的结果才是真正移位的位数。例如:a>>33和a>>1结果是一样的,a>>32的结果还是a原来的数字。
       对于long型整数移位时a>>b ,则是先将移位位数b对64取模。
       移位不会改变变量本身的值。如a>>1;在一行语句中单独存在,毫无意义 。
       x>>1的结果和x/2的结果是一样的,x<<2和x*4的结果也是一样的。
       总之,一个数左移n位,就是等于这个数乘以2的n次方,一个数右移n位,就是等于这个数除以2的n次方。
       请思考:如何用程序实现求2的x次方。答案:y = 1 << x;


在程序中我们可以用大括号将多个语句括起来形成一个复合语句。

在一个函数中可以用“return;”来提前结束函数的运行。

switch语句判断条件可接受int, byte, char, short型,不可以接受其他类型。
       写switch语句的时候,一定要记住break;的编写。


while() {
 //dosomething;
}     //注意,这里不需要分号结束。

do {
 //dosomething;
} while(表达式);   //注意,这里需要有分号结束语句。


String类对象中的内容一旦被初始化就不能改变。
       String类的对象是一个常量对象,当我们需要为String的对象重新赋值的时候,Java虚拟机会重新分配一块内存存放新产生的String类型的对象,然后将新分配的那块内存的首地址引用赋值给那个变量。而原来的对象不受任何影响,如果原来的对象没有被引用,那么在适当的时候会被垃圾回收器回收。

针对String的“+”和“+=”操作符,是Java中唯一被重载的操作符。在Java中,不允许程序员重载操作符。

在Java中,如果想要让一个对象所占据的内存成为垃圾内存,可以将对象设置为null,切断他们的引用关系。

StringBuffer和StringBuilder是可变的字符串序列。StringBuffer是线程安全的,而StringBuilder不是线程安全的。


       字符串常量(如: String str = "hello";)实际上是一种特殊的匿名String对象,每次使用字符串常量的时候,如果内存中已经存在具有相同内容的匿名String对象,java虚拟机就不再创建一个新的匿名String对象,而是让所有内容相同的字符串常量共享同一个匿名String对象。
       从而就可以让多个内容相同的引用变量指向同一个匿名String对象,这样就可以节约内存空间。

在windows系统下,按回车会产生两个字符“\r\n”。


       java中的内存空间分为栈内存和堆内存。下的所有java文件,这样做的主要好处是自动识别类的先后顺序去进行编译。

1 0