陈国君Java程序设计基础笔记和习题

  • 第一章 Java语言基础
  • 笔记
  • 习题
  • 1.1 Java语言有哪些特点?
  • 1.2 什么是Java虚拟机?
  • 1.3 什么是字节码?采用字节码的最大好处是什么?
  • 1.4 什么是平台无关性?Java语言是怎么实现平台无关性的?
  • 1.5 Java语言程序有几种?每种程序包含哪几个方面?
  • 1.6 什么是Java程序的主类?应用程序与小程序的主类有何不同?
  • 第二章 Java语言开发环境
  • 第三章 Java语言基础
  • 笔记
  • 输入数据
  • 运算符
  • 习题
  • Java有哪些基本数据类型?
  • 如何将数值字符串转换为数值型数据?
  • 第四章 流程控制
  • 笔记
  • 例4.5 计算Fibonacci数列的前16项
  • 习题
  • 第五章 数组与字符串
  • 笔记
  • Java把内存分为:栈内存和堆内存
  • 一维数组
  • 数组类Arrays的常用方法
  • 声明一个数组,长度为5,利用循环对其赋值,再通过另一个循环逆输出其元素的内容。
  • 约瑟夫环问题,有N个人围坐一圈并以顺时针从1到N编号,从S个人进行1到M报数,报到M的人出圈,反复循环,给出N个人的出圈顺序
  • foreach语句与数组
  • 计算并输出杨辉三角


第一章 Java语言基础

笔记

习题

1.1 Java语言有哪些特点?

跨平台、适合于分布式计算环境、面向对象、平台无关、对线程、动态性、支持网络编译。
解释型语言(将源代码解释成机器码并执行,然而Java的代码是需要编译的,但是编译后解释运行在JVM上。*.java → *.class → 不同的平台。Java可通过JIT,将代码编译成本机机器代码,从而提高运行速度。 )

1.2 什么是Java虚拟机?

Java虚拟机JVM(Java Virtual Machine)是可以运行Java字节码的软件,JVM可以看做一个字节码的解释器。

1.3 什么是字节码?采用字节码的最大好处是什么?

字节码(Byte-code)是一种包含执行程序,由一序列op 代码/数据对组成的二进制文件(*.class)。其最大的好处是可跨平台执行,write once, run anywhere。

1.4 什么是平台无关性?Java语言是怎么实现平台无关性的?

是指代码无需修改就可以在不同的平台上运行。通过字节码和JVM在目标代码级实现。

1.5 Java语言程序有几种?每种程序包含哪几个方面?

两种,分别是应用程序(Application)和小程序(Applet)。两者开发原理相同但是在运行环境和计算结构上显著不同。Application可以在平台上独立运行,Applet内嵌在HTML文件里,需要在浏览器的支持下运行。
完整的Java程序包含:package语句,import语句,public classDefinition公共定义一部分;(classDefinition部分,interfaceDefinition部分不是必须的,但是通常存在)。

1.6 什么是Java程序的主类?应用程序与小程序的主类有何不同?

主类是程序执行的入口,必须包含main方法。小程序的主类继承自Japplet,该类必须是public类。

第二章 Java语言开发环境

第三章 Java语言基础

笔记

输入数据

使用Java.io 输入数据

imoport java.io.*;
public class class_name{
    public static void main(String[] args) throws IOException{      //throws关键字声明,表示抛出异常,交给调用者处理
        .
        .
        .
        String str;
        BufferedReader buf;     //声明一个BufferedReader类的变量
        InputStreamReader inp;
        inp = new InputStreamReader(System.in);
        buf = new BufferedReader(inp);
        str = buf.readLine();       //建议用try(), catch()
        .
        .
        .
    }
}

buf = new BufferedReader( new InputStreamReader( System.in ) )


使用java.util.Scanner输入数

import java.util.*;
public class App3_7{
    public static void main(String[] args){
        String s1, s2;
        Scanner scan = new Scanner(System.in);
        s1 = scan.nextLine();
        s2 = scan.next();
    }
}

运算符

instanceof操作符用于测试左侧的对象是否为右侧类的示例,返回boolean数据类型。

习题

Java有哪些基本数据类型?

