Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Java的基本程序设计结构 #24

Open
yankewei opened this issue Apr 26, 2020 · 0 comments
Open

Java的基本程序设计结构 #24

yankewei opened this issue Apr 26, 2020 · 0 comments
Labels
Java 有关 Java 语言的

Comments

@yankewei
Copy link
Owner

yankewei commented Apr 26, 2020

1. 第一个简单的Java应用程序

创建一个文件HelloWorld.java

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

然后在命令窗口执行:

  • 先执行javac Welcome.java会生成一个同名的以.class文件结尾的文件Welcome.class
  • 再执行java Welcome,就会看到输出Hello World

这个程序虽然简单,但也可以看到其中的一些规范。

  • Java语言是一个区分大小写的语言,如果我们把main改为Main,那么就会运行错误。这里说的的运行错误,不是编译错误。
  • public是这个类的修饰符,每个类都应该又一个修饰符。
  • 类名应该于文件名保持一致。
  • 遵循规范,类名的首字母必须为大写。

2. 注释

就没什么好说的了,单行注释用//,多行注释用/*,*/将其包裹。

3. 数据类型

Java是强类型语言,意味着每个变量必须有一个确定的类型。
Java一共有8中基本类型,其中有4种整型,2种浮点类型,1种用于表示Unicode编码的字符单元的字符类型char,1种用于表示真值的boolean的类型。

3.1 整型

类型 存储需求 取值范围
int 4字节 -2 147 483 648 ~ 2 147 483 647
short 2字节 -32 768 ~ 32767
long 8字节 -9 223 372 036 854 775 808 ~ 9 223 372 036 854 775 807
byte 1字节 -128 ~ 127

java没有无符号类型???
长整型long有一个后缀L或l(如4000000000L)。十六进制数值有一个前缀0x或0X(如0xCAFE)。
从Java7开始,加上前缀0b或0B就可以写二进制数。例如。0b1001就是9。另外,从Java7开始,还可以位数字字面量加下划线,如用1_999_999表示,更加的易读,编译器会自动去除这些下划线。

3.2 浮点类型

浮点类型用于表示有小数部分的数值。有两种类型,floatdouble:
float类型的数值有一个后缀F或f(例如3.14F)。没有后缀F的浮点数值(如3.14)默认为double类型。当然也可以在浮点数值后面添加后缀D或d(如3.14D)。
double的数值精度是float的两倍,绝大部分应用程序都采用double类型。
很多语言的浮点类型都以一定的误差,比如System.out.println(0.3-0.2);将输出0.09999999999999998,而不是我们想象的0.9,这种舍入误差的主要原因是浮点数值采用二进制系统表示。如果我们的系统不允许有任何的误差,就应该使用BigDecimal类,以后会介绍。

3.3 char类型

char类型用来表示一个字符,例如'A','a'。还有一个特殊符号,比如

转义序列 名称 Unicode值
\b 退格 \u0008
\t 制表 \u0009
\n 换行 \u000a
\r 回车 \u000d

所以在写注释或者编码的时候注意\有可能有转义字符,如"\users",会认为不是一个合法的Unicode转义。
char类型和字符串类型不一样,char类型是用单引号包括的,"A"是一个包含一个字符A的字符串,而'A'是一个char类型的字符。

3.4 boolean类型

boolean类型有两个值:false和true,用于逻辑条件的判断,整型值和布尔值之间不能进行相互转换。

4. 变量

在Java种,每个变量都有一个类型,在声明变量时,类型位于变量之前:

double salary;
int counts;
long earthPeople;

4.1 变量的初始化

声明一个变量之后,必须用赋值语句对变量进行显式初始化,不要使用未初始化的变量,如:

int counts;
System.out.println(counts); // Error--variable not initialized

要对一个变量进行赋值,也很简单,把值放在=的右侧即可:

int counts;
counts = 100;

也可以在声明变量的时候直接赋值:

int counts = 100;

4.2 常量

在Java种,利用关键字final指示常量,例如:

public class Welcome
{
    public static void main(String[] args) {
        final int ONE_MINUTE_SECONDS = 60;
        System.out.println(ONE_MINUTE_SECONDS); // output: 60
    }
}

关键字final表示的常量只能被赋值一次,不可改变的,习惯上,常量名使用全大写。
如果一个常量会在一个类的多个方法种使用,可以称为类常量,可以使用关键字static final设置一个类常量,这样就可以在所有方法种调用:

public class Welcome
{
    public static final int ONE_MINUTE_SECONDS = 60;
    public static void main(String[] args) {
        System.out.println("one hour equal " + 60 * ONE_MINUTE_SECONDS + " seconds");
        // output: one hour equal 3600 seconds
    }
}

很多其它的语言定义常量使用const关键字,而在Java中const是保留的关键字,必须使用final来定义常量。

5 运算符

使用算术运算符+、-、*、/、%表示加、减、乘、除、取模运算。除法运算的两个操作数都是整数是,结果也是整数,否则就是浮点数。有个细节需要注意的就是,整数被0除会产生一个异常,而浮点数被0除会得到一个无穷大的结果

5.1 数值类型之间的转换

经常需要将一种数值类型转换为另一种数值类型。
Java数值类型之间的转换
图中有6个实心箭头,表示无信息丢失的转换,3个虚箭头,表示可有会有精度损失的转换。

  • 如果两个操作数中有一个是double类型,另一个操作数就会转换为double类型。
  • 否则,如果其中一个操作数是float类型,另一个操作数将会转换为float类型。
  • 否则,如果其中一个操作数是long类型,另一个操作数将会转换为long类型。
  • 否则,两个操作数都将被转换为int类型。

5.2 强制类型转换

前面说到,在必要的时候,int类型的值将会自动地转换为double类型,但另一方面,有时也需要将double转换为int,当然,有可能会丢失一些信息。在这种情况下,我们需要通过强制转换实现这个操作,语法:

double x = 9.997;
int nx = (int) x;
System.out.println(nx); // output: 9

如果想对浮点数进行舍入运算,那就需要使用Math.round方法:

double x = 8.1241D;
int nx = (int) Math.round(x);
System.out.println(nx); // output: 8

这里仍需要强制转换,因为Math.round()的返回值是long类型的,转换为int会存在信息丢失的可能型,所以需要强制转换。
如果试图将一个数值转换为另一个类型,但是数值又超出了这个类型的范围,结果就会返回一个完全不同的值:

int x = 257;
byte y = (byte) x;
System.out.println(y); // output: 1

5.3 结合赋值和运算符

可以在赋值中使用二元运算符,这是一种很方便的简写方式。如:

x += 4
// 等价于 x = x + 4

如果运算符右侧的类型和左侧的不一致,会发生类型转换。如:

int x = 4;
x += 3.5;
System.out.println(x); // 7
// 等价于 (int)(x + 3.5)

5.4 自增与自减符号

和其它语言一样,自增和自减有两种方式,前缀和后缀。区别就是改变变量的时机不同,如:

int x = 1;
y = ++x; //  y 是2
z = y++; // z 是2

5.4 关系和boolean运算符

要检测相等性,使用两个等号==;
要检测不想等,使用!=;
还有其它的><>=<=
逻辑运算符&&表示‘与’运算,||表示‘或’运算,!表示‘非’运算符。都遵循短路方式。
另外java也支持三元运算符condition ? expression : expression

@yankewei yankewei added the Java 有关 Java 语言的 label Apr 26, 2020
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Java 有关 Java 语言的
Projects
None yet
Development

No branches or pull requests

1 participant