java基本程序设计结构与数据类型

1.一个简单程序的编写、编译与运行

编写如下的Main.java

public class Main{
	public static void main(String[] args){
		System.out.println("Hello World");
	}
}

上面的程序有几个要注意的点:
①public 是访问修饰符,用来表示其他程序对Main类的访问级别。
②类名使用驼峰命名法,如HelloWorld.
③java文件名必须和类名相同。
④JVM在执行一个java文件形成的字节码文件时,其类文件必须包含一个main函数,一个类最多只有一个public static void main
⑤main正常执行的退出码为0,如果要以其他退出码来终止程序,使用System.exit

public class Main{
    public static void main(String[] args){
        if(args.length==0) {
            System.out.println("error");
            System.exit(1); //用1终止程序
        }
        else{
            System.out.println("Hello World");
        }
    }
}

在这里插入图片描述
下面使用命令行来编译运行Main.java
在这里插入图片描述
值得注意的是,java命令执行class文件时,不能在chapter3目录下直接执行java ./src/Main,而是要使用-cp来指定Main.class的目录。

2.注释方式

一共3种:

/**
 * 这是一个Hello World程序
 */
public class Main{
    public static void main(String[] args){
        System.out.println("Hello World"); //输出Hello World
        /*
        我自己是第三种注释方法,1~3行是第一种注释方法(用于形成文档),第6行是第2种注释方法
         */
    }
}

3.数据类型

java的数据类型如下所示:
在这里插入图片描述

3.1 基本数据类型

关于基本数据类型有几个要注意的点:
①java中的数据类型都是长度固定的,不像C中int可以根据硬件设计为int8、int16、int32,这也是java可以跨平台原因之一。
②数据类型中的前后缀
前缀可以是表示二进制的0b/0B、八进制的0、十六进制的0x/0X;后缀可以是long型的L、float型的f/F、double型的d/D。

public class Main{
    public static void main(String[] args){
        int a=0b010;  //一般不会使用八进制,防止引起混淆
        int b=0x010;
        float c=0.1f;
        double d=0.1d;
        System.out.println("a="+a);
        System.out.println("b="+b);
        //((Object)c)将c转化为一个对象,getClass()取得这个对象的类,使用getSimpleName()方法得到类名,也就是数据类型
        System.out.println("c的类型是"+((Object)c).getClass().getSimpleName());
        System.out.println("d的类型是"+((Object)d).getClass().getSimpleName());
    }
}

在这里插入图片描述
③有三个浮点数表示溢出和出错:正无穷大、负无穷大、NaN(数值不固定),分别用Double.POSITIVE_INFINITYDouble.NEGATIVE_INFINITYDouble.NaN表示。注意NaN并不是一个数,不能使用==来判断这个数是不是NaN.

public class Main{
    public static void main(String[] args){
        double a=1;
        double b=a/0;
        double c=-a/0;
        double d = Math.sqrt(-1);
        if(b==Double.POSITIVE_INFINITY){
            System.out.println("error:div 0");
        }
        else{
            System.out.println("b="+b);
        }
        if(c==Double.NEGATIVE_INFINITY){
            System.out.println("error:div 0");
        }
        else{
            System.out.println("c="+c);
        }
        if(Double.isNaN(d)){
            System.out.println("d is a NaN");
        }
        else{
            System.out.println("d is not a NaN");
        }
        if(d==Double.NaN){
            System.out.println("d is a NaN");
        }
        else{
            System.out.println("d is not a NaN");
        }
        System.out.println("d="+d);
    }
}

在这里插入图片描述
④浮点数存在舍入误差,无法表示精确数,这是因为浮点数也是由二进制表示的。要使用精确的浮点数运算,使用BigDecimal类。

import java.math.BigDecimal;

public class Main{
    public static void main(String[] args){
        double a=2.0-1.1;
        System.out.println("a="+a);
        BigDecimal bd1 = new BigDecimal("2.0");
        BigDecimal bd2 = new BigDecimal("1.1");
        BigDecimal bd=bd1.subtract(bd2);
        System.out.println("bd="+bd);
    }
}

