JAVA开发环境和语法基础

第一章 Java开发环境

1.Java的跨平台原理

         java的编程过程为:java源程序(.java文件)经过java编译程序编译后生成java字节码文件,即(.class文件),然后交给java虚拟机执行,java虚拟机中经过java字节码解释程序执行后在交给操作系统。

         windows下c编程过程:c源程序(.c文件)经过c编译程序编译后生成windows下可执行文件(即.exe文件),.exe文件就可以再操作系统上直接运行。

        由此可见java相对于c的跨平台性主要是在实现了java解释器的平台上可以对任何编译过的java字节码文件解释执行。此外,java兼顾解释性和编译性语言的特点,java源文件转换成.class字节码文件的过程是编译型的,.class文件在操作系统上运行的过程则是解释型的。

2.classpath和path的区别

        path环境变量的作用是设置共操作系统去寻找和执行应用程序的路径,即,若操作系统在当前目录下没有找到我们想要执行的程序和命令时,操作系统就会按照path环境变量指定的目录依次去查找,以最先找到的为准;classpath的作用类型path环境变量的作用,只是它是供Java虚拟机使用,Java虚拟机按照classpath环境变量指定的目录顺序去查找这个类,以最先找到为准,但设置classpathjava虚拟机将不在当前目录查找。(要想让java虚拟机即在classpath指定的路径下查找,又在当前目录查找,设置时可以在class环境变量中加一个“.”,如:“set classpath=C:\mydir;.”)。

3.设置classpath路径时注意事项

      在配置java环境变量的时候经常因为空格而导致错误。比如如下两种错误:

      ①set classpath =c:\mydir;等号和classpath之间有空格,这样本来是设置classpath的值变成了设置“classpath+空格”的值;

      ②set classpath= c:\mydir;等号和路径名之间有空格,把路径变成了“空格+C:\mydir”,导致了路径设置的错误。

       还有一种是路径里有空格,因为windows允许带空格的目录名,但java不允许,java对空格和中文敏感。

4.快速得到路径字符串的方法

       可以在windows操作系统的文件夹选项对话框中,选中“地址栏中显示全路径”,选项,在进入某个目录后可以Ctrl+C复制路径;也可以将目录下的某个文件拖入到运行对话框,也可以得到路径。

       得到路径后在运行对话框中要到左上角点击后出来标记后才能操作。

        在命令行窗口中,经常要用到cd命令进入子目录后其他目录,如果目录的名称比较长,可以只输入目录名中的部分字符,其他字符用*代替,如可以用cd tos*进入toshiba_bak目录。

    

4.java中常见dos命令行

dir : 列出当前目录下的文件以及文件夹

md : 创建目录

rd : 删除目录

cd : 进入指定目录

cd.. : 退回到上一级目录

cd/ : 退回到根目录

del : 删除文件

exit : 退出dos命令行

设置环境变量的时候注意:在环境变量的名字里面,空格也算是名字的组成部分,

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

classpath环境变量的值就是指定class文件的一系列的路径,java虚拟机会沿着classpath环境变量中所指定的目录,依次查找这个类文件。可以让指定class文件在不同的盘符下运行。

                                                                                                                                 第二章 Java语法基础

二.Java语言基础组成

1 关键字

被Java语言赋予了特殊含义的单词(所有字母都小写如if,false,null)

2 标识符

在程序中自定义的一些名称。(数字不可以开头,不可以使用关键字。)

Java中的名称规范:

包名:多单词组成时所有字母都小写。xxxyyyzzz

类名接口名:多单词组成时,所有单词的首字母大写。XxxYyyZzz

变量名和函数名:多单词组成时,第一个单词首字母小写,第二 个单词开始每个单词首字母大写。xxxYyyZzz

常量名:所有字母都大写。多单词时每个单词用下划线连接。XXX_YYY_ZZZ

3 注释

4 常量和变量

表达式的数据类型自动提升:(自动类型转换要是两种类型彼此兼容的类型)

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

System.out.println('a'+1')打印结果是98而System.out.println(" "+'a'+1')打印结果是“a1‘。

上述规则使用与变量不合用与常量,char i='a';int a= i+5;编译可以通过,但int a=‘a’+3;则通不过

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

float:把4个字节(32位)分为三部分,最高位代表符号位,接下来的8位代表幂指数,剩下的23位代表有效数字。

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

小数常量的默认类型是double型的,所以float  f=3.5;编译报错,应改为float f=3.5f;

字符串常量:

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”。

变量:内存中的一个存储区域

该区域有自己的名称(变量名)和类型(数据类型)

该区域的数据可以在同一类型范围内不断变化。

5 运算符

算术运算符(*/%,+-),位运算符,比较运算符(<><=>=,==!=),逻辑运算符(&,^,|,&&,||),赋值运算符。(优先级从高到底)

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

移位运算符适用类型有byte、short、char、int、long

