Java语言程序设计(第12版)个人复习 第二章

Java语言程序设计(第12版)个人复习 第二章

第二章知识点

加号(+) 有两种意义:

1.种用途是做加法,
2.另一种用途是做字符串的连接(合并)。它把两个字符串合并为一个。如果一个字符串和一个数值连接,数值将转化为字符串然后再和另外一个字符串连接。

源代码中字符串不能跨行,因此下面语句将导致编译错误

在这里插入图片描述为了改正错误,将该字符串分成几个单独的子串,然后再用连接符(+) 将它们组合起来:
在这里插入图片描述

标识符必须遵守以下规则:

标识符是由字母、数字、下划线( _ )和美元符号( $ )构成的字符序列。
标识符必须以字母、下划线( _ )或美元符号( $ )开头,不能以数字开头。
标识符不能是保留字。保留字在java语言中具有特定含义。关键字是保留字(如下图)。
在这里插入图片描述
标识符可以为任意长度

变量的声明与赋值

如果几个变量为同一类型,可以一起声明它们:
datatype variable1,variable2,…,variablen;
变量之间用逗号隔开,例如:
int i,j,k;//declare i,j and k as int variables
使用简捷的方式来同时声明和初始化同一类型的变量:
int i = 1, j = 2;
变量的赋值,下列赋值是正确的:
在这里插入图片描述
如果要一个值赋给多个变量,可以采用链式赋值,如下所示:
i = j = k = 1;
等价于:
k = 1;
j = k;
i = j;
ps!!int i = j = k = 1;是错误的

常量命名

final datatype CONSTANTNAME = value;

必须在同一条语句中对常量进行声明和赋值。final是声明常量的Java关键字。按照惯例,常量中所有的字母都要大写。

命名习惯

a.用小驼峰法命名变量和方法
b.用大驼峰法命名类和接口
c.常量中所有字母大写,两个单词间用下划线连接(MAX_VALUE)

数值数据类型和操作

在这里插入图片描述

整数
​ byte 1个字节 -128 127
​ short 2个字节 -32768 32767
​ int 4个字节 -21亿 21亿 写一个整数常量 默认是int类型
​ long 8个字节 long范围>int范围
​ 小数
​ float 4个字节 float范围>long范围
​ double 8个字节 double范围>float范围 写一个小数常量 默认是 double类型
​ 字符
​ char 2个字节 char范围=short范围
​ 布尔
​> boolean 1个字节 true false

操作符

在这里插入图片描述

当除法的两个操作数均为整数时,除法的结果为商,而小数部分截去。所以,为了执行浮点数的除法,其中一个操作数必须是浮点数。

操作符%通常用于正整数,但也可用于负整数和浮点值。只有当被除数是负数时,余数才是负的。
例如:-7%3的结果是-1, -7%-3的结果是-1, 7%-3的结果是1。

数值型字面值

整型字面值

默认是int
long类型需要在后面加上l或者L

默认情况下,整型字面值是一个十进制整数。如果表示一个二进制整型字面值,使用前置0b或者0B;如果表示一个八进制整型字面值,使用前置0;而要表示一个十六进制整型字面值,使用前置0x或0X

System.out.println(0B1111); // Displays 15
System.out.println(07777); // Displays 4095
System.out.println(0XFFFF); // Displays 65535
浮点型字面值

浮点字面值带小数点,默认为double类型。float型值在数值后面加上f或F。也可以用1.2d或者1.2D表示double型。

float型值有6 ~ 9个有效数字,而double型值具有15 ~ 17个有效数字

为了提高可读性,Java允许在一个数值型字面值中使用下划线分隔两个数字。例如:
然而,45_和_45是不正确的。下划线必须置于两个数字之间

long value = 232_45_4519;
double amount = 23.24_4545_4519_3415;

显示当前时间

通过调用System.currentTimeMillis();返回当前时间。
System类中的方法currentTimeMillis返回从GMT1970年1月1日零点开始到当前时刻的毫秒数。这一时间被称为UNIX时间戳(UNIX epoch)时间戳是时间开始计时的点,因为1970年是UNIX操作系统正式发布的时间。
在这里插入图片描述

