0002 Java语言基础组成1
来源:互联网 发布:手机淘宝分类链接获取 编辑:程序博客网 时间:2024/06/05 14:20
Java语言基础组成:
(1)关键字:被Java语言赋予了特殊含义的单词。关键字中所有的字母都为小写。
(2)标识符:在程序中自定义的一些名称。
由
26个英文字母大小写,
数字:0-9
符号:_ $
组成。
定义合法的标识符的规则:
(A)数字不可以开头。
(B)不可以使用关键字。
Java语言严格区分大小写。
注意:在起名字的时候,为了提高阅读性,要尽量有意义。
main也是标识符,但不是关键字。JVM识别main函数,包括main函数的格式。
(3)注释:用于注解说明解释程序的文字。还可以调试程序。
提高了代码的阅读性。
Java语言中的注释格式:
单行注释: //注释文字
多行注释: /*注释文字* /
文档注释: /**注释文字* /
对于单行和多行注释,被注释的文字,不会被JVM解释执行。
因为编译器不会对注释部分进行编译,不论注释的是文字或者程序代码,都不会包含在.class字节码文件中。
该两种注释方式,也是很多高级编程语言都有的注释方式。
单行注释可以嵌套单行注释。
单行注释可以嵌套多行注释。
多行注释中可以嵌套单行注释。
多行注释中不可以嵌套多行注释。
对于文档注释,是Java特有的注释,其中注释内容可以被JDK提高的工具javadoc所解析,
生成一套以网页文件形式体现的该程序的说明文档。
注释是一个程序员必须要具有的良好的编程习惯。
初学者编写程序可以养成习惯,先写注释再写代码。
将自己的思想通过注释先整理出来,再用代码去体现。
因为,代码仅仅是思想的一种体现形式而已。
建议:平时编程就要养成写注释的习惯。没有注释,代码的阅读性很差。
(4)常量和变量
为什么要对常量进行分类??
目的:方便运算。
整数:有四种表现形式。二进制,八进制(以0开头),十进制,十六进制(以0x开头)。
小数:
布尔型(boolean)常量:只有两个数值:true和false 。
字符常量:将一个数字,字母或者符号用单引号('')标识。
字符串常量:将一个或者多个字符用双引号("")标识。
null常量:只有一个数值,就是null 。
补充:进制的转换。
结论:
(1)八进制数:其实就是3个二进制位对应1个八进制位。
(2)十六进制数:其实就是4个二进制位对应1个十六进制位。
(3)二进制转换为十进制:按权展开多项式,乘以2的幂数。
(4)十进制转换为二进制:除以2取余数。
负数的二进制表现形式:对应的正数二进制取反加1
例如:-6=(1111-1010)
+6=(0000-0110)
负数的二进制位的最高位为1。负数的补码是正数的反码,再加1。
正数的二进制位的最高位为0。正数的补码是其本身。
变量的概念:
内存中的一个存储区域。
该区域有自己的名称(变量名)和类型(数据类型)。
该区域的数据可以在同一类型范围内不断变化。
为什么要定义变量?
用来不断的存放同一类型的常量,并可以重复使用。
什么时候使用变量??
当用数据不确定的时候,需要使用变量。
使用变量注意:
变量的作用范围(一对{}之间有效)
初始化值。
定义变量的格式:
数据类型 变量名 = 初始化值
注:格式是固定的,记住格式,以不变应万变。
理解:变量就如同数学中的未知数。
Java语言是强类型语言,对于每一种数据都定义了明确的具体数据类型,
在内存中分配了不同大小的内存空间。
数据类型:基本数据类型 和 引用数据类型 。
基本数据类型:数值型 、字符型(char) 、布尔型(boolean) 。
数值型:整数类型(byte,short,int,long)、浮点类型(float,double)。
引用数据类型:类(class)、接口(interface)、数组([]) 。
整数默认:int
小数默认:double
byte:1个字节(-128 ~ 127)
short:2个字节(-32768 ~ 32767)
int:4个字节( -2147483648 ~ 2147483647)
long:8个字节(-9223372036854775808 ~ 9223372036854775807),结尾加小写字母l 。
例如:long l = 123l;
float:4个字节,结尾加小写字母f 。例如:float f = 2.3f;
double:8个字节
char:2个字节(0 ~ 65535)。char在Java中是16位的,因为Java用的是Unicode。
boolean:ture 、false。
变量必须初始化值。
变量有自己作用的范围。(变量的作用域)
类型提升强制转换:
自动类型转换(也叫“隐式类型转换”)
强制类型转换(也叫“显式类型转换”)
类型转换的原理:
什么时候要用强制类型转换??
表达式的数据类型自动提升
所有的byte型、short型和char型的值将被提升到int型。
如果一个操作数是long型,计算结果就是long型。
如果一个操作数是float型,计算结果就是float型。
如果一个操作数是double型,计算结果就是double型。
float和int运算,结果是float类型。
boolean类型不能进行算术运行。因为算术运算符的两边要求是数值型。而boolean不是数值型。
char类型在内存中也是数值。JVM内置了一张unicode国际标准码表。支持世界各国文字,当然也包括了中文和英文。
当表达式中有char类型的数据和数值型数据进行算术运算的时候,是先找字符对应的数值,然后参与运算。
总之,无论是数值型,字符型,还是图片数据,在内存中都是二进制数据。
byte b = 4; //4是int类型。编译器在编译时,做了这样一个动作。运算符的左边是byte类型,只能存储一个字节的数据,取值范围在128~127 。编译器去检查运算符右边,这个数值是否在这个范围内,如果在这个范围内的话,那么就做强制转换,只保留int类型的最后一个字节,赋值给byte 。
//编译器自动检查右边数据的范围,只要在byte的范围内,将int强制转换为byte 。
b = 3 + 7;
byte b1 = 3;
byte b2 = 7;
b = b1 + b2;//这里编译器要报可能损失精读,因为运算符的右边是变量,编译器无法确定其值的范围是否在byte允许的范围内,所以报错。
int x;
x = b1 + b2;//这里是可以的,原则:只要能装的下就行。
int x1 = Integer.MAX_VALUE;
int x2 = 2;
x = x1 + x2;//这里会发生溢出,两个正数相加,结果为一个负数。因为int 是整数的默认类型,所以,这里编译器没有报错。而是自动保留低32位,将多出的高位去掉。
分析:
System.out.println('a');
System.out.println('a'+1);
(5)运算符
算术运算符 +-*/(取整)%(取余:模运算)结果的正负取决于被模数(左边的数)+(连接)任何数据类型只要和字符串进行+运算,结果都是字符串连接。连接成了一个更大的字符串。
++(自增:在原有数据的基础上加1,再赋给原有数据)
例如:
int i = 3;
i = i++;
i的结果是??结果:i = 3
分步:
temp = i;
i = i+1; //i = 4
i = temp; //i = 3
--(自减)
赋值运算符 =+=-=*= /= %=
例如:int a,b,c;
int a = b = c = 4;
int a = 4;
a += 2;//a = a + 2;
一道面试题:
short a = 3;
s += 4;//编译正常通过,并且可以运行。底层进行自动转换,将s+4的结果(int),先检查是否在short的范围内,如果在的其范围内,将int类型自动转换为short类型。
s = s + 4;//编译时报错,因为运算符右边有变量,编译器无法确定其值的范围是否在short的范围内。底层不进行转换。
s + 4结果是int类型,这里做了自动类型提升。int不能直接赋值给short,因为装不下,会损失数据精度。
问:上面两个语句有什么区别??
其实,s += 4;//与s = (short)(s + 4);才是等价的。
前者自动做强转;后者不自动强转,只能显示的强转。
自动转换,是赋值运算所具有的特点。
比较运算符:运算完的结果必须是true或者false 。
== !=>>=< <=
instanceof :检查是否是类的对象 。
例如:“hello” instanceof String
结果:true
注意:比较运算符“==” 不要写成赋值运算符“=”
逻辑运算符:& | ^ !&&||
逻辑运算符有什么用呢??
用于连接两个BOOLEAN类型的表达式。
&:”与“。该运算符的特点:
true & true = true
true & false = false
false & true = false
false & false = false
运算规律:&运算符的两边只要有一个是false,结果肯定是false 。
只有两边都为true,结果才是true。
|:”或“。运算特点。
true | true = true
true | false = true
false | true = true
false | false = false
运算规律:|运算符两边只要有一个是true,结果肯定是true。
只有两边都是false,结果才是false。
^:”异或“。和或有点不一样。
true ^ true = false
true ^ false = true
false ^ true = true
false ^ false = false
运算规律:^运算符的两边的结果相同,结果是false。
两边的结果不同,结果是true.
!:”非“。运算特点。
!true = false
!false = true
面试题:
&&:和&的结果是一样的。但是运算过程有一点小区别。
&:无论左边的运算结果是什么。右边都参与运算。
&&:当左边为false时,右边不参与运算。
||:和|的结果是一样的。但是运算过程有一点小区别。
|:无论左边的运算结果是什么。右边都参与运算。
||:当左边为true时,右边不参与运算。
位运算符:
<<(左移):相当于乘以2的倍数。
<< :可以完成2的次幂运算。
例如:3 << 2 = 3 * 2(2) = 12
>>(右移):相当于除以2的倍数。
右移几位其实就是该数据除以2的几次幂。
>> :对于高位出现的空位,原来的高位是什么就用什么补这个空位。
例如:6 >> 1 = 6 / 2(1) = 3
6 >> 2 = 6 / 2(2) = 1
-6 >> 1 = -6 / 2(1) = -3
-6 >> 2 = -6 / 2(2) = -1
注:移N位,就是对乘以或者除以2的N次幂。
>>>(无符号右移) :数据进行右移时,高位出现的空位,无论原高位是什么,空位都用0补。
&(与):这是&和&&的第二个区别,就是说&还可以进行位运算。
举例:6 & 3 = 2
0000-0000 0000-0000 0000-0000 0000-0110
& 0000-0000 0000-0000 0000-0000 0000-0011
------------------------------------------------------------------
0000-0000 0000-0000 0000-0000 0000-0010
&(与运算)的小特点:想保留哪些位,就可以与1进行&运算。
|(或)
举例:6 | 3 = 7
0000-0000 0000-0000 0000-0000 0000-0110
| 0000-0000 0000-0000 0000-0000 0000-0011
--------------------------------------------------------------------------
0000-0000 0000-0000 0000-0000 0000-0111
|(与运算)的小特点:两个二进制位串进行|或运算,凡是有1的位置全部保留。
1是有效位,或的特点在于可以将有效位保留。
例如:
110
| 011
--------
111
^(异或) : 相同为0,不同为1。
一个数异或同一个数两次,结果还是该数本身。
举例:6 ^ 3 = 5
6 ^ 3 ^ 3 = 6
110
^ 011
---------
101
^ 011
---------
110
~(反码):按位取反。
~ 0000-0000 0000-0000 0000-0000 0000-0110
--------------------------------------------------------------------------
1111-1111 1111-1111 1111-1111 1111-1001
6的反码 + 1 = -6的补码
所以,6的反码 = -7的补码
两者在内存中的表现形式是一致的。
位运算:是直接对二进制位进行运算。
位运算练习:
(1)用最高效的方法计算2*8?
2 << 4 = 16
(2)对两个整数变量的值进行互换(不需要第三方变量)?
例如:a = 3, b = 5;
//借助第三方变量实现两个变量的互换。该种方式在实际开发中最常使用,建议使用该方式。
实际开发中使用,因为其阅读性最好。执行的效率也不会比位运算低多少,我们折中一下,所以,选择该种方式、
int c;
c = a;
a = b;
b = c;
//该种方式不建议使用。如果两个整数的数值过大,会超出int范围,会强制转换,数据会损失精度。
a = a + b; //a = 3+5 ; a = 8;
b = a - b; //b = 8 - 5;b = 3;
a = a - b; //a = 8 - 3;a = 5;
//通过位运算。规律:一个数异或另一个数两次,结果还是这个数。该种方式在实际开发中,不要使用,因为其阅读性差。
面试的时候用。
a = a ^ b;
b = a ^ b;
a = a ^ b;
格式:
(条件表达式) ?表达式1 :表达式2;
如果条件为true,运算后的结果是表达式1;
如果条件为flase,运算后的结果是表达式2;
示例:获取两个数中的大数。
int x = 3,y = 4,z;
z = (x>y) ? x : y;//z变量存储的就是两个数的大数。
条件表达式:其结果只能是true或者false 。
获取三个数中的大数。
int o,p,q;
int temp = o>p ? o : p;
int max2 = temp>q ? temp : q;
(1)关键字:被Java语言赋予了特殊含义的单词。关键字中所有的字母都为小写。
(2)标识符:在程序中自定义的一些名称。
由
26个英文字母大小写,
数字:0-9
符号:_ $
组成。
定义合法的标识符的规则:
(A)数字不可以开头。
(B)不可以使用关键字。
Java语言严格区分大小写。
注意:在起名字的时候,为了提高阅读性,要尽量有意义。
main也是标识符,但不是关键字。JVM识别main函数,包括main函数的格式。
(3)注释:用于注解说明解释程序的文字。还可以调试程序。
提高了代码的阅读性。
Java语言中的注释格式:
单行注释: //注释文字
多行注释: /*注释文字* /
文档注释: /**注释文字* /
对于单行和多行注释,被注释的文字,不会被JVM解释执行。
因为编译器不会对注释部分进行编译,不论注释的是文字或者程序代码,都不会包含在.class字节码文件中。
该两种注释方式,也是很多高级编程语言都有的注释方式。
单行注释可以嵌套单行注释。
单行注释可以嵌套多行注释。
多行注释中可以嵌套单行注释。
多行注释中不可以嵌套多行注释。
对于文档注释,是Java特有的注释,其中注释内容可以被JDK提高的工具javadoc所解析,
生成一套以网页文件形式体现的该程序的说明文档。
注释是一个程序员必须要具有的良好的编程习惯。
初学者编写程序可以养成习惯,先写注释再写代码。
将自己的思想通过注释先整理出来,再用代码去体现。
因为,代码仅仅是思想的一种体现形式而已。
建议:平时编程就要养成写注释的习惯。没有注释,代码的阅读性很差。
(4)常量和变量
为什么要对常量进行分类??
目的:方便运算。
整数:有四种表现形式。二进制,八进制(以0开头),十进制,十六进制(以0x开头)。
小数:
布尔型(boolean)常量:只有两个数值:true和false 。
字符常量:将一个数字,字母或者符号用单引号('')标识。
字符串常量:将一个或者多个字符用双引号("")标识。
null常量:只有一个数值,就是null 。
补充:进制的转换。
结论:
(1)八进制数:其实就是3个二进制位对应1个八进制位。
(2)十六进制数:其实就是4个二进制位对应1个十六进制位。
(3)二进制转换为十进制:按权展开多项式,乘以2的幂数。
(4)十进制转换为二进制:除以2取余数。
负数的二进制表现形式:对应的正数二进制取反加1
例如:-6=(1111-1010)
+6=(0000-0110)
~0000-0110
-----------------------
1111-1001+0000-0001
-----------------------
1111-1010负数的二进制位的最高位为1。负数的补码是正数的反码,再加1。
正数的二进制位的最高位为0。正数的补码是其本身。
变量的概念:
内存中的一个存储区域。
该区域有自己的名称(变量名)和类型(数据类型)。
该区域的数据可以在同一类型范围内不断变化。
为什么要定义变量?
用来不断的存放同一类型的常量,并可以重复使用。
什么时候使用变量??
当用数据不确定的时候,需要使用变量。
使用变量注意:
变量的作用范围(一对{}之间有效)
初始化值。
定义变量的格式:
数据类型 变量名 = 初始化值
注:格式是固定的,记住格式,以不变应万变。
理解:变量就如同数学中的未知数。
Java语言是强类型语言,对于每一种数据都定义了明确的具体数据类型,
在内存中分配了不同大小的内存空间。
数据类型:基本数据类型 和 引用数据类型 。
基本数据类型:数值型 、字符型(char) 、布尔型(boolean) 。
数值型:整数类型(byte,short,int,long)、浮点类型(float,double)。
引用数据类型:类(class)、接口(interface)、数组([]) 。
整数默认:int
小数默认:double
byte:1个字节(-128 ~ 127)
short:2个字节(-32768 ~ 32767)
int:4个字节( -2147483648 ~ 2147483647)
long:8个字节(-9223372036854775808 ~ 9223372036854775807),结尾加小写字母l 。
例如:long l = 123l;
float:4个字节,结尾加小写字母f 。例如:float f = 2.3f;
double:8个字节
char:2个字节(0 ~ 65535)。char在Java中是16位的,因为Java用的是Unicode。
boolean:ture 、false。
变量必须初始化值。
变量有自己作用的范围。(变量的作用域)
类型提升强制转换:
自动类型转换(也叫“隐式类型转换”)
强制类型转换(也叫“显式类型转换”)
类型转换的原理:
什么时候要用强制类型转换??
表达式的数据类型自动提升
所有的byte型、short型和char型的值将被提升到int型。
如果一个操作数是long型,计算结果就是long型。
如果一个操作数是float型,计算结果就是float型。
如果一个操作数是double型,计算结果就是double型。
float和int运算,结果是float类型。
boolean类型不能进行算术运行。因为算术运算符的两边要求是数值型。而boolean不是数值型。
char类型在内存中也是数值。JVM内置了一张unicode国际标准码表。支持世界各国文字,当然也包括了中文和英文。
当表达式中有char类型的数据和数值型数据进行算术运算的时候,是先找字符对应的数值,然后参与运算。
总之,无论是数值型,字符型,还是图片数据,在内存中都是二进制数据。
byte b = 4; //4是int类型。编译器在编译时,做了这样一个动作。运算符的左边是byte类型,只能存储一个字节的数据,取值范围在128~127 。编译器去检查运算符右边,这个数值是否在这个范围内,如果在这个范围内的话,那么就做强制转换,只保留int类型的最后一个字节,赋值给byte 。
//编译器自动检查右边数据的范围,只要在byte的范围内,将int强制转换为byte 。
b = 3 + 7;
byte b1 = 3;
byte b2 = 7;
b = b1 + b2;//这里编译器要报可能损失精读,因为运算符的右边是变量,编译器无法确定其值的范围是否在byte允许的范围内,所以报错。
int x;
x = b1 + b2;//这里是可以的,原则:只要能装的下就行。
int x1 = Integer.MAX_VALUE;
int x2 = 2;
x = x1 + x2;//这里会发生溢出,两个正数相加,结果为一个负数。因为int 是整数的默认类型,所以,这里编译器没有报错。而是自动保留低32位,将多出的高位去掉。
分析:
System.out.println('a');
System.out.println('a'+1);
(5)运算符
算术运算符 +-*/(取整)%(取余:模运算)结果的正负取决于被模数(左边的数)+(连接)任何数据类型只要和字符串进行+运算,结果都是字符串连接。连接成了一个更大的字符串。
++(自增:在原有数据的基础上加1,再赋给原有数据)
例如:
int i = 3;
i = i++;
i的结果是??结果:i = 3
分步:
temp = i;
i = i+1; //i = 4
i = temp; //i = 3
--(自减)
赋值运算符 =+=-=*= /= %=
例如:int a,b,c;
int a = b = c = 4;
int a = 4;
a += 2;//a = a + 2;
一道面试题:
short a = 3;
s += 4;//编译正常通过,并且可以运行。底层进行自动转换,将s+4的结果(int),先检查是否在short的范围内,如果在的其范围内,将int类型自动转换为short类型。
s = s + 4;//编译时报错,因为运算符右边有变量,编译器无法确定其值的范围是否在short的范围内。底层不进行转换。
s + 4结果是int类型,这里做了自动类型提升。int不能直接赋值给short,因为装不下,会损失数据精度。
问:上面两个语句有什么区别??
其实,s += 4;//与s = (short)(s + 4);才是等价的。
前者自动做强转;后者不自动强转,只能显示的强转。
自动转换,是赋值运算所具有的特点。
比较运算符:运算完的结果必须是true或者false 。
== !=>>=< <=
instanceof :检查是否是类的对象 。
例如:“hello” instanceof String
结果:true
注意:比较运算符“==” 不要写成赋值运算符“=”
逻辑运算符:& | ^ !&&||
逻辑运算符有什么用呢??
用于连接两个BOOLEAN类型的表达式。
&:”与“。该运算符的特点:
true & true = true
true & false = false
false & true = false
false & false = false
运算规律:&运算符的两边只要有一个是false,结果肯定是false 。
只有两边都为true,结果才是true。
|:”或“。运算特点。
true | true = true
true | false = true
false | true = true
false | false = false
运算规律:|运算符两边只要有一个是true,结果肯定是true。
只有两边都是false,结果才是false。
^:”异或“。和或有点不一样。
true ^ true = false
true ^ false = true
false ^ true = true
false ^ false = false
运算规律:^运算符的两边的结果相同,结果是false。
两边的结果不同,结果是true.
!:”非“。运算特点。
!true = false
!false = true
面试题:
&&:和&的结果是一样的。但是运算过程有一点小区别。
&:无论左边的运算结果是什么。右边都参与运算。
&&:当左边为false时,右边不参与运算。
||:和|的结果是一样的。但是运算过程有一点小区别。
|:无论左边的运算结果是什么。右边都参与运算。
||:当左边为true时,右边不参与运算。
位运算符:
<<(左移):相当于乘以2的倍数。
<< :可以完成2的次幂运算。
例如:3 << 2 = 3 * 2(2) = 12
>>(右移):相当于除以2的倍数。
右移几位其实就是该数据除以2的几次幂。
>> :对于高位出现的空位,原来的高位是什么就用什么补这个空位。
例如:6 >> 1 = 6 / 2(1) = 3
6 >> 2 = 6 / 2(2) = 1
-6 >> 1 = -6 / 2(1) = -3
-6 >> 2 = -6 / 2(2) = -1
注:移N位,就是对乘以或者除以2的N次幂。
>>>(无符号右移) :数据进行右移时,高位出现的空位,无论原高位是什么,空位都用0补。
&(与):这是&和&&的第二个区别,就是说&还可以进行位运算。
举例:6 & 3 = 2
0000-0000 0000-0000 0000-0000 0000-0110
& 0000-0000 0000-0000 0000-0000 0000-0011
------------------------------------------------------------------
0000-0000 0000-0000 0000-0000 0000-0010
&(与运算)的小特点:想保留哪些位,就可以与1进行&运算。
|(或)
举例:6 | 3 = 7
0000-0000 0000-0000 0000-0000 0000-0110
| 0000-0000 0000-0000 0000-0000 0000-0011
--------------------------------------------------------------------------
0000-0000 0000-0000 0000-0000 0000-0111
|(与运算)的小特点:两个二进制位串进行|或运算,凡是有1的位置全部保留。
1是有效位,或的特点在于可以将有效位保留。
例如:
110
| 011
--------
111
^(异或) : 相同为0,不同为1。
一个数异或同一个数两次,结果还是该数本身。
举例:6 ^ 3 = 5
6 ^ 3 ^ 3 = 6
110
^ 011
---------
101
^ 011
---------
110
~(反码):按位取反。
~ 0000-0000 0000-0000 0000-0000 0000-0110
--------------------------------------------------------------------------
1111-1111 1111-1111 1111-1111 1111-1001
6的反码 + 1 = -6的补码
所以,6的反码 = -7的补码
两者在内存中的表现形式是一致的。
位运算:是直接对二进制位进行运算。
位运算练习:
(1)用最高效的方法计算2*8?
2 << 4 = 16
(2)对两个整数变量的值进行互换(不需要第三方变量)?
例如:a = 3, b = 5;
//借助第三方变量实现两个变量的互换。该种方式在实际开发中最常使用,建议使用该方式。
实际开发中使用,因为其阅读性最好。执行的效率也不会比位运算低多少,我们折中一下,所以,选择该种方式、
int c;
c = a;
a = b;
b = c;
//该种方式不建议使用。如果两个整数的数值过大,会超出int范围,会强制转换,数据会损失精度。
a = a + b; //a = 3+5 ; a = 8;
b = a - b; //b = 8 - 5;b = 3;
a = a - b; //a = 8 - 3;a = 5;
//通过位运算。规律:一个数异或另一个数两次,结果还是这个数。该种方式在实际开发中,不要使用,因为其阅读性差。
面试的时候用。
a = a ^ b;
b = a ^ b;
a = a ^ b;
格式:
(条件表达式) ?表达式1 :表达式2;
如果条件为true,运算后的结果是表达式1;
如果条件为flase,运算后的结果是表达式2;
示例:获取两个数中的大数。
int x = 3,y = 4,z;
z = (x>y) ? x : y;//z变量存储的就是两个数的大数。
条件表达式:其结果只能是true或者false 。
获取三个数中的大数。
int o,p,q;
int temp = o>p ? o : p;
int max2 = temp>q ? temp : q;
- 0002 Java语言基础组成1
- Java语言基础组成
- Java语言基础组成
- Java语言基础组成
- JAVA语言基础组成
- Java语言基础组成
- Java语言基础组成
- java语言基础组成
- java语言基础组成
- java语言基础组成
- 02 Java语言基础组成
- (2)Java语言基础组成
- Java语言基础组成2
- Java语言的基础组成
- 2 Java语言基础组成
- Java语言的基础组成
- Java语言基础组成(上)
- Java语言基础组成(下)
- 对QML的tranform进行改变
- 如何有效使用谷歌搜索引擎
- map 如何迭代
- 如何将sql 执行的错误消息 记录到本地文件中
- poj1523 求割点 及 该割点 可以 把该图分成几个连通分量
- 0002 Java语言基础组成1
- 深入理解Oracle索引(14):Composite Index 两大原理解析
- svn版本服务器搭建
- opencv打印二通道或三通道矩阵
- 黑马程序员_正则表达式
- 运维系统,发现报错,打开文件句柄数太多解决方案
- Android WIFI状态监控
- Position定位:relative | absolute
- ADO.NET数据库访问