在这里插入图片描述
⑤UTF-16 编码采用不同长度的代码表示所有 Unico加码点。在基本多语言平面中,每个字符用 16 位表示,通常称为代码单元 ( codeunit);而辅助字符编码为一对连续的代码单元。 采用这种编码对表示的每个值都属于基本多语言平面中未用的 2048 个值范围,通常称为替代区域 ( surrogate area) ( U+0806 U+DBFF 用于第一个代码单元,U+DC69- U+DFFF 用于第二个代码单元)。这样设计十分巧妙,因为我们可以很快知道一个代码单元是一个字符的编码,还是一个辅助字符的第一或第二部分。在 Java中,char 类型描述了采用UTF-16 编码的一个代码单元。强烈建议不要在程序中使用由char类型,除非确实需要处理UTF-16 代码单元。最好将字符串作为抽象数据类型来处理。
⑥下面是常见的char类型的转义字符
在这里插入图片描述
⑦整型和布尔型之间是不能相互转化的

public class Main{
    public static void main(String[] args){
        int a=1;
        if(a=1{  //语法错误,a=1返回的是int类型,而不是boolean
            System.out.println(a);
        }
    }
}

⑧大数类型
大数类型有针对整型和浮点型的两种类型——BigInteger和BigDecimal。

import java.math.BigDecimal;
import java.math.BigInteger;

public class Main{
    public static void main(String[] args){
        //BigInteger
        BigInteger bigA=BigInteger.valueOf(1);
        BigInteger bigB=new BigInteger("1111111111111111111111111111111111");
        System.out.println("bigA="+bigA);
        System.out.println("bigB="+bigB);
        //BigDecimal,对于浮点数,只建议用字符串的初始化方式
        BigDecimal bigC=new BigDecimal("1.1111111111111111111111111111111111111111");
        System.out.println("bigC="+bigC);
        //大数类型的数据不能直接使用+-*/,而是使用BigInter的一些方法
        BigInteger bigD=bigA.add(bigB);
        System.out.println("bigD="+bigD);
    }
}

在这里插入图片描述

3.2 引用数据类型

3.2.1 数组

3.2.1.1 数组初始化
public class Main{
    public static void main(String[] args){
        int[] a; //声明一个数组a,还未初始化
        //2种初始化方式
        int[] b=new int[10];
        int[] c={0,1,2,3,4,5,6,7,8,9};
        //System.out.println("a="+a); //错误,a未初始化
        System.out.println("b="+b);  //打印对象引用
        System.out.println("c="+c);  //打印对象引用
        //使用for each打印数组内容
        for(int num:c){
            System.out.print(num+" ");
        }
        System.out.println();
        c=new int[] {1,2}; //使用匿名数组重新为c赋值
        for(int num:c){
            System.out.print(num+" ");
        }
    }
}

在这里插入图片描述
在这里插入图片描述
注意,数组为空和null是不一样的。

public class Main{
    public static void main(String[] args){
        int[] a=new int[0];
        if(a==null){
            System.out.println("a is null");
        }else {
            System.out.println("a isn't null");
        }
    }
}

在这里插入图片描述
对于已经初始化但未指定值的数组,整形和浮点型的值默认为0,对象数组则默认为null,表示元素未表示任何对象。

public class Main{
    public static void main(String[] args){
        int[] a=new int[10];
        double[] b=new double[10];
        String[] c=new String[10];
        for(int aa:a){
            System.out.printf("%-5d",aa);
        }
        System.out.println();
        for(double bb:b){
            System.out.printf("%-4.2f ",bb);
        }
        System.out.println();
        for(String cc:c)
        {
            System.out.printf("%-5s",cc);
        }
        System.out.println();
    }
}

在这里插入图片描述

3.2.1.2 数组赋值与访问
3.2.1.3 数组访问
3.2.1.4 数组拷贝
3.2.1.5 数组排序
3.2.1.6 多维数组
3.2.1.7 不规则数组

3.2.2 类

3.2.3 接口

3.2.4 枚举

枚举的意义在于,有时候,一个变量只包含有限的一组值。例如,销售的服装或比萨只有小、中、大和超大这四种尺寸。当然,可以将这些尺寸分别编码为整数 1、2、3.、4 或字符 S、M、 L 、X。但这种设置很容易出错、很可能在变量中保存一个错误的值,所以使用枚举变量。

public class Main{
    public static void main(String[] args){
        enum Size {S,M,L,XL};
        Size size=Size.M;
        System.out.println("size="+size);
    }
}

在这里插入图片描述

3.2.5 注解

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

F l e

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值