目录
引言:
2020年12月16日20:51:19
知识均总结与: 尚学堂java300集课程.以及自己的一些心得体会
java中的注释
-
单行注释: 使用“//”开头,“//”后面的单行内容均为注释。
-
多行注释: 以“/”开头以“/”结尾,在“/”和“/”之间的内容为注释,我们也可以使用多行注释作为行内注释。但是在使用时要注意,多行注释不能嵌套使用。
-
文档注释: 以“/**”开头以“*/”结尾,注释中包含一些说明性的文字及一些JavaDoc标签(后期写项目时,可以生成项目的API)
变量
标识符
标识符是用来给变量、类、方法以及包进行命名的,如Welcome、main、System、age、name、gender等。标识符需要遵守一定的规则:
- 标识符必须以字母、下划线_、美元符号$开头。
- 标识符其它部分可以是字母、下划线“_”、美元符“$”和数字的任意组合。
- Java 标识符大小写敏感,且长度无限制。
- 标识符不可以是Java的关键字。
标识符使用规范:
- 表示类名的标识符:每个单词的首字母大写,如Man, GoodMan
- 表示方法和变量的标识符:第一个单词小写,从第二个单词开始首字母大写,我们称之为“驼峰原则”,如eat(), eatFood()
package 练习;
public class Test {
public static void main(String[] args) {
System.out.println("人生中我们必遭受两种痛苦选项的一项,来自自律的痛苦,或遗憾的痛苦");
int a123 = 10;
// int 12 = 10; 不能数字开头。
int $a =3;
int _abc = 10;
int 年龄 = 22; //一般不推荐使用汉字
//int class = 2 ,不能使用关键字
}
}
Java中的关键字
变量的一些特点
-
变量本质上就是代表一个”可操作的存储空间”,我们可通过变量名来访问“对应的存储空间”,从而操纵这个“存储空间”存储的值。
-
Java是一种强类型语言,每个变量都必须声明其数据类型。变量的数据类型决定了变量占据存储空间的大小。
-
变量作为程序中最基本的存储单元,其要素包括变量名,变量类型和作用域。
声明变量
double salary;
long earthPopulation;
int age;
变量的分内
1:局部变量(local variable)
- 方法或语句块内部定义的变量。生命周期是从声明位置开始到到方法或语句块执行完毕为止。局部变量在使用前必须先声明、初始化(赋初值)再使用。
public class Test {
public void test1() {
int i;
//int j = i+ 5 出错,变量i还没有赋初值
}
public void test2() {
int i;
i = 10;
// j = i +5 编译错误,j 的作用域在test1中
}
public static void main(String[] args) {
System.out.println("人生中我们必遭受两种痛苦选项的一项,来自自律的痛苦,或遗憾的痛苦");
}
}
2:成员变量(也叫实例变量 member variable)
- 方法外部、类的内部定义的变量。从属于对象,生命周期伴随对象始终。如果不自行初始化,它会自动初始化成该类型的默认初始值。
public class Test {
int i; //这就是一个成员变量
public static void main(String[] args) {
System.out.println("人生中我们必遭受两种痛苦选项的一项,来自自律的痛苦,或遗憾的痛苦");
Test object = new Test();
System.out.println(object.i); //输出0
}
}
3: 静态变量(类变量 static variable)
- 使用static定义。 从属于类,生命周期伴随类始终,从类加载到卸载。 如果不自行初始化,与成员变量相同会自动初始化成该类型的默认初始值
课堂代码
package 练习;
public class Test {
int a; //成员变量
static int b; //静态变量
public static void main(String[] args) {
{
int age; //局部变量,从属于 {} 语句块
}
int salary = 10000; //局部变量从属于main()方法
Test object = new Test();
System.out.print(object.a);//输出0
System.out.print(b); //输出0
}
}
常量
常量通常指的是一个固定的值,例如:1、2、3、’a’、’b’、true、false、”helloWorld”等。在Java语言中,主要是利用关键字final来定义一个常量。 常量一旦被初始化后不能再更改其值。
final type varName = value;
变量和常量命名规范:
-
有变量、方法、类名:见名知意
-
类成员变量:首字母小写和驼峰原则: monthSalary
-
局部变量:首字母小写和驼峰原则
-
常量:大写字母和下划线:MAX_VALUE
-
类名:首字母大写和驼峰原则: Man, GoodMan
-
方法名:首字母小写和驼峰原则: run(), runRun()
数据类型
Java的数据类型可分为两大类:基本数据类型(primitive data type)和引用数据类型(reference data type)
Java中定义了3类8种基本数据类型
- 数值型- byte、 short、int、 long、float、 double
- 字符型- char
- 布尔型-boolean
注:引用数据类型的大小统一为4个字节,记录的是其引用对象的地址!
注:Java中并没有将字符串作为简单类型,在Java中有一个类String专门对应字符串的处理
整数类型
整型用于表示没有小数部分的数值,它允许是负数。整型的范围与运行Java代码的机器无关,这正是Java程序具有很强移植能力的原因之一。与此相反,C和C++程序需要针对不同的处理器选择最有效的整型。
- 十进制整数,如:99, -500, 0
- 八进制整数,要求以 0 开头,如:015
- 十六进制数,要求 0x 或 0X 开头,如:0x15
- 二进制数,要求0b或0B开头,如:0b01110011
注:Java语言的整型常数默认为int型,声明long型常量可以后加‘ l ’或‘ L ’ 。
浮点型变量/常量
带小数的数据在Java中称为浮点型。浮点型可分为float类型和double类型。
- float类型又被称作单精度类型,尾数可以精确到7位有效数字
- 在很多情况下,float类型的精度很难满足需求。而double表示这种类型的数值精度约是float类型的两倍,又被称作双精度类型。
- 浮点型常量默认类型是double。
- float类型的数值有一个后缀F或者f ,没有后缀F/f的浮点数值默认为double类型。
- 也可以在浮点数值后添加后缀D或者d, 以明确其为double类型。
Java浮点类型常量有两种表示形式
- 十进制数形式,例如:3.14 314.0 0.314
- 科学记数法形式,如314e2 314E2 314E-2
浮点数的比较
下面是一些浮点数比较中出问题的例子
public class Test {
public static void main(String[] args) {
float f = 0.1f;
double d = 1.0/10;
System.out.println(f==d); //结果为false
float d1 = 423222664f;
float d2 = d1+1;
if(d1 == d2) {
System.out.println("d1 == d2"); //接过 d1 == d2
}else {
System.out.println("d1 != d2");
}
System.out.println(0.1f-0.09d); //结果为010000001490116123
}
}
- 浮点数能够精确表示的数是有限的,因而也是离散的。 浮点数一般都存在舍入误差,很多数字无法精确表示(例如0.1),其结果只能是接近, 但不等于。
java.math包下面的两个有用的类:BigInteger和BigDecimal,这两个类可以处理任意长度的数值。
- BigInteger实现了任意精度的整数运算。
- BigDecimal实现了任意精度的浮点运算。
使用BigDecimal进行浮点数的比较
import java.math.BigDecimal;
public class Test {
public static void main(String[] args) {
BigDecimal bd = BigDecimal.valueOf(1.0); //给bd赋值
System.out.println(bd);
bd = bd.subtract(BigDecimal.valueOf(0.5)); //将bd每次减少0.1
System.out.println(bd);
bd = bd.subtract(BigDecimal.valueOf(0.1));
System.out.println(bd);
System.out.print(1.0 - 0.1 -0.1 -0.1 -0.1 -0.1); //输出0.5000000000000001
}
}
注:如果需要进行不产生舍入误差的精确数字计算,需要使用BigDecimal类。
字符型变量/常量
字符型在内存中占2个字节,在Java中使用单引号来表示字符常量。例如’A’是一个字符,它与”A”是不同的,”A”表示含有一个字符的字符串。
- char 类型用来表示在Unicode编码表中的字符。Unicode编码被设计用来处理各种语言的文字,Unicode具有从0到65535之间的编码,他们通常用从’\u0000’到’\uFFFF’之间的十六进制值来表示(前缀为u表示Unicode)
转义字符:
- Java 语言中还允许使用转义字符 ‘\’ 来将其后的字符转变为其它的含义。
注:String类,其实是字符序列
课堂代码
public class Test {
public static void main(String[] args) {
char a ='W';
char b = '王';
char c = '\u0061'; //字符a
System.out.println(c);
//转义字符
System.out.println(""+'a' + '\n' + 'b');
String str = "abc";
}
}
boolean类型变量/常量
boolean类型有两个常量值,true和false,在内存中占一位(不是一个字节),不可以使用 0 或非 0 的整数替代 true 和 false ,这点和C语言不同。
- boolean 类型用来判断逻辑条件,一般用于程序流程控制 。
public class Test {
public static void main(String[] args) {
boolean flag;
flag = true;
if(flag) {
System.out.println("加油");
}
}
}
自动类型转换
自动类型转换指的是容量小的数据类型可以自动转换为容量大的数据类型。如下图所示,黑色的实线表示无数据丢失的自动类型转换,而虚线表示在转换时可能会有精度的损失。
- 可以将整型常量直接赋值给byte、 short、 char等类型变量,而不需要进行强制类型转换,只要不超出其表数范围即可。
强制类型转换
强制类型转换,又被称为造型,用于显式的转换一个数值的类型。在有可能丢失信息的情况下进行的转换是通过造型来完成的,但可能造成精度降低或溢出。
格式:
(type)var
运算符“()”中的type表示将值var想要转换成的目标数据类型。
- 不能在布尔类型和任何数值类型之间做强制类型转换
- 当将一种类型强制转换成另一种类型,而又超出了目标类型的表数范围,就会被截断成为一个完全不同的值。
运算符
算数运算符
算术运算符中+,-,*,/,%属于二元运算符,二元运算符指的是需要两个操作数才能完成运算的运算符。
二元运算符的运算规则:
整数运算:
- 如果两个操作数有一个为Long, 则结果也为long。
- 没有long时,结果为int。即使操作数全为short,byte,结果也是int
浮点运算:
- 如果两个操作数有一个为double,则结果为double。
- 只有两个操作数都是float,则结果才为float。
取模运算:
- 其操作数可以为浮点数,一般使用整数,结果取“余数”,余数 符号和左边操作数相同,如:7%3=1,-7%3=-1,7%-3=1。
算术运算符中++,–属于一元运算符,该类运算符只需要一个操作数。
public class Test {
public static void main(String[] args) {
int a = 3;
int b = a++; //先执行 b = a, 然后在让a自增 a = 4
System.out.println(b);//输出3
int c = ++a; //先让a自增,然后在1执行 c = a
System.out.print(c);//输出5
}
}
// --与++用法类似
赋值及其扩展赋值运算符
与上面等效的表达式如下:
关系运算符
关系运算符用来进行比较运算,关系运算的结果是布尔值:true/false
注:
- =是赋值运算符,而真正的判断两个操作数是否相等的运算符是==
- ==、!= 是所有(基本和引用)数据类型都可以使用
- > 、>=、 <、 <= 仅针对数值类型(byte/short/int/long, float/double。以及char)
逻辑运算符
注:短路与和短路或采用短路的方式。从左到右计算,如果只通过运算符左边的操作数就能够确定该逻辑表达式的值,则不会继续计算运算符右边的操作数,提高效率。
public class Test {
public static void main(String[] args) {
//1>2的结果为false,那么整个表达式的结果即为false,将不再计算2>(3/0)
boolean c = 1>2 && 2>(3/0);
System.out.print(c);
//1>2的结果为false,那么整个表达式的结果即为false,还要计算2>(3/0),0不能做除数,//会输出异常信息
boolean d = 1>2 & 2>(3/0);
System.out.print(d);
}
}
位运算符
注:
- &和|既是逻辑运算符,也是位运算符。如果两侧操作数都是boolean类型,就作为逻辑运算符。如果两侧的操作数是整数类型,就是位运算符。
- 不要把“^”当做数学运算“乘方”,是“位的异或”操作。
字符串连接符
“+”运算符两侧的操作数中只要有一个是字符串(String)类型,系统会自动将另一个操作数转换为字符串然后再进行连接
int a=12;
System.out.println("a="+a);//输出结果: a=12
条件运算符
格式:
x ? y : z
其中 x 为 boolean 类型表达式,先计算 x 的值,若为true,则整个运算的结果为表达式 y 的值,否则整个运算结果为表达式 z 的值。
运算符优先级
注:
- 不需要去刻意的记这些优先级,表达式里面优先使用小括号来组织
- (逻辑非>逻辑与>逻辑或)。如:a||b&&c的运算结果是:a||(b&&c),而不是(a||b)&&c
简单键盘输入和输出
使用Scanner获取键盘输入
import java.util.Scanner; //导入获取键盘输入的包
public class Test {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in); //创建对象
System.out.println("输入你最喜欢的一句话");
String c = scanner.nextLine(); //使用name接收从键盘输入的信息
System.out.println("希望你能做到你想做的:"+c);
int age = scanner.nextInt();//输入字符串与输入整数的方法不一样
double r = scanner.nextDouble();//输入double
}
}
作业
一:选择题
二:简答题
1:Java是一种强类型语言,说明Java的数据类型分类
- 答:总体分为基本数据类型和引用数据类型,基本数类型可分为 整型、浮点型、字符型、布尔型。引用数据类型可分为数组、类 、接口
2:i++和++i的异同之处
- 两者都是自增1,但两者在赋值运算又表现不同,i++ ,先进行赋值,在自增。而++i,先进行自增,在赋值
3:运算符||和|的异同之处
- || 是短路或,其中只要有一个条件满足,不管第二个条件那么都为true。 |逻辑或,虽然与短路或意义相同,但逻辑或需要运算所有表达式
4:Java中基本数据类型转换的规则
- 容量小的数据类型可以自动转换为容量大的数据类型。整型常量直接赋值给byte、 short、 char等类型变量,而不需要进行强制类型转换,只要不超出其表数范围即可。
三:编码题
1:输入圆形半径,求圆形的周长和圆形的面积,并将结果输出。
import java.util.Scanner; //导入获取键盘输入的包
public class Test {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("输入圆半径:");
double r = scanner.nextDouble();
System.out.println("圆的周长为:"+ 2*3.14*r + "\n面积为:" + r*r*3.14);
}
}
2:银行利率表如下表所示,请计算存款10000元,活期1年、活期2年,定期1年,定期2年后的本息合计。
import java.util.Scanner; //导入获取键盘输入的包
public class Test {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("输入你的存款金额:");
double money = scanner.nextDouble();
System.out.println("活期1年的本利和:"+Math.round(money*(1+0.0035)));
System.out.println("活期2年的本利和:"+Math.round(money*0.0035*2+money));
System.out.println("定期1年的本利和:"+Math.round(money*(1+0.015)));
System.out.println("定期2年的本利和:"+Math.round(money*0.021*2+money));
}
}
3:某个公司采用公用电话传递数据,数据是四位的整数,在传递过程中是加密的,加密规则如下:每位数字都加上5,然后用和除以10的余数代替该数字,再将第一位和第四位交换,第二位和第三位交换。结果如图所示。
import java.util.Scanner;
public class Test{
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("请输入一个4位正整数:");
int a = scanner.nextInt();
int a1 = (a/1000+5)%10;
int a2 = (a/100%10+5)%10;
int a3 =( a/10%10+5)%10;
int a4 = (a%1000+5)%10;
System.out.println("加密后的数字为:"+a4+a3+a2+a1);
}
}