8个;4个用于整型分别是byte,short,int,long,分别占1,2,3,4个字节。单精度,双精度浮点型float,double分别占4,8个字节(最小值可用Double.MAX_VALUE取得)。char类型用Unicode编码,占用2字节。

如何将数值字符串转换为数值型数据?

使用各个数据类型对应的类提供的parse方法。

第四章 流程控制

笔记

例4.5 计算Fibonacci数列的前16项

public class Test {
    public static void main(String[] args) {
        int i = 0;
        int j = 1;
        for( int k = 1; k < 17; k = k +2) {
            System.out.format("第%d项为%d%n第%d项为%d%n", k, i, k + 1, j);
            i = i + j;
            j = i + j;
        }
    }   
}

习题

第五章 数组与字符串

笔记

Java把内存分为:栈内存和堆内存

  • 方法中定义的一些基本类型和对象的引用变量都在方法的栈内存中分配,当在一段代码块中定义一个变量时,Java在栈内存中为这个变量分配内存空间,当超出变量的作用域时,Java会自动释放掉为该变量所分配的内存空间。
  • 堆内存用来存放由new运算符所创建的数组或对象,在堆中分配的内存,由Java虚拟机的垃圾回收器来自动管理。在堆中创建数组或对象时,同时还在栈中定义一个特殊的变量,栈中的这个变量就成了数组或对象的引用变量,其保存了对象在堆内存中的首地址,以便在程序中使用栈的引用变量来访问堆中的数组或对象。引用变量在运行到其作用域外时被释放,而堆内存中数组和对象本身仍然存在,它会在一个不确定的时间被JVM的垃圾回收期收走,这是Java比较占内存的原因之一。
  • Java有一个特殊的引用型变量null,如果一个引用变量赋值为null,其不指向任何对象。

一维数组

数据类型[] 数组名; //声明一维数组
数组名 = new 数据类型[个数]; //分配内存给数组

数组类Arrays的常用方法

binarSearch( XXX[] a, X key )
sort( XXX[] )
sort( XXX[], int fromIndex, int toIndex )
XXX[] copyOf( XXX[] original, int newLength )
equal( XXX[]a, XXX[]b )

声明一个数组,长度为5,利用循环对其赋值,再通过另一个循环逆输出其元素的内容。

final int MAX = 5;
int i;
int[] a = new int[MAX];
Scanner scan = new Scanner( System.in );
for( i = 0, i < MAX, i++ ){
    a[i] = scan.nextInt;
    for( i = a.length -1; i >= 0; i --)
        System.out.printf("%d ");
}

约瑟夫环问题,有N个人围坐一圈并以顺时针从1到N编号,从S个人进行1到M报数,报到M的人出圈,反复循环,给出N个人的出圈顺序

final int N = 13;
final int S = 3;
final int M = 5;
int i = S - 1, j = 0, k = N, g = 1;
int[] a = new int[N];
for( int h = 1, h <= N, h++ ){
    a[h - 1] = h;
}
do{
    i = i + (M - 1);
    while(i >= k)
        System.out.print("  "+ a[i]);
    for( j = i; j < k - 1; j++ )
        a[j] = a[j + 1];
    k--;
    g++;
}while(g <= N);

另一种算法

final int N = 13, S = 3, M = 5;
int[] x = new int[N];
int[] y = new int[N];
int i = 0, j = 0, k = S - 2;
for( i= 1; i <= N; i++){
    for( j = 1; j <= M; j++){
        if(k == N-1)
            k = 0;
        else
            k++;
        if(x[k] == 1)
            j--;
    }
    x[k] = 1;
    y[n++] = k + 1;
    for(i = 0; i < N; i++)
        System.out.print(q[i] + "   ");
}

foreach语句与数组

for( type elment: array ){
    System.out.println( element );
    .
    .
    .
}

计算并输出杨辉三角

int i, j;
int level = 7;
int[][] iayong = new int[level][];
for(i = 0, i < iaYong.lenth; i ++){
    iaYong[i][0] = 1;
    for(j = 1; j < iaYong[i].length-1; j++)
        iaYong[i][j] = iaYong[i - 1][j - 1] + iaYong[i - 1][j];
    iaYong[ i ][ iaYong[ i ].length - 1 ] = 1;
}
for( int[] row : iaYong){
    for( int col : row )
        System.out.print( col + "   " );
    System.out.println();
}