可以使用这个方法获取当前时间,然后按照如下步骤计算出当前的秒数、分钟数和小时数:
1 ) 调用 System.currentTimeMillis() 方法获取 1970 年 1 月 1 日午夜到现在的毫秒数(例如:1203183086328 毫秒),并存放在变童 totalMilliseconds 中。
2 ) 通过将总毫秒数 totalSeconds 除以 1000 得到总秒数 totalSeconds (例如:1203183068328 毫秒 /1000=1203183068 秒)。
3 ) 通过 totalSeconds % 60得到当前的秒数(例如: 1203183068秒%60=8,这个值就是当前秒数)。
4 ) 通过将 totalSeconds 除以60得到总的分钟数 totalMinutes (例如:1203183068秒 /60=20053051分钟)。
5 ) 通过 totalMinutes%60 得到当前分钟数(例如:20053051分钟%60=31, 这个值就是当前分钟数)。
6 ) 通过将总分钟数 totalMinutes 除以 60 获得总的小时数 totalHours (例如: 20053051分钟 /60=334217 小时)。
7 ) 通过 totalHours % 24 得到当前的小时数(例如:334217 小时%24=17, 该值就是当前小时数)。

class test {
    public static void main(String[] args) {
        // Obtain the total milliseconds since midnight, Jan 1, 1970
        long totalMilliseconds = System.currentTimeMillis();
        // Obtain the total seconds since midnight, Jan 1, 1970
        long totalSeconds = totalMilliseconds / 1000;

        // Compute the current second in the minute in the hour
        long currentSecond = totalSeconds % 60;

        // Obtain the total minutes
        long totalMinutes = totalSeconds / 60;

        // Compute the current minute in the hour
        long currentMinute = totalMinutes % 60;

        // Obtain the total hours
        long totalHours = totalMinutes / 60;

        // Compute the current hour
        long currentHour = totalHours % 24;

        // Display results
        System.out.println("Current time is " + currentHour + ":" +
                + currentMinute + ":" + currentSecond + " GMT");
    }
}

在这里插入图片描述
Java还提供了System.nanoTime()方法以返回以纳秒为单位的流逝时间。nanoTime()比currentTimeMillis()更加精确

增强赋值操作符

增强赋值操作符在表达式中的所有其他操作符计算完成之后才执行
在这里插入图片描述
在这里插入图片描述

自增和自减操作符

先计算左侧的操作数规则优于任何其他控制表达式的规则。
在这里插入图片描述

int a = 10;
int b = 20;
int c = 30;
int d = 40;
int e = a++ + --b - --c + d-- * ++a + --b;  
System.out.println(e);  

在这里插入图片描述

数值类型转换

byte < short = char < int < long < float < double
boolean不参与转换

System.out.println('a' + 0);//a是char类型 要向int类型转换
隐式类型转换:

小范围数据类型转换为大范围数据类型。
不同的数据类型之间不能进行运算,只有转化为同一种类型才可以进行运算。

规则:

1.比int小的都转化为int

class Demo {
	public static void main(String[] args){
		byte a = 10;
		short b = 20;
		byte c = a + b;  //编译报错 因为a+b的结果是int类型 大类型无法向小类型进行转换
		byte c = (byte) (a + b) ;//可以强制类型转换
		System.out.println(c);
	}
}

2.比int大的数据类型进行转换时,小范围数据类型会自动转为大范围数据类型

public class Demo {
	public static void main(String[] args) {
		long lo = 100L;
		double d = 3.14;
		int a = lo +d; // 编译报错  long和double运算  long会自动转double
		double dou = lo +d;
		System.out.println(dou);

		long lon = (long) (lo + d);
		System.out.println(lon);
	}
}
强制类型转换:

大范围数据类型强制转为小范围数据类型

情况:

1.大转小,大超小的范围,转过去之后数据发生改变,意义不大

		int a = 200;
		byte b = (byte)a;  // 强制类型转换
		System.out.println(b); // -56

2.大转小,大未超过小的范围,转过去之后数据不发生改变

		int c = 100;
		byte d = (byte)c; // 意义所在
		System.out.println(d); //100

3.浮点数转整数:
切掉小数部分

		double dou = 3.14;
		int i = (int)dou; //意义所在
		System.out.println(i);//3 
类型转换注意事项:

1.boolean不参与任何类型转换

boolean b = true;
int c = b; //编译报错 
int a = (int)b; //编译报错
System.out.println(a);

