当前位置:   article > 正文

学JAVA程序架构_重新学习Java——Java基本的程序设计结构(一)

java是强类型的语言,每个变量都要声明一个类型8中基本类型,其中4种整形、2种浮点

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

1. 简单的Java应用程序

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

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

Java对大小写敏感;

Java程序中全部的内容都包含在类中;

类名必须以字母开头,后面可以跟字母和数字,不可以使用Java保留字;

源代码的文件必须与类名相同;

main方法必须是public,每一个Java程序都必须有一个main方法;

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

2. Java中的注释

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

最常用的方法是使用//,注释内容从//开始到本行结束;

当需要长篇的注释的时候,可以在每行前都加上//,也可以使用/*和*/将一段比较长的注释括起来。在Java中,/* */注释不能够嵌套;

第三种注释以/**开始,以*/结束,这种注释可以自动化的生成文档;

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。

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

3.4 boolean类型

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

4. Java变量

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

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

4.1 变量的初始化

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

intvacationDays;

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

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

4.2 常量

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

//可以在别的地方通过Constants.PI调用这个常量

public classConstants {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等,如果用普通的字符串或者基本类型来保存,则存在着一定的隐患,例如传送进去了一个错误的值。

classSize {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开始,针对这样一种情况,可以自定义枚举类型,例如

enumSize {SMALL, MEDIUM, LARGE, EXTRA_LARGE};//这样就不会出现问题,因为setSize方法需要接受一个Size的枚举类型

clothe.setSize(Size.MEDIUM);

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/2023面试高手/article/detail/548702
推荐阅读
相关标签
  

闽ICP备14008679号