重新学习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 整型

类    型存 储 需 求取 值 范 围
int4字节-2147483648——2147483647(约等于20亿)
short2字节-32768——32767
long8字节-9223372036854775808——923337203685477807
byte1字节-128——127

 

 

 

 

 

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

3.2 浮点类型

类    型存 储 需 求取 值 范 围
float4字节大约±3.40282347E+38F(有效位数为6-7位)
double8字节大约±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

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

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

转载于:https://www.cnblogs.com/yijianguxin/p/3319391.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值