配置java环境变量:JAVA_HOME:配置JDK的目录CLASSPATH:指定到哪里去找运行时需要用到的类代码(字节码)PATH:指定可执行程序的位置LINUX系统(在.bash_profile下的环境变量设置)JAVA_HOME=/opt/jdk1.5.0_06CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jarPATH=$PATH:$JAVA_HOME/bin:.exportJAVA_HOMECLASSPATHPATH(将指定的环境变量声明为全局的)windows系统:右击我的电脑--属性--高级--环境变量Java的运行过程:编译:生成可执行文件,如C++中利用g++生成a.out,效率高,但不跨平台解释:解释器把源文件逐行解释,跨平台但效率不高在java中:先编译后解释,把.java文件编译成.class字节码文件Java源代码文件(.java文件)---Java编译器(javac)---Java字节码文件(.class文件,平台无关的)---Java解释器(java),执行Java字节码Java的垃圾回收:由一个后台线程gc进行垃圾回收虚拟机判定内存不够的时候会中断代码的运行,这时候gc才进行垃圾回收缺点:不能够精确的去回收内存java.lang.System.gc();建议回收内存,但系统不一定回应,他会先去看内存是否够用,够用则不予理睬,不够用才会去进行垃圾回收内存中什么算是垃圾:不在被引用的对象(局部变量,没有指针指向的)java的安全性:沙箱机制:只能做沙箱允许的操作通过下面环节,实现安全加载有用的类文件,不需要的不加载校验字节码,查看允许的操作查看代码和虚拟机的特性是否相符查看代码是否有破坏性查看是否有违规操作,如越界查看类型是否匹配,类型转换是否能正确执行源程序:packagemypack;//相当于一个目录publicclassHelloWorld{publicstaticvoidmain(String[]args){System.out.println(“HelloWorld”);}}注:1、文件名必须和public修饰的类名一致,以.java作为文件后缀,如果定义的类不是public的,则文件名与类名可以不同。2、一个.java文件中可以有多个class,但是只有一个public修饰的类。3、java源代码文件编译后,一个类对应生成一个.class文件4、一个java应用程序应该包含一个main()方法,而且其签名是固定的,它是应用程序的入口方法,可以定义在任意一个类中,不一定是public修饰的类编译:javac-d.HelloWorld.java含有包的类,在编译的时候最好用上面的格式,-d指的是让该类生成的时候按照包结构去生成,.指的是在当前路径下生成如果不用上面的格式,也可以用javacHelloWorld.java,但是需要注意的是包结构就要由自己去建立,然后将生成的.class文件放到该目录下执行:javamypack.HelloWorld将字节码文件交给Java虚拟机去解释执行需要注意的事,必须使用包名.类名去解释执行包(package):把源文件放在目录下由于工程的需要,将不同的源文件放在不同的目录下,从而引入了包。包可以看作就是一个存放java源文件的目录。在源码中声明一个包名:packagep;(只能放在第一行,且最多只能是一行)如果指定多层包,那么在包名之间我们可以用.作为分隔符:packagep1.p2.p3.p4;用“javacHelloWorld.java–d绝对路径”,编译后生成的字节码文件就会放在指定的包结构下执行该程序需要用java包名.类名引进包中的某个类:import包名.类名;引进包中的所有类:import包名.*;注释://单行注释,到本行结束的所有字符会被编译器忽略/**/多行注释,在/**/之间的所有字符会被编译器忽略/***/文档注释,java特有的,在/***/之间的所有字符会被编译器忽略可以用javadoc把java源程序中这种注释抽取出来形成html页面(只有写在包,类,属性,方法,构造器,引入之前的注释才可以进行抽取)标识符:命名规则:(1)由字母、数字、下划线、$组成,不能以数字开头(2)大小写敏感(3)不得使用java中的关键字和保留字关键字:都是小写的,jdk1.2多了strictfp(经准浮点型),关键字jdk1.4多了assert(断言)关键字,jdk1.5多了enum(枚举)关键字随着学习进度,会慢慢接触到的true、false、null严格说不应该算关键字,应称其为保留字更合适习惯:(1)标识符要符合语义信息(2)包名所有字母小写(3)类名每个单词首字母大写,其它小写//TarenaStudent(4)变量和方法:第一个单词小写,从第二个单词开始首字母大写//tarenaStudent(5)常量:所有字母大写,每个单词之间用_连接基本数据类型:8种1)整型byte1B8位-128到127short2B16位-2^15到(2^15)-1int4B32位-2^31到(2^31)-1long8B64位-2^63到(2^63)-12)浮点类型float4B32位double8B64位3)字符类型char2B16位4)布尔型1Bbooleanfalse/true注:1、Java中的自动类型提升问题。1)、正向过程:从低字节到高字节可以自动转换。byte-short-int-long-float-double2)、逆向过程:从高字节到低字节用强制类型转换。例:inta=(int)4.562;注:逆向转换将丢失精度。2、boolean:只有true和false。3、char:Java中用\u四位十六进制的数字(即使在注释中出现\u,后面如果跟的不是4个数字,也会报错)表示将字符转换成对应的unicode编码,字符类型要用单引号括起来。4、黙认浮点类型为double,float数据类型有一个后缀为f或F。5、long类型有一个后缀,为l或者L引用数据类型:类、接口、数组引用类型变量名=new引用类型名(参数);//new后面一般跟的都是类的构造器成员:写在类体括号里面的内存空间的分配:内存分为:栈:存放简单数据类型变量(值和变量名都存在栈中),存放引用数据类型的变量名以及它所指向的实例的首地址堆:存放引用数据类型的实例局部变量:不是声明在类体括号里面的变量(1)必须要先赋值,后使用,否则通不过编译,局部变量没有默认初始化值(2)作用范围:定义开始到定义它的代码块结束(3)同一范围内,不允许2个局部变量命名冲突参数传递时,简单类型进行值转递(参数进行传递时都会先去栈中生成一个副本的,使用结束后释放)自动类型提升:bytea=1;byteb=2;a=a+b;//编译出错自动类型提升成inta+=b;//自加没有自动类型提升问题类型自动提升规则:a和b作某种运算a和b中有double,结果就是doublea和b中有float,结果就是floata和b中有long,结果就是long除此之外,结果都是int把高字节转成低字节,需要作强制类型转换.bytec=(byte)a+b;移位运算符:效率最高有符号右移,补符号位移负数位,则将该数值加32后再进行移位数值的2进制是按照补码保存的右移后高位都补0逻辑运算符:&/|也可以作为逻辑运算符&&先判断前面一个条件,如果为假,则不用计算后一个条件||先判断前面一个条件,如果为真,则不用计算后一个条件+运算符:两个操作的对象是数值时,是加法如果有一个是字符串时,则是字符串的连接流程控制语句:同CoreC++switch中的变量类型只能是byte、short、int、char四种类型数组:声明数组:数组能以下列形式声明:类型[]array;类型array[];注:JAVA中推荐用:类型[]array;一个数组是一个对象声明一个数组没有创建一个对象声明时不用指定长度创建数组:创建基本数据类型数组:int[]i=newint[2];创建引用数据类型数组:Student[]s=newStudent[100];数组创建后其中的元素有初始值类型黙认值byte0short0int0long0lfloat0.0fdouble0.0dchar\u0000booleanfalsereferencetypesnull注:创建时一定要指定长度int[]i2=newint[];//error初始化数组:声明、创建、初始化分开:int[]i;//定义数组i=newint[2];//分配空间i[0]=0;//初始化i[1]=1;声明、创建、初始化在同一时间:int[]i={0,1};//显示初始化{}中有几个值,则数组长度为几Student[]s={newStudent(),newStudent()};注:int[]i=newint[]{1,2,3};//后面[]中不可以写数值int[]i1=newint[3]{1,2,3};//error二维数组:(其实是一个一维数组,它的每一个元素又是一个一维数组)int[][]i1=newint[2][3];int[][]i4={{1,1,1},{2,2,2},{3,3,3}};int[][]i3=newint[][3];//不允许高维没分配空间而先给低维分配空间int[][]i2=newint[2][];i2[0]=newint[2];i2[1]=newint[3];数组长度:数组的属性length数组长度一旦确定,不可改变int[]i=newint[5];则i.length=5数组拷贝:系统类System提供的staticvoidarraycopy(Objectsrc,intsrcPos,Objectdest,intdestPos,intlength)src:源数组srcPos:从源数组哪个位置开始拷贝(位置指的是元素的下标)dest:目标数组destPos:拷贝的元素放到目标数组的起始位置length:拷贝多少个数组排序:自己实现一个排序方法来进行排序或者调用java.util.Arrays.sort(Objecto)类和对象:类:主观抽象,是对象的模板,可以实例化对象习惯上类的定义格式:packagexxx;importxxx;publicclassXxxx{属性······;构造器······;方法······;}定义属性:实例变量格式:[修饰符]类型变量名[=?]实例变量定义在类中但在任何方法之外。实例变量有默认值:各种各样的0。(同数组)实例变量的作用域至少在本类内部,受访问控制符的限制。在重合作用域,实例变量和局部变量允许有命名冲突,“局部优先”。定义方法:格式:[修饰符]返回类型方法名(参数列表)[throws异常]{······}java中所有参数都是值传递。当没有值返回时,返回类型必须被定义为void。返回类型必须与方法名相邻,其他修饰符可以调换位置。构造器:在创建对象的过程中调用的方法。构造器没有返回类型。构造器的名字与类名相同。格式为:[修饰符]类名(参数列表){},修饰符可以是private、protected、default、private在一个对象的生成周期中构造器只用一次,由系统自动调用,不允许手工调用。程序员没有提供一个构造器,系统会自动提供一个无参的构造器。获得对象的方式:通过new(在堆空间中申请分配空间),new类名(),可以通过这种形式或的一个对象,这时的对象是无法使用,必须把他的地址存放进一个对象变量才能够使用。例如:Carc=newCar();注意:最好在写类时提供一个无参的构造器。this关键字:this是个隐式参数,代表当前对象;publieclassStudent{privateStringname;publicvoidsetName(Stringname){this.name=name;//this.name为当前对象的成员变量}}如果