中级实训第一周的Java学习笔记,记录的比较粗略,而且不深入,毕竟教程限于篇幅也是比较粗略的,而且因为这个学期已经学习了C#,两者还是有不少共通之处。而且作为C系语言,C++也是有不少相像的地方的。
粗略的看一下Java的语法,由于Java也是C系的语言,总体来说大部分的基本语法和C、C++是类似的。在这次学习中我也会对大部分内容较为粗略的看过去,而着重于查看Java与C++不同的地方。
# Helloworld.java
public class Helloworld {
public static void main(String[] args) {
Sysytem.out.println("Hello, world.");
}
}
main
函数作为一个static
方法System.out.println()
函数分成4类8种
1. 逻辑型:boolean
2. 文本型:char
3. 整型:byte
(1个字节),short
(2个字节),int
(4个)和long
(8个)
4. 浮点型:double
和float
注意
float
在声明和赋值时要加f
例如
float f = 3.131f;
注意
String
类型在Java中是类,是一个对象
jdk1.5中有String
,StringBuffer
,StringBuilder.StringBuilder
Java是单根语言,所有的复合数据类型都是从Object
类继承下来的,同时他们也都是类。
通常也是类,声明变量时系统只会分配引用空间,而不是像基本类型一样的分配一份储存空间。要用new
操作符来开辟数据空间。
这和C++有一点不同,C++是要显式的声明引用的。
主要分为三种循环控制语句
1. while
2. do-while
3. for
和C++的几种循环的语法没什么差别
if-else
switch
也一样,没什么区别,switch
记得要加default
和break
label:
label:
在C/C++中应该是配合goto
语句服用的,然而为了程序的可读性C++早已淘汰了goto
语句。当然Java的label和古老的汇编式的label还是有一些区别,具体可以在下边看出来。break [label]
label
这是一个可选参数,不加的话和C++的break
是完全相同的,加了以后可以跳出label
所标注的代码块。 continue [label]
break
一样,label
是个可选参数,不加的话和C++相同,加了以后,会继续label
所标注的代码块的循环。return
try-catch-finally
throw
基本类型和对象型有不少的区别,为了使得基本数据类型和对象联系起来,Java提供了叫做包装类(wrapper)的东西,使得基本类型有着对应的对象类型。
比如int
和Integer
可以相互转换,例如
int i = 0;
Integer j = 0;
j = i;
i = j;
同理Boolean
和boolean
,Character
和char
……都是可以的。
值得注意的是,对象的比较和基本数据类型的比较还是不同的,在应用
==
等等比较符号时要特别注意。
int[] array = {
1,2,3,4,……,n};
// 初始化内容
int[3] array = {
1,2,3};
// 声明中说明数组大小
int[] array = new int[3];
// 用new来声明
int[][] matrix = new int[][];
// 二维数组
Arrays
类方法可以利用String Arrays,toString()
方法,二维数组可以利用String Arrays.deepToString()
方法。
比较时还提供了boolean Arrays.Equals()
和boolean Arrays.deepEquals()
方法。
还可以利用int Arrays.binarySearch(array, 98)
方法。
集合类放在
java.util.*
中
对于集合类可以使用泛型声明如
public Queue<String> q;
public class Child_class extends Base {
...
}
注意: Java只能从一个父类继承
父类类型的变量可以放置子类类型的实体。
// java 中的多态
class Shape {
void draw() {}
void erase() {}
}
//圆形
class Circle extends Shape {
void draw() {
System.out.println("Circle.draw()");
}
void erase() {
System.out.println("Circle.erase()");
}
}
//正方形
class Square extends Shape {
void draw() {
System.out.println("Square.draw()");
}
void erase() {
System.out.println("Square.erase()");
}
}
JAVA对于OOP的三个特性都已经见识到了,封装继承和多态
自动回收没有被引用的实体对象所占用的内存,垃圾回收期比较可怜,他在系统空闲的时候才会运行,只要CPU有事情做就轮不到垃圾回收器,所以他的内存回收效率比较低,System.gc()
函数可以让我们手动回收,可以提高性能。
重载是同一个类里方法名字相同,参数不同
重写是子类的方法覆盖父类的方法
final
声明类声明中写final
,表明不可派生子类
方法声明中写final
,表明方法不可被重写覆盖
变量声明中写final
,表明变量为常量不可修改
用abstract
声明,结尾用;
。和C++一样。
有抽象方法的类就是抽象类,不可以建立实例。
变量全是final
常量,并且方法全是抽象的类,就是接口,他比抽象类还要抽象。用implements
和interface
public interface Say {
public void sayMessage();
}
public class SayHello implements Say {
public void sayMessage() {
System.out.println("hello");
}
}
接口可以先继承一个类,然后再去实现其他的接口
InputStream
和OutputStream
Iterator
List int_list
for (Iterator i=int_list.iterator(); i.hasNext(); ) {
...
}
...
和for( : )
public class overload {
//若干个相同类型的参数,用“...”代替
public void pri(String... strings ){
for (String str : strings) //for 这个循环语句也有迭代的意思
System.out.print(str);
}
public static void main(String[] args){
new overload().pri("100jq"," 百家拳软件项目研究室"," www.100jq.com");
}
}
...
可以省略不少相同类型的参数,然后可以用for(type i : args)
来迭代访问所有变量
getDeclaredMethods()
可以获得当前这个类中定义了的方法列表