zoukankan      html  css  js  c++  java
  • 重新学习Java——Java基本的程序设计结构(一)

    最近在实验室看到各位学长忙于找工作的面试与笔试,深感自己的不足,决定重新好好学习一下《Java核心技术》这本书,曾经靠这本书走入Java的世界,但是也有很多的地方被我疏漏过去了,因此也是作为一个整理,重新再仔细的学习一遍。

    1. 简单的Java应用程序

    1 public class FirstSample {
    2   public static void main(String[] args) {
    3     System.out.println("Hello, World!");    
    4   }
    5 }

    这个程序很简单,但是说明了Java中最重要的一些基础知识:

    1. Java对大小写敏感;
    2. Java程序中全部的内容都包含在类中;
    3. 类名必须以字母开头,后面可以跟字母和数字,不可以使用Java保留字;
    4. 源代码的文件必须与类名相同;
    5. main方法必须是public,每一个Java程序都必须有一个main方法;

    如果正确的命名了这个文件,并且源代码中没有任何错误,编译这段源代码之后,会得到一个包含了这个类字节码的文件。Java编译器会自动命名为文件名.class。

    2. Java中的注释

    Java的注释并不会出现在可执行程序中。因此,可以添加任意多的注释而不用担心可执行代码会膨胀。Java中,有三种注释的书写方式:

    1. 最常用的方法是使用//,注释内容从//开始到本行结束;
    2. 当需要长篇的注释的时候,可以在每行前都加上//,也可以使用/*和*/将一段比较长的注释括起来。在Java中,/* */注释不能够嵌套;
    3. 第三种注释以/**开始,以*/结束,这种注释可以自动化的生成文档;
    System.out.println("Hello, World!");  // 这样写就可以注释了

    3. Java数据类型

    Java是强类型语言,这就说明必须为某一个变量声明一种类型。共有8中基本类型,其中4种整型,2种浮点,1中表示Unicode编码的char和1种表示真值的boolean类型。

    3.1 整型

    类    型 存 储 需 求 取 值 范 围
    int 4字节 -2147483648——2147483647(约等于20亿)
    short 2字节 -32768——32767
    long 8字节 -9223372036854775808——923337203685477807
    byte 1字节 -128——127

    通常情况下,int型即可满足我们大部分的要求。byte和short用于诸如底层的文件处理或者需要控制占用字符空间量的大数组。Java中,整型的范围与运行Java代码的机器无关,这就解决了跨平台移植的问题。长整形数值后有一个L(如40000000000L),十六进制前缀0x(如0xCAFE),八进制前缀0(如010)。建议不适用八进制常数,因为容易混淆。并且Java中没有任何无符号类型

    3.2 浮点类型

         存 储 需 求 取 值 范 围
    float 4字节 大约±3.40282347E+38F(有效位数为6-7位)
    double 8字节 大约±1.79769313486231570E+308(有效位数为15位)

    绝大部分应用程序都应该采用double类型,只有很少的情况使用float类型,如需要快速的处理单精度数据,或者需要存储大量数据。float有后缀F(如3.402F),double可以加后缀D也可以不加。在JDK5.0中,可以使用十六进制表示浮点数值。浮点数不适合用于禁止出现舍入误差的金融计算中,原因是浮点数采用二进制,无法精确的表示分数1/10。需要的话,应当使用BigDecimal类进行计算。

    有三个特殊的,用于表示一处和出错情况的浮点数值:

    • 正无穷大Double.POSITIVE_INFINITY
    • 负无穷大Double.NEGATIVE_INFINITY
    • NaN(不是一个数字)Double.NaN
    if (x == Double.NaN) // 这样做是不对的,所有的非数值的值都认为是不相等的
    
    if (Double.isNaN(x)) // 这样可以用来检测x是不是不是一个数

    3.3 char类型

    char表示单个字符,常用来表示字符常量。'A'是编码65对应的字符常量。“A”是一个包含了字符A的字符串。Unicode编码表示为十六进制从u0000到Uffff。在Java中,char类型采用UTF-16编码描述一个代码单元,建议不在程序中使用char

    特殊字符的转移序列如下:表示退格, 表示指标, 表示换行, 表示回车,“表示双引号,‘表示单引号,\表示反斜杠。

    3.4 boolean类型

    boolean类型有两个值,false和true,用来进行逻辑判断。整型值和布尔型之间不能够进行相互转换(C++可以,但Java不行)

    4. Java变量

    在Java中,每一种变量属于一种类型(可以是基本类型,也可以是结构,或者是类)变量名必须以字幕开头的由数字和字母构成的序列(任何Unicode字符,+和①这样的不行,空格也不行),也不能使用Java保留字,变量对大小写敏感

    int i, j; // 可以在一行中声明多个变量,但是不提倡这么使用,降低了程序的可读性

    4.1 变量的初始化

    在声明一个变量之后,必须使用赋值语句对变量进行显示的初始化

    int vacationDays;
    System.out.println(vacationDays); // 这样写是不对的,变量没有初始化,编译器会报错

    Java中的代码声明可以放在任何地方。C++区分变量的声明与定义,Java不区分。

    4.2 常量

    Java中,利用关键字final声明常量(C++使用const,但是Java中设置const为保留字,但不使用),一旦被复制之后,就不能够再更改了。习惯上,常量名使用大写。如果希望常量在一个类的多个方法中使用,可以使用关键字static fianl设置,这样,这个常量就属于整个类的静态成员。

    // 可以在别的地方通过Constants.PI调用这个常量
    public class Constants {
      public static final double PI = 3.14;
    }

    5. 运算符

    在Java中,使用+,-,*,/。当参与/运算的两个操作数都是整数时,表示整数除法,否则表示浮点除法。%用来进行求余操作。整数被0处将产生异常,浮点数被0除将会得到无穷大或NaN的结果。

    可以使用简化的格式书写二元算术运算符:x+=4;等价于x = x + 4;

    同一运算在不同的虚拟机上运行,得到相同的结果对于浮点计算来说是困难的。原因是double使用64位存储,而有的处理器用80位浮点寄存器,增加了中间过程的计算精度。可以使用strictfp关键字标记方法或类,这样该方法必须使用严格的浮点计算来产生理想的记过。

    5.1 自增运算符与自减运算符

    由于程序语言中,加1,减1是数值变量最常见的操作,因此提供了自增与自减运算符:n++将变量的当前值加1,n--将当前值减1。自增自减分为前缀(++n)和后缀(n++)两种形式。如果在表达式中出现,后缀先对变量进行加1处理,再运行表达式,而前缀先进行表达式运算,再进行加1处理。

    int m = 7;
    int n = 7;
    int a = 2 * ++m; // 结果a的值是16,m是8
    int b = 2 * n++; // 结果b的值是14,n是8
    // 建议不要在表达式内部使用++符号,会造成迷惑,并产生意外的BUG

    5.2 关系运算符与boolean运算符

    Java包含各种关系运算符。==检测是否相等,!+检测是否不相等,以及<,>,<=,>=。

    &&表示逻辑”与“,||表示逻辑”或“,!表示逻辑”非“。Java的逻辑运算采用”短路“方式求值,如果第一个操作数已经能够确定值,则不计算第二个操作符

    boolean a = false;
    int b = 1;
    
    if (a && (--b < 1) == true) {} // 该语句执行完之后,b的值仍然为1,因为a的值既可以确定表达式,所以后面的表达式短路了,不运行

    Java支持三元操作符?:。condition ? expression1 : expression2;

    return x < y ? x : y; // 返回x和y中较小的一个

    5.3 位运算符(我自己也弄不清楚)

    在处理整型数值时,可以直接对各个位进行操作。位运算符包括:&(与),|(或),^(异或),~(非)。&和|用于布尔值,不按短路方式计算。使用”>>“和'<<"可以进行右移或左移操作。”>>>“用0填充高位,">>"用符号位填充高位。对移位运算符右侧的参数要进行模32的操作,左边是long型则模64,所以1<<35和1<<3是相同的。

    C++中,无法确定>>是算式移位还是逻辑移位,执行中会自动选择效率高的一种。>>实际上只是为非负数定义的。Java消除了这种含糊性。

    5.4 数学函数与常量

    在Math类中,包含了各种各样的数学函数。可以方便的进行数学计算。

    // 计算一个数值的平方根
    double y = Math.sqrt(x); 
    
    // 计算x的a次方
    double y = Math.pow(x, a);
    
    // Math类还提供了一些常用的三角函数,指数等,还提供了PI和E的近似值
    Math.PI
    Math.E
    
    // 从JDK 5.0开始,只需要通过静态导入,即可不加Math.来操作函数
    import static java.lang.Math.*;
    double y = pow(x, a);

    Math类同样具有浮点计算中跨平台的问题,如果希望在每一个不同的平台上能够得到相同的结果,应当使用StrictMath类进行操作。

    5.5 数值类型之间的转换

    在程序运行时,经常需要将一种数值类型转换成另一种数值类型。

    无信息丢失的转换:byte到short,short到int,char到int,int到long,int到double;

    可能有精度损失的转换:int到float,long到float,long到double;

    int n = 123456789;
    float f = n; // 这时f=1.23456792E8
    // 当用两个不同的数做二元操作时,会自动进行转换
    // 有一个是double,另一个也会转成double
    // 否则有一个是float,另一个也会转成float
    // 否则有一个是long,另一个也会转成long
    // 否则都会被转成int

    5.6 强制类型转换

    上一段介绍的数值类型之间的转换属于自动转换。但有时候我们需要将double转换成int类型,Java允许这种转换,但可能会丢失一些信息,需要通过强制转换操作实现

    double x = 9.997;
    int nx = (int) x; // x=9,强制转换通过截断小数部分将浮点值转换为整形
    double x = 9.997;
    int nx = (int) Math.round(x); // 通过这个方法,可以对浮点值进行舍入操作,此时nx=10

    如果试图将一个数值从一种类型强制转换到另一种类型,却又超出了目标类型的表示范围,结果就会变成一个完全不同的值,如(byte) 300的值是44

    5.7 枚举类型

    有时候,变量的取值旨在一个有限的集合内。例如,衣服的尺码S,M,L,X等,如果用普通的字符串或者基本类型来保存,则存在着一定的隐患,例如传送进去了一个错误的值。

    class Size {
     public static final String SMALL = "SMALL";
     public static final String MEDIUM= "MEDIUM";
     public static final String LARGE= "LARGE";
     public static final String EXTRA_LARGE= "EXTRA_LARGE";
    }
    
    // 我们应当这么使用Size对象
    clothe.setSize(Size.SMALL);
    
    // 但是我们也可以这么使用,带来未知的错误,因为一些拼写的意外等
    clothe.setSize("Small");

    从JDK5.0开始,针对这样一种情况,可以自定义枚举类型,例如

    enum Size {SMALL, MEDIUM, LARGE, EXTRA_LARGE};
    
    // 这样就不会出现问题,因为setSize方法需要接受一个Size的枚举类型
    clothe.setSize(Size.MEDIUM);
  • 相关阅读:
    AngularJs学习笔记--directive
    angularjs 路由(1)
    走进AngularJs(一)angular基本概念的认识与实战
    angularjs- 快速入门
    从angularJS看MVVM
    中软国际 问题一php的优缺点
    elasticsearch head安装后无法连接到es服务器问题
    Laravel5.3 流程粗粒度分析之bootstrap
    mysql执行大量sql语句
    Laravel RuntimeException inEncrypter.php line 43: The only supported ciphers are AES-128-CBC and AES-256-CBC with the correct key lengths
  • 原文地址:https://www.cnblogs.com/yijianguxin/p/3319391.html
Copyright © 2011-2022 走看看