zoukankan      html  css  js  c++  java
  • Java的基本程序设计结构

    知识点

    关键字public 称为访问修饰符(access modifier):用于控制程序的其他部分对这段代码的访问级别;

    关键字class 表明Java程序中的全部内容都包含在类中;类是构建所有Java应用程序和applet的构建块。

    类名:驼峰命名法;

    源代码的文件名必须与公共类的名字相同,并用.java作为扩展名。

    运行已编译的程序时,Java虚拟机将从指定类中的main方法开始执行;

    根据Java语言规范,main方法必须声明为public

    java中任何方法的代码都用“{”开始,用“}”结束;

    关于打印字符串的语句:System.out对象并调用了它的println方法;

    注释

    // 单行

    /* … */ 多行注释

    /**… */ 文档注释,可用于自动生成文档。

    数据类型

    Java是一种强类型语言。这就意味着必须为每一个变量声明一种类型。在Java中,一共有8种基本类型(primitive type),其中有4种整型、2种浮点类型、1种用于表示Unicode编码的字符单元的字符类型char(请参见论述char类型的章节)和1种用于表示真值的boolean类型。

    1、整形

    byte 是 整形变量!!

    byte a = 17;
            System.out.println("a = " + a);
            a = -127;
            System.out.println("a = " + a);
            a = 127;
            System.out.println("a = " + a);
            a = 128; // 报错
    

    byte和short类型主要用于特定的应用场合,例如,底层的文件处理或者需要控制占用存储空间量的大数组。

    在Java中,整型的范围与运行Java代码的机器无关。

    长整型数值有一个后缀L或l(如4000000000L)。十六进制数值有一个前缀0x或0X(如0xCAFE)。八进制有一个前缀0,例如,010对应八进制中的8。

    int x = 0x12;  //18
            System.out.println("x = " + x);
            byte y = 010;  // 8
            System.out.println("y = " + y);
    

    2、浮点类型

    绝大部分应用程序都采用double类型

    float类型的数值有一个后缀F或f(例如,3.14F)。没有后缀F的浮点数值(如3.14)默认为double类型。

    可以使用十六进制表示浮点数值;其中尾数采用十六进制,指数采用十进制;

    所有的浮点数值计算都遵循IEEE 754规范。

    常量Double.POSITIVE_INFINITY、Double.NEGATIVE_INFINITY和Double.NaN(以及相应的Float类型的常量)分别表示这三个特殊的值;

    System.out.println(Double.POSITIVE_INFINITY); // Infinity
            System.out.println(Double.NaN); // NaN
            System.out.println(Double.NEGATIVE_INFINITY); // -Infinity
    

    所有“非数值”的值都认为是不相同的 —》 使用Double.isNaN(x)来检查x是否为一个数。

    浮点数值不适用于无法接受舍入误差的金融计算中,如果希望数值计算中不允许有任何误差,就可以使用BigDecimal类。

    3、char类型

    Unicode字符可以用一个char值描述,另外一些Unicode字符则需要两个char值;

    char类型的字面量值要用单引号括起来。

    char类型的值可以表示为十六进制值,其范围从u0000uffff

    u表示转义序列,可以出现在加引号的字符字面量中或字符串中,其他表示在特殊字符的转义序列如下:

    特殊: 转义序列u还可以出现在加引号的字符常量或字符串之外

    警告: Unicode转义序列会在解析代码之前得到处理!!!

    Unicode和char类型:
    Unicode1.0设置16位的Unicode字符集,但不能满足描述所有Unicode字符的需要;
    在Java中,char类型描述了UTF-16编码中的一个代码单元。
    最好不要在程序中使用char类型,最好将字符串作为抽象数据类型处理;

    4、boolean类型

    boolean(布尔)类型有两个值:false和true,用来判定逻辑条件。

    note:整型值和布尔值之间不能进行相互转换。

    变量

    变量名必须是一个以字母开头并由字母或数字构成的序列;

    不能使用一个未初始化的变量;

    在java中,不区分变量的声明与定义;

    常量

    利用关键字final指示常量;关键字final表示这个变量只能被赋值一次。一旦被赋值之后,就不能够再更改了。

    常量名习惯上使用大写。

    类常量:希望某个常量可以在一个类中的多个方法中使用。关键字 static final用来设置类常量;

    类常量的定义位于main方法的外部。在同一个类的其他方法中也可以使用这个常量。而且,如果一个常量被声明为public,那么其他类的方法也可以使用这个常量。

    在Math类中,包含了各种各样的数学函数;

    求余数时,当被除数为负数时,余数为负数,可以采用((position+adjustment)% 12+12)%12方法来使得余数恒定为正数,其中12表示除数;

    被除数为正时,余数恒为正;

    import static java.lang.Math.*  // 导入包,直接使用Math的静态函数,不需要在方法名和常量名加“math"前缀
    

    在Math类中,为了达到最快的性能,所有的方法都使用计算机浮点单元中的例程。如果可预测的结果更加重要的话,fdlibm用来实现算法,保证在所有平台上得到相同的结果。

    将boolean类型和数值类型进行转换时:使用条件表达式b?1:0;

    Note: 位运算符应用在布尔值上,也会得到一个布尔值。这些运算符与&&和||运算符很类似,不过&和|运算符不采用“短路”方式来求值,也就是说,得到计算结果之前两个操作数都需要计算。

    算术运算符:>> 和 <<

    逻辑运算符:>>> 和<<<

    枚举类型

    变量的取值只在一个有限的集合内,可以自定义枚举类型。枚举类型包括有限个命名的值。

    字符串

    从概念上讲,Java字符串就是Unicode字符序列。

    Java没有内置的字符串类型,而是在标准Java类中提供了一个预定义类,很自然地叫做String。

    每个用双引号括起来的字符串都是String类的一个实例。

    当将一个字符串与一个非字符串的值进行拼接时,后者被转换成字符串;

    String.join使用分隔符连接个字符串。

    不可变字符串

    由于不能修改Java字符串中的字符,所以在Java文档中将String类对象称为不可变字符串,如同数字3永远是数字3一样,字符串“Hello”永远包含字符H、e、l、l和o的代码单元序列,而不能修改其中的任何一个字符。

    可变字符串“:当然,可以修改字符串变量greeting,让它引用另外一个字符串,这就如同可以将存放3的数值变量改成存放4一样。

    可变的方式通过拼接效率不高,但是不可变字符串可以使得:编译器可以让字符串共享(各种字符串存放在公共的存储池中)。

    如果将字符串变量赋予另外一个字符串常量,不会产生内存泄漏,原始字符串放在堆中,垃圾回收机制会将不适用的内存进行回收。

    只有字符串常量是共享的,而+或substring等操作产生的结果并不是共享的;

    空串与Null串:
    检查空串:if (str.length() == 0)或者 if (str.equals(“”))
    String变量还可以存放一个特殊的值,名为null,这表示目前没有任何对象与该变量关联;
    检查一个字符串既不是null也不为空串: if (str != null && str.length != 0),首先要检查str不为null;

    码点与代码单元

    在Java中,char类型描述了UTF-16编码中的一个代码单元。

    码点(code point)是指与一个编码表中的某个字符对应的代码值。

    UTF-16编码采用不同长度的编码表示所有Unicode码点。在基本的多语言级别中.每个字符用16位表示,通常被称为代码单元(code unit);而辅助字符采用一对连续的代码单元进行编码。

    ​ char数据类型是一个采用UTF-16编码表示Unicode码点的代码单元。大多数的常用Unicode字符使用一个代码单元就可以表示,而辅助字符需要一对代码单元表示。

    length()方法将返回采用UTF-16编码表示的给定字符串所需要的代码单元数量
    想得到实际的长度,即码点数量,使用codePointCount方法。

    返回位置n的代码单元, s.charAt(n)。
    返回第i个码点,greeting.codePointAt(index)

    码点数组和字符串可相互转换!

    String API

    查看文档。

    创建字符串:

    • 采用字符串连接的方式,效率低,浪费空间(每次连接都会构建一个新的String对象)。
    • 使用StringBuilder类(这个类的前身是StringBuffer,其效率稍有些低,但允许采用多线程的方式执行添加或删除字符的操作)。单线程情况下可以使用StringBuilder类替代。

    String API

    查看文档。

    创建字符串:

    • 采用字符串连接的方式,效率低,浪费空间(每次连接都会构建一个新的String对象)。
    • 使用StringBuilder类(这个类的前身是StringBuffer,其效率稍有些低,但允许采用多线程的方式执行添加或删除字符的操作)。单线程情况下可以使用StringBuilder类替代。

    输入输出

    获取输入:要想通过控制台进行输入,首先需要构造一个Scanner对象,并与“标准输入流”System.in关联。

    当使用的类不是定义在基本java.lang包中时,一定要使用import指示字将相应的包加载进来。

    因为输入是可见的,所以Scanner类不适用于从控制台读取密码;

    读取密码使用Console类实现;

    使用printf格式化输出;

    可以使用s转换符格式化任意的对象。对于任意实现了Formattable接口的对象都将调用formatTo方法;否则将调用toString方法,它可以将对象转换为字符串。

    以使用静态的String.format方法创建一个格式化的字符串;

    时间转换格式符,查表。

    文件输入与输出

    以使用静态的String.format方法创建一个格式化的字符串

    要想对文件进行读取,就需要一个用File对象构造一个Scanner对象;读取一个文本文件时,要知道它的字符编码;类似从控制台输入

    要想写入文件,就需要构造一个PrintWriter对象。

    当采用命令行方式启动一个程序时,可以利用Shell的重定向语法将任意文件关联到System.in和System.out:

    java Myprog < myfile.txt > output.txt
    

    根据给定的路径名构造一个Path: Paths.get(“文件uri”);

    > 大数值
    
    如果基本的整数和浮点数精度不能够满足需求,那么可以使用java.math包中的两个很有用的类:BigInteger和BigDecimal。
    
    Java语言的设计者确实为字符串的连接重载了**+运算符**,但**没有重载其他的运算符**,也没有给Java程序员在自己的类中重载运算符的机会。
    
    

    数组

    数组是一种数据结构,用来存储同一类型值的集合。

    一旦创建了数组,就不能再改变它的大小(尽管可以改变每一个数组元素);

    for each循环:Java有一种功能很强的循环结构,可以用来依次处理数组中的每个元素;

    for (var : collection) statement;
    

    collection这一集合表达式必须是一个数组或者是一个实现了iterable接口的类对象(例如ArrayList)。
    如果不希望遍历集合中的每个元素,或者在循环内部需要使用下标值,还是需要使用传统的方法。

    利用Arrays类的toString方法,调用Arrays.toString(a),返回一个包含数组元素的字符串;

    数组初始化以及匿名数组

    • int[] a = {1,2},注意不需要使用new
    • x = new int[] {1,2,3}.匿名数组。

    在Java中,允许数组长度为0。在编写一个结果为数组的方法时,如果碰巧结果为空,则这种语法形式就显得非常有用。

    拷贝所有值:Arrays.copyOf(), 这个方法通常用来增加数组的大小,用来扩容!!

    命令行参数
    带String arg[]参数,表示main方法,接受一个字符串数组,命令行中,每个字符串用空格分隔开。

    在Java应用程序的main方法中,程序名并没有存储在args数组中。

    数组排序:Arrays.sort(), 数组原地排序。

    Arrays API 包含很多对数组操作的函数。

    多维数组将使用多个下标访问数组元素,它适用于表示表格或更加复杂的排列形式;

    不规则数组

    • Java实际上没有多维数组,只有一维数组。多维数组被解释为“数组的数组。”
  • 相关阅读:
    Django后台admin的使用
    $(.ajax)的使用
    centos7配置双网卡bond
    vsftpd服务的搭建
    linu重置root密码(CentOS7)
    python内置函数
    元组和字典的魔法
    列表的魔法
    字符串的魔法
    zabbix-get
  • 原文地址:https://www.cnblogs.com/hnxbp/p/15026671.html
Copyright © 2011-2022 走看看