Java入门学习笔记

Study report of Java


中级实训第一周的Java学习笔记,记录的比较粗略,而且不深入,毕竟教程限于篇幅也是比较粗略的,而且因为这个学期已经学习了C#,两者还是有不少共通之处。而且作为C系语言,C++也是有不少相像的地方的。

  • Study report of Java
    • Java
      • 基本的运行
      • 数据类型
        • 基本数据类型
        • 复合数据类型
        • 引用类型
      • 流程控制语句
        • 循环语句
        • 分支语句
        • 跳转语句
        • 异常处理语句
      • jdk拆箱和装箱
      • 数组
        • 声明
        • Arrays类方法
      • 集合类
      • 泛型
        • 继承
        • 多态
      • 垃圾回收机制
      • 方法重载和重写
        • 协变返回
      • final声明
      • 抽象类
        • 接口
      • 输入输出
        • 输入输出流
    • 骚操作
      • 集合类的子类以及相关的函数
        • Iterator
      • ...和for( : )
      • getDeclaredMethods()


Java

粗略的看一下Java的语法,由于Java也是C系的语言,总体来说大部分的基本语法和C、C++是类似的。在这次学习中我也会对大部分内容较为粗略的看过去,而着重于查看Java与C++不同的地方。

基本的运行

# Helloworld.java
public class Helloworld {
     
    public static void main(String[] args) {
        Sysytem.out.println("Hello, world.");
    } 
}
  1. 文件名作为一个类,包裹在文件内容的最外层
  2. main函数作为一个static方法
  3. 输出要调用System.out.println()函数

数据类型

基本数据类型

分成4类8种
1. 逻辑型:boolean
2. 文本型:char
3. 整型:byte(1个字节),short(2个字节),int(4个)和long(8个)
4. 浮点型:doublefloat

注意float在声明和赋值时要加f
例如

float f = 3.131f;

注意String类型在Java中是类,是一个对象
jdk1.5中有StringStringBufferStringBuilder.StringBuilder

复合数据类型

Java是单根语言,所有的复合数据类型都是从Object类继承下来的,同时他们也都是类。

引用类型

通常也是类,声明变量时系统只会分配引用空间,而不是像基本类型一样的分配一份储存空间。要用new操作符来开辟数据空间。
这和C++有一点不同,C++是要显式的声明引用的。

流程控制语句

循环语句

主要分为三种循环控制语句
1. while
2. do-while
3. for

和C++的几种循环的语法没什么差别

分支语句

  1. if-else
  2. switch
    也一样,没什么区别, switch记得要加 defaultbreak

跳转语句

  1. label:
    label:在C/C++中应该是配合goto语句服用的,然而为了程序的可读性C++早已淘汰了goto语句。当然Java的label和古老的汇编式的label还是有一些区别,具体可以在下边看出来。
  2. break [label]
    label这是一个可选参数,不加的话和C++的break是完全相同的,加了以后可以跳出label所标注的代码块。
    注意:不是跳转到label所标注的行
  3. continue [label]
    break一样,label是个可选参数,不加的话和C++相同,加了以后,会继续label所标注的代码块的循环。
  4. return

异常处理语句

  1. try-catch-finally
  2. throw

jdk拆箱和装箱

基本类型和对象型有不少的区别,为了使得基本数据类型和对象联系起来,Java提供了叫做包装类(wrapper)的东西,使得基本类型有着对应的对象类型。
比如intInteger可以相互转换,例如

int i = 0;
Integer j = 0;
j = i;
i = j;

同理BooleanbooleanCharacterchar……都是可以的。

值得注意的是,对象的比较和基本数据类型的比较还是不同的,在应用==等等比较符号时要特别注意。

数组

声明

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.*

  1. Set
  2. List
  3. Map
  4. Queue
    这些都是比较基础的类,他们还有不少子类,比如Map的HashMap等等

泛型

对于集合类可以使用泛型声明如

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常量,并且方法全是抽象的类,就是接口,他比抽象类还要抽象。用implementsinterface

public interface Say {
     
    public void sayMessage();
}

public class SayHello implements Say {
     
    public void sayMessage() {
        System.out.println("hello");
    }
}

接口可以先继承一个类,然后再去实现其他的接口

输入输出

输入输出流

InputStreamOutputStream

骚操作

集合类的子类以及相关的函数

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()

可以获得当前这个类中定义了的方法列表

你可能感兴趣的:(入门学习系列,Java)