2.常量优化机制(基本类型中只有比int小的数据才有常量优化)
常量优化是为了小数据类的快捷运算

public class Demo {
	public static void main(String[] args) {
		System.out.println(100); // 默认是 int 类型 4个字节。

		byte b = 100; // 正确的。 100虽然是int的 但是他是一个常量数据。  常量优化机制 
			//底层 其实是这样的 byte b = (byte)100;

		int a = 100;
		byte c = a;  //错误的 因为a是变量  只有常量才有 常量优化机制。

		byte d = 80 + 20;  //正确的  常量优化
			// 常量的运算 在编译成class文件的时候,  就已经把 80+20  变成了100 
			// 也就是说 等这句话 编译到了class文件的时候 就变成了 byte d = 100;  就又符合常量优化机制了。
			//大的数据类型是在运行的时候完成运算,所以没有常量优化
		byte e = 80;
		byte f = e+20; //  编译报错  e是变量

		// 以上的特点 ---演示的都是 比int小的 基本类型常量。
		// 在基本类型里面 只有 比int小的数据 才遵循常量优化机制。  比int大的没有。

		System.out.println(3.14); // 默认是double类型

		float flo = 3.14;  // 编译报错 double转float 报错。    比int大的没有常量优化机制。

		// 所以我们为了在 一个 小数常量的时候  告诉jvm  我这个小数常量 不再是默认是 double类型了 所以 我们就在小数后面加一个 F
		System.out.println(3.14F);  // 是float类型

		float flo = 3.14F;

		System.out.println(b);
	}
}
  • ps
byte d = 10;
	d += 5;
	System.out.println(d);//不报错 为15,+=底层自带强制类型转换
int e = 10;
int f = e+=1;//不报错,先算表达式的结果,表达式都是有结果的

3.long类型要在数据结尾加L

public class Demo12 {
	public static void main(String[] args) {
		int a = 100;
		long lo = a;
		System.out.println(lo);

		long lo = 100;
		System.out.println(lo);

		System.out.println(10000); //默认是int类型     int类型的范围 21亿

		//System.out.println(10000000000); //100亿
		// 所以 我们此时 就想 写一个 比21亿大的数据
		// 你需要告诉jvm  我现在写的这个数 不再是 int类型的  而是long类型     你怎么告诉jvm  你只需要在后面加一个 L 就告诉他了。

		System.out.println(10000000000L);
	}
}	

关键术语

在这里插入图片描述

课后习题

2.1 (Convert Celsius to Fahrenheit)

Write a program that reads a Celsius degree in a double value from the console, then converts it to Fahrenheit, and displays the result. The formula for the conversion is as follows:
                                            fahrenheit = (9 / 5) * celsius + 32
Hint: In Java, 9 / 5 is 1, but 9.0 / 5 is 1.8.
Here is a sample run:
在这里插入图片描述

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: 很高兴回答您的问题!这是一个关于Java编程语言设计的复习题目。下面是我的答案: 1. 什么是Java的垃圾回收器(Garbage Collector)?它是如何工作的? 答:Java的垃圾回收器是一种自动内存管理机制,它可以自动检测和回收不再使用的内存,从而减轻开发人员手动管理内存的负担。它的工作原理是检测哪些对象不再被引用,然后释放这些对象所占用的内存空间。Java垃圾回收器使用了不同的算法,如标记-清除(Mark and Sweep)、复制(Copying)、标记-整理(Mark and Compact)等。 2. Java中的“==”和“equals()”有什么区别? 答:在Java中,“==”用于比较两个对象的引用是否相等,即它们是否指向同一个内存地址。而“equals()”用于比较两个对象的内容是否相等,即它们的属性是否相同。通常来说,我们重载equals()方法来比较自定义对象的相等性。 3. 什么是Java的多线程编程?Java中如何实现多线程? 答:Java的多线程编程是指在同一时间内,程序中有多个线程在执行不同的任务。Java中可以使用Thread类和Runnable接口来创建和启动线程。当我们使用Thread类时,可以继承Thread类并重写run()方法。而当我们使用Runnable接口时,需要实现Runnable接口并重写run()方法。在Java中,使用synchronized关键字可以保证同一时间只有一个线程访问共享资源,从而避免线程冲突。 希望这些回答能帮到您!如果您有任何其他问题,请随时提出。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值