2010-7-23猛哥推荐技术网站CSDNIBM中国J道javaBBSJava语言的好处1、加速开发速度2、一次编写到处运行(跨平台,windows下的ext在linux,unix下不可执行)3、简化开发,降低开发难度4、对外没有指针(JVM是用C++实现的)Java属于复合型:先编译后解释。JDK的环境变量配置Windows下在我的电脑☞系统属性☞高级☞环境变量配置JAVA_HOME中配置的是java的安装目录Classpath中配置的是class文件的目录,一般配置,既可以配置jdk中的jar包进去(JDBC会自动配置),类库的路径(lib),”.”一般代表当前目录Path中配置的是可执行命令的路径(bin),path在windows系统变量中是有的,配path时千万不要将原来的内容删除,在最前面配置。linux下Java环境的配置Linux:/etc/.profile这是所有用户的全局文件主目录下的.bash_profile这是当前用户的全局文件到当前用户的目录下,用vi.bash_profile在文件的最后加上以下内容(文件非空)exportJAVA_HOME=某个目录(bin和lib的上层);expertPATH=某个目录/bin:$PATH;其中PATH绝对不能错,否则系统会崩溃exportCLASSPATH=.:某个目录/lib;保存退出。二、第一个程序体验步骤:1、vixx.java2、编辑xx.java文件3、javac编译生成xx.class文件4、如编译通过,用java包名.类名运行packageday01;publicclassFirst{publicstaticvoidmain(String[]args){Stringname=wang;intage=25;System.out.println(mynameis:+name);System.out.println(myageis:+age);}}编译运行:编译:javac-d.First.java//-d代表生成目录,.代表当前目录,把目录生成到当前。即,自动生成day01包javacFirst.java//编译在当前目录中运行:javaday01.First(xx.java是java源文件,xx.class是字节码文件)类加载类的加载过程类加载器(classsloader)加载字节码到内存,JVM内存数据区将对象状态放置在堆区,各线程使用的变量放在栈区,类的特征放在方法区。然后进行字节码验证(Bytecodeverifer),再执行。字节码验证:验证代码是否符合JVM规范;是否破坏系统完整性;是否堆栈溢出;参数类型是否正确;类型转换是否正确;什么时候类加载:第一次需要使用类信息时加载。类加载的原则:延迟加载,能不加载就不加载。触发类加载的几种情况:(1)调用静态方法时会加载静态方法真正所在的类。例:通过子类调用父类的静态方法时,只会加载父类而不会加载子类。(2)调用静态初始化代码块时要加载类。(3)加载子类时必定会先加载父类。(4)构造对象的时候会加载。(5)调用静态属性时会加载类。注:如果静态属性有final修饰时,则不会加载。new申请JVM通过gc(garbagecollection)垃圾回收机制完成内存释放.程序员可以通过java.lang.System.gc()/java.lang.Runtime.gc(),建议JVM释放内存(只是建议权).Window和Linux下的JVM不同(windows和linux的机器指令不同),但相同的class文件在两中不同的JVM下运行的结果相同。JavaJDK基本包Jvav.langjava核心包(重点)Java.awt/javax.swing/java.awt.eventGUI图形用户接口Java.applet小应用程序Java.io输入输出Java.net网络Java.util工具包(重点)重要的非JDK包Java.sql/javax.sql数据库操作(重点)2010-7-24Comments:注释对程序本身没有作用,注释是写给程序员看的threetypesofcomments//commentsononeline单行注释从//开始到行结束/*Commentsononeormorelines*/多行注释从/*开始到*/之间的是注释部分/**documentingcomments*/(recommended)文档化注释,与javadoc结合,生成API文档标识符——给类、方法或变量起名称,汉字也可以做标识符在写代码是要注意中英文切换,注意程序中的+-“(=都必须在英文状态下输入编程规范:1、类名或接口名的每个单词的首字母大写(如TestString)2、变量名或方法名第一个单词首母小写,其他单词首字母大写(如userName)3、常量的所有字母都大写,不同单词之间用”_”隔开(如MAX_NUM)4、包名的所有字母小写,不同单词之间用“.”隔开(如com.tarena.chiao.util)关键字:abstract抽象类continue结束本次循环fornew申请内存assert断言defaultswitch中gotopackageboolean布尔型double双精度浮点型ifprotectbreak跳转dodowhileimplement继承publicbyte整形elseif/esleimport导入privatecaseswitchenum枚举instanceof判断对象类型returnchar字符型extends继承intshortcatch捕获异常final最终interfacestatic静态class类finally异常处理longstrictfpconst保留关键字float单精度浮点型native本地super父类switchsynchronization同步thisthrowthrowstransient对象序列化tryvoidvolatile同步变量whileconst和goto在java中留而不用,是保留的关键字。true、false和null是保留字,但不是关键字,但还是不能做标识符。数据类型:基本类型为一个值,引用类型包括一个引用和一个对象Java中的变量必须先声明类型,然后才能使用。第一次赋值叫变量的初始化。变量不能在英文双引号中。Java变量类型:基本类型:(内存存值)boolean、char、byte、short、int、long、float、double类型比特数(bit)字节数(byte)取值范围说明byte81-27~27-1(127)-2(比特数-1)计算负数的取值范围;2(比特数-1)-1计算正数的取值范围。short162-215~215-1int324-231~231-1long648-263~263-1char1620~216-1(65535)float324double648引用类型:(引用地址+对象)所有类、接口、数组、枚举、标注char是16位的Unicode字符,可以同时具备字符和整数的特性。Java默认的整型类型是int型,默认的浮点型是double型。boolean型值为true或false,默认为false。不能用1来代表true,用0表示false大于号不能用于比较String,String的相等用equals()判断。数字默认位int类型,两个byte类型的数运算,要先转化位int类型,结果为int类型1、常数在数据类型范围内可以化位任何整形数据2、长度小的数据类型可自动转换位长度大的数据类型(也有可能丢失精度)3、长度大的转换位长度小的必须经过强制类型转换小数默认类型位double类型,小数都是近似值,二进制无法精确表示0.1由于由科学计数法所以float和double没有表示范围,只有精度int和long都可以自动转换位float或double型byteb1=(byte)128;//强制类型转换,只是截取了后8位,前面的全部舍弃。面向对象的概念对象的核心思想是:一切都是对象everythingisobject(客观世界的一切事物)。特征:属性;行为:方法面向对象编程:1.看到的所有学生☞对象2.分类☞学生类3.分析特征☞属性(有选择)定义属性类型和变量名4.分析行为定义方法名/返回类型(方法名前)/参数列表(方法名后()中)返回类型用于传出,参数列表用于传入。没有返回void,没有参数传入,留下()publicclassStudent{Stringname;intidintage;//属性//方法publicStringeat(Stringcn){System.out.println(cn+很好吃);returnok;}publicstaticvoidmain(String[]args){Students=newStudent();//new为构造器,为newStudent()申请内存地址,s引用,//newStudent()为对象,Student为类s.id=1;s.name=zhangsan;//创建对象Stringstr=s.eat(烩面);//行为执行,“烩面”是传入,str是传出,//eat方法中的所有代码都执行完毕后才能继续执行System.out.println(str);}}2010-7-26内存的分类1、栈————基本类型,地址,后进先出。引用变量入栈(给以在堆空间的内容的首地址)2、堆----——对象,基本类型,地址3、寄存器——零食变量4、代码段——方法的代码5、池————常驻内存的数据注意:程序一般都会先找栈,再找堆堆是由垃圾回收来负责的,堆的优势是可以动态地分配内存大小,生存期也不必事先告诉编译器,因为它是在运行时动态分配内存的,Java的垃圾收集器会自动收走这些不再使用的数据。但缺点是,由于要在运行时动态分配内存,存取速度较慢。栈的优势是,存取速度比堆要快,仅次于寄存器,栈数据可以共享。但缺点是,存在栈中的数据大小与生存期必须是确定的,缺乏灵活性。栈中主要存放一些基本类型的变量(,int,short,long,byte,float,double,boolean,char)和对象句柄。栈有一个很重要的特殊性,就是存在栈中的数据可以共享。JVM运行时,将内存分为两部分,一部分是栈,一部分是堆。栈中存放的是方法调用过程中的局部变量或引用,堆中存放的是创建时的对象。而设计java字符串对象内存实现的时候,在堆中又开辟了一块很小的内存,称之为字符串常量池,专门用来存放特定的字符串对象。publicclassEmp{{Stringid;Stringname;doublesalary;publicvoidpay();publicvoidaddPay();publicstaticvoidmain(String[]args{Empe=newEmp();e.id=”007”;e.name=”yhw”;e.salary=3000;e.pay();}}Empe=newEmp();在内存中发生的动作将e进栈,在堆里申请一块内存Emp,Emp中,放id,name的地址,sal的值,当给id,007yhwe栈Empidnamesalary堆name赋值的时候,在堆里为id,和name分配内存,将他们的值放进去package语句必须放在程序的第一行,以分号结束。编译:javac–d.文件名.java运行:java包名.文件名import语句可以导入不同包的class文件import包名.类名import包名.*//*代表所有的.class文件,但不包括子目录。Jvm在导包时会自动导入java.lang中的所有类,所以不需要导java.lang包。基本的控制台输入可以使用java.util包下的Scanner类Scannerin=newScanner(System.in);Stringa=in.next();//读取一个字符串Stringb=in.nextLine();//读取一行intc=in.nextInt();//