Java 学习 第一篇
1:Java文档注释;
使用javadoc工具可以提取程序中文档注释来生成API文档;
javadoc命令的基本用法;
javadoc 选项 java源文件/包
javadoc -d {} -windowtitle {} - doctitle {} -header {}
2:数据类型和运算符
byte 1 short 2 int 4 long 8 float 4 double 8 boolean 1 char 1;
3:java自动类型转换;
char ->
int ->long->float->double
byte->short->
注意byte类型不能自动转换成char类型;
强制类型转换:从上边箭头右边的转换为左边时,需要使用强制类型转换;格式(target Type)value;
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
public static void main(String[] args) { // TODO Auto-generated method stub System.out.println("强制类型转换示例"); int i=128; byte s=(byte)i; byte s1=(byte)(i-1); byte s2=(byte)(i+1); byte s3=(byte)(i-10); System.out.println(s); System.out.println(s1); System.out.println(s2); System.out.println(s3); System.out.println((byte)233); }
output:
强制类型转换示例
-128
127
-127
118
-23
因为32位的int转换为byte类型时候直接将最后8为截断赋值,
3.2:另外所有的byte short 和 char 类型在参与算术表达式运算时候将发生自动提升;
例如 short s=2;s=s-1;将会产生错误;
3.3:string类型直接量不能赋给其他类型变量null类型直接量可以赋给任何引用类型的变量包括string类型。
4:运算符
+ - * / % ;
& 按位与;
| 按位或
~ 按位非
^ 按位异或
<< 左位移运算符
>> ....
>>>无符号右位移运算符
示例:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 public static void main(String[] args) { 2 // TODO Auto-generated method stub 3 System.out.println("位运算"); 4 5 String str =null; 6 System.out.println(str); 7 System.out.println(str); 8 System.out.println(5|9); 9 System.out.println(1<<1); 10 System.out.println(1<<2); 11 System.out.println(-128>>1); 12 System.out.println(-128<<1); 13 System.out.println(-1>>>1); 14 15 }
output:
位运算
null
null
13
2
4
-64
-256
2147483647
扩展赋值运算符;
+/-/*///= %= &/|/~/^/= <</>>/>>>/=
5:数组
数组的定义;
type[] arrayName;
type arrryName[];
静态初始化:arrayName=New type[]{,,,,,,};
arrName ={,,,,,,,};
动态初始化数组;只进行数组的长度的定义;
Type[] arrayName=new Type[N];
int [] ints=new int[10];
5.1 数组的遍历:foreach
语法格式 for(Type TempVar:arrayName)
示例如下:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
public static void main(String[] args) { // TODO Auto-generated method stub System.out.println("foreach"); String[] strArry={"1","2","3","4"}; for(String temp:strArry) { System.out.println(temp); } for(String temp:strArry) { temp="1"; System.out.println(temp); } }
output:
foreach
1
2
3
4
1
1
1
1
5.2关于数组,数组是一种引用数据类型,数组引用变量只是一个引用数组元素和数组变量在内存中是分开存放的。
数组引用变量可以执行任何有效的内存,只有当该引用指向有效内存后才可以通过该数组变量来访问数组的元素;
也就是说:
实际的数组元素被存在堆内存(heap)中,数组引用变量是一个引用类型的变量,被存在栈内存(stack)中,数组引用变量就像是“指针”;
示例:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
public static void main(String[] args) { // TODO Auto-generated method stub System.out.println("数组长度可变?"); String[] strArry={"1","2","3","4"}; String[] strArry1=new String[2]; System.out.println("Length of strArry1="+strArry1.length); strArry1=strArry; System.out.println("Length of strArry1="+strArry1.length); }
output:
数组长度可变?
Length of strArry1=2
Length of strArry1=4
从上述程序来看两次输出数组的长度发生改变;但实际上不是数组长度发生改变而是数组引用的内存空间发生改变,这种操作会让人觉得数组长度变了;
由上述例子来看:看数组时候应把数组看成两个部分一个是数组引用一个是实际数组本身,而数组本身死存放在系统内存里的通常无法直接访问,只能通过数组引用变量来访问它;
5.3多维数组;比如二维数组其实可以看做是数组内容是引用类型的数组 这个引用类型数组的每一个元素又是一个一维数组的引用;
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
public static void main(String[] args) { int[][] a; a=new int [2][]; for(int i=0;i<a.length;i++) { System.out.println(a[i]); } a[0]=new int[2]; a[0][1]=6; a[1]=new int[9]; for(int i=0 ;i<a[0].length;i++) { System.out.println(a[0][i]); } for(int i=0;i<a.length;i++) { System.out.println(a[i]); } }
output:
null
null
0
6
[I@785d65
[I@3bc257
前2个输出元素是 引用类型因为没有为其开辟堆内存所以输出结果为null即为空引用;
中间2个为一维数组(a[2])[2]的两个值得输出
最后输出为经过赋值以后 引用类型的值 可以看出他们指向一块内存区域;
很神奇的事情是 “二维数组”(把二维数组看做是行列结构的数组)的第一行和第二行长度可以不相同这是很神奇的;