华为java培训讲义
- 格式:doc
- 大小:183.00 KB
- 文档页数:49
华为内部程序设计培训资料,搞程序设计的利器!目录1排版211-1:程序块要采用缩进风格编写,缩进的空格数为4个。
211-2:相对独立的程序块之间、变量说明之后必须加空行。
211-3:较长的语句(>80字符)要分成多行书写,长表达式要在低优先级操作符处划2 11-4:循环、判断等语句中若有较长的表达式或语句,则要进行适应的划分,长表达式要4 11-5:若函数或过程中的参数较长,则要进行适当的划分。
411-6:不允许把多个短语句写在一行中,即一行只写一条语句。
411-7:if、for、do、while、case、switch、default 511-8:对齐只使用空格键,不使用TAB键。
511-9:函数或过程的开始、结构的定义及循环、判断等语句中的代码都要采用缩进风格,5 11-10:程序块的分界符(如C/C++语言的大括号‘{’和‘}’)应各独占一行511-11:在两个以上的关键字、变量、常量进行对等操作时,它们之间的操作符之前、之后6?1-1:一行程序以小于80字符为宜,不要写得过长。
7注释812-1:一般情况下,源程序有效注释量必须在20%以上。
812-2:说明性文件(如头文件.h文件、.inc文件、.def文件、编译说明文件812-3:源文件头部应进行注释,列出:版权说明、版本号、生成日期、作者、模块目的/ 8 12-4:函数头部应进行注释,列出:函数的目的/功能、输入参数、输出参数、返回值、9 12-5:边写代码边注释,修改代码同时修改相应的注释,以保证注释与代码的一致性。
10 12-6:注释的内容要清楚、明了,含义准确,防止注释二义性。
1012-7:避免在注释中使用缩写,特别是非常用缩写。
1012-8:注释应与其描述的代码相近,对代码的注释应放在其上方或右方(对单条语句的10 12-9:对于所有有物理含义的变量、常量,如果其命名不是充分自注释的,在声明时都必10 12-10:数据结构声明(包括数组、结构、类、枚举等),如果其命名不是充分自注释1112-11:全局变量要有较详细的注释,包括对其功能、取值范围、哪些函数或过程存取它11 12-12:注释与所描述内容进行同样的缩排。
华为java培训讲义第一天配置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:.export JAVA_HOME CLASSPATH PATH (将指定的环境变量声明为全局的)windows系统:右击我的电脑-->属性-->高级-->环境变量Java的运行过程:编译:生成可执行文件,如C++中利用g++生成a.out,效率高,但不跨平台解释:解释器把源文件逐行解释,跨平台但效率不高在java中:先编译后解释,把.java文件编译成.class字节码文件Java源代码文件(.java文件)--->Java编译器(javac)--->Java字节码文件(.class文件,平台无关的)--->Java解释器(java),执行Java字节码Java的垃圾回收:由一个后台线程gc进行垃圾回收虚拟机判定内存不够的时候会中断代码的运行,这时候gc才进行垃圾回收缺点:不能够精确的去回收内存ng.System.gc(); 建议回收内存,但系统不一定回应,他会先去看内存是否够用,够用则不予理睬,不够用才会去进行垃圾回收内存中什么算是垃圾:不再被引用的对象(局部变量,没有指针指向的)java的安全性:沙箱机制:只能做沙箱允许的操作通过下面环节,实现安全加载有用的类文件,不需要的不加载校验字节码,查看允许的操作查看代码和虚拟机的特性是否相符查看代码是否有破坏性查看是否有违规操作,如越界查看类型是否匹配,类型转换是否能正确执行源程序:package mypack; //相当于一个目录public class HelloWorld{public static void main(String[] args){System.out.println(“Hello World”);}}注:1、文件名必须和public修饰的类名一致,以.java作为文件后缀,如果定义的类不是public的,则文件名与类名可以不同。
2、一个.java文件中可以有多个class,但是只有一个public修饰的类。
3、java源代码文件编译后,一个类对应生成一个.class文件4、一个java应用程序应该包含一个main()方法,而且其签名是固定的,它是应用程序的入口方法,可以定义在任意一个类中,不一定是public修饰的类编译:javac -d . HelloWorld.java含有包的类,在编译的时候最好用上面的格式,-d指的是让该类生成的时候按照包结构去生成," . "指的是在当前路径下生成如果不用上面的格式,也可以用javac HelloWorld.java,但是需要注意的是包结构就要由自己去建立,然后将生成的.class文件放到该目录下执行:java mypack.HelloWorld将字节码文件交给Java虚拟机去解释执行需要注意的事,必须使用包名.类名去解释执行包(package):把源文件放在目录下由于工程的需要,将不同的源文件放在不同的目录下,从而引入了包。
包可以看作就是一个存放java源文件的目录。
在源码中声明一个包名:package p;(只能放在第一行,且最多只能是一行)如果指定多层包,那么在包名之间我们可以用.作为分隔符:package p1.p2.p3.p4;用“javac HelloWorld.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) 整型byte 1B 8位-128到127short 2B 16位-2^15到(2^15)-1int 4B 32位-2^31到(2^31)-1long 8B 64位-2^63到(2^63)-12) 浮点类型float 4B 32位double 8B 64位3) 字符类型char 2B 16位4) 布尔型1Bboolean false/true注:1、Java中的自动类型提升问题。
1)、正向过程:从低字节到高字节可以自动转换。
byte->short->int->long->float->double2)、逆向过程:从高字节到低字节用强制类型转换。
例:int a = (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个局部变量命名冲突参数传递时,简单类型进行值转递(参数进行传递时都会先去栈中生成一个副本的,使用结束后释放)自动类型提升:byte a = 1;byte b = 2;a = a+b; //编译出错自动类型提升成inta += b; //自加没有自动类型提升问题类型自动提升规则:a和b作某种运算a和b中有double,结果就是doublea和b中有float,结果就是floata和b中有long,结果就是long除此之外,结果都是int把高字节转成低字节,需要作强制类型转换. byte c=(byte)a+b;移位运算符:效率最高>> 有符号右移,补符号位移负数位,则将该数值加32后再进行移位数值的2进制是按照补码保存的>>> 右移后高位都补0逻辑运算符:&/|也可以作为逻辑运算符&& 先判断前面一个条件,如果为假,则不用计算后一个条件|| 先判断前面一个条件,如果为真,则不用计算后一个条件" + "运算符:两个操作的对象是数值时,是加法如果有一个是字符串时,则是字符串的连接流程控制语句:同Core C++switch中的变量类型只能是byte、short、int、char四种类型以及enum类型switch(exp) exp 可以是整形表达式或者enum类型数据数组:声明数组:数组能以下列形式声明:类型[] array;类型array[];注:JAVA中推荐用:类型[] array;一个数组是一个对象声明一个数组没有创建一个对象声明时不用指定长度创建数组:创建基本数据类型数组:int[] i = new int[2];创建引用数据类型数组:Student[] s = new Student[100];数组创建后其中的元素有初始值类型黙认值byte 0short 0int 0long 0lfloat 0.0fdouble 0.0dchar \u0000boolean falsereference types null注:创建时一定要指定长度int[] i2=new int[]; //error初始化数组:声明、创建、初始化分开:int[] i; //定义数组i = new int[2]; //分配空间i[0] = 0; //初始化i[1] = 1;声明、创建、初始化在同一时间:int[] i = {0,1}; //显示初始化{}中有几个值,则数组长度为几Student[] s = {new Student(),new Student()};注:int[] i=new int[]{1,2,3}; //后面[]中不可以写数值int[] i1=new int[3]{1,2,3}; //error二维数组:(其实是一个一维数组,它的每一个元素又是一个一维数组)int[][] i1 = new int[2][3];int[][] i4 = {{1,1,1},{2,2,2},{3,3,3}};int[][] i3 = new int[][3]; //不允许高维没分配空间而先给低维分配空间int[][] i2 = new int[2][];i2[0] = new int[2];i2[1] = new int[3];数组长度:数组的属性length数组长度一旦确定,不可改变int[] i = new int[5]; 则i.length= 5数组拷贝:系统类System提供的static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length)src:源数组srcPos:从源数组哪个位置开始拷贝(位置指的是元素的下标)dest:目标数组destPos:拷贝的元素放到目标数组的起始位置length:拷贝多少个数组排序:自己实现一个排序方法来进行排序或者调用java.util.Arrays.sort(Object o)华为培训讲义第三天类和对象:类:主观抽象,是对象的模板,可以实例化对象----具有相同属性和行为的对象的集合。