boolean和String型不能强转为int型.int x=(int)true;编译报错。但char型可以。
       对低于int型的操作数将先自动转换为int型再移位。 
       对于int型整数移位a>>b,系统先将b对32取模,得到的结果才是真正移位的位数。例如:a>>33和a>>1结果是一样的,a>>32的结果还是a原来的数字。
       对于long型整数移位时a>>b ,则是先将移位位数b对64取模。

在做int型移位运算时.当所以移位数大于等于32时,系统会先用这个位数对32进行取模.如题.先取模---即32%32=0,所以a>>32相当于a>>0.还是本身.

同理对long型,当移位数大于等于64时,就要先对64取模.
       移位不会改变变量本身的值。如a>>1;在一行语句中单独存在,毫无意义 。
       x>>1的结果和x/2的结果是一样的,x<<2和x*4的结果也是一样的。
       总之,一个数左移n位,就是等于这个数乘以2的n次方,一个数右移n位,就是等于这个数除以2的n次方。
       请思考:如何用程序实现求2的x次方。答案:y = 1 << x;

三元运算符

z = (x>y)?x:y;

6 语句

switch语句

格式:

switch(表达式)

{

case 取值1:

执行语句;

break;

case 取值2:

执行语句;

break;

…...

default:

执行语句;

break;

}

switch语句判断条件可接受int, byte, char, short型,不可以接受其他类型。 写switch语句的时候,一定要记住break;的编写。如果一个case语句后面没有break语句则它后面没有匹配的case语句也会被执行。
while() {
 //dosomething;
}     //注意,这里不需要分号结束。

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

continue语句只能出现在循环语句while,do,for的子语句块中,无标号的continue语句的作用是跳过当前循环的剩余语句,接着执行下一次循环。

public class MyClass{

    public static void main(String argv[]){

       int i;

       int j;

       outer: for (i = 1; i < 3; i++)

           inner: for(j = 1; j < 3; j++) {

                  if (j == 2)

                  continue outer;

                  System.out.println

("Value for i = " +i + " Value for j = " +j);

}

    }

}

输出:

Value for i = 1 value for j = 1

Value for i = 2 value for j = 1

7 函数

函数就是定义在类中的具有特定功能的一段独立小程序。 

函数也称为方法。在同一个类中国允许同时存在一个以上的同名函数,只要他们的参数个数或类型不同即可,这种情况下该函数就叫被重载。

  在C,C++,Java中,一对大括号中间的部分就是一个代码块,代码块决定其中定义的变量的作用域。代码块决定了变量的作用域,作用域决定了变量的可见性和存在时间。

C和C++中,{{}} ,外括号和内括号中可以定义名字相同的变量,只是不属于同一个变量,但java不允许。

        在一个函数或函数里面的代码块中定义的变量称为局部变量,局部变量在函数或代码块被执行时创建,在函数或代码块结束时被销毁。局部变量在进行取值操作前必须被初始化或进行过赋值操作,否则编译出错。

         如:

        public class Test{

            public static void main(String [] args)

                 {

                          int  x;//应改为int x=0;

                          x=x+1;

                         System.out.println("x is "+x);

                  }

        }

 3.关于函数的返回值void

        比如一个打印字符串的函数,不用返回任何结果,name就用void作为返回值类型,意思是”不知道是什么类型,可定义函数时又非要填写一个返回值类型,就用它充数吧“。

8 数组

同一种类型数据的集合。其实数组就是一个容器。

定义数组的方法以及静态初始化方法:

①int x[]=new int[100];(可以用x=null将数组x不指向任何数组对象。)   int ix[]={1,2,3,4};

②int 【】x; x=new int[100];(注意:int [] x;中方括号位于变量名之前)    int is[]=new int[]{1,2,3,4}

java中无论用任何方式定义数组都不能指定其长度。如:int a[5];是错误的。

多维数组定义:

① int xx[][];

②int [][] xx; xx=new int[3][];

③int xx[][]=new int [2][3];数组对象正好是一个x*y形式的规则矩阵。

④int [] [] xx={{3,2,4},{1,5},{6}};

⑤int [] x[]=new int[10][10];相当于x[]是一个普通字符。

数组中常见两个错误:空指针NullPointerException异常和数组越界ArrayIndexOutBoundsException异常。

数组引用对象的length属性可以返回数组的长度,但注意与js中区别,不是用length()方法。

内存结构:

栈内存

用于存储局部变量,当数据使用完,所占空间会自动释放。

堆内存

数组和对象,通过new建立的实例都存放在堆内存中。

每一个实体都有内存地址值。

实体中的变量都有默认初始化值。用new int【100】产生的数组对象中的每个元素的初始值都是0.

实体不在被使用,会在不确定的时间内被垃圾回收器回收。

发布了17 篇原创文章 · 获赞 7 · 访问量 7万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章