目录
类:class 数组:array 接口:interface 枚举:enum 注解:annotation 记录:record
案例1:定义圆周率并赋值为3.14,现有3个圆的半径分别为1.2、2.5、6,求它们的面积。
案例2:小明要到美国旅游,可是那里的温度是以华氏度为单位记录的。 它需要一个程序将华氏温度(80度)转换为摄氏度,并以华氏度和摄氏度为单位分别显示该温度。
一.开发工具
1.快捷键常用
快捷键
* main/psvm,sout,快速插入相关代码
* *CTRL+D:复制当行代码到下一行
* *CTRL+Y:删除当行
* *CTRL+alt+L:格式化
1.1 main/psvm,sout,快速插入相关代码;
如下:
main/psvm: public static void main(String[] args) {
sout: System.out.println()
1.2CTRL+D:复制当行代码到下一行
1.3CTRL+Y:删除当行
1.4CTRL+alt+L:格式化
2.下载链接
二.HelloWorld
注意:public一个java类中只能有一个
public class foundation { //public一个java类中只能有一个
public static void main(String[] args) {
System.out.println("Hello World!!!!!!!"); //println中ln(\n)表示换行
}
}
案例:输出:心形
结合\n(换行),\t(制表符),空格等在控制台打印出如下图所示的效果。
方式一:
class Exercise2{
public static void main(String[] args){
System.out.print("\t");
System.out.print("*");
System.out.print("\t");
System.out.print("\t");
System.out.print("\t");
System.out.print("\t");
System.out.print("\t");
System.out.print("\t");
System.out.print("\t");
System.out.println("*");
System.out.print("*");
System.out.print("\t");
//System.out.print("\t");
System.out.print("\t");
System.out.print("\t");
System.out.print("I love java");
System.out.print("\t");
System.out.print("\t");
System.out.print("\t");
System.out.print("\t");
System.out.print("\t");
System.out.println("*");
System.out.print("\t");
System.out.print("*");
System.out.print("\t");
System.out.print("\t");
System.out.print("\t");
System.out.print("\t");
System.out.print("\t");
System.out.print("\t");
System.out.print("\t");
System.out.println("*");
System.out.print("\t");
System.out.print("\t");
System.out.print("*");
System.out.print("\t");
System.out.print("\t");
System.out.print("\t");
System.out.print("\t");
System.out.print("\t");
System.out.println("*");
System.out.print("\t");
System.out.print("\t");
System.out.print("\t");
System.out.print("*");
System.out.print("\t");
System.out.print("\t");
System.out.print("\t");
System.out.println("*");
System.out.print("\t");
System.out.print("\t");
System.out.print("\t");
System.out.print("\t");
System.out.print("*");
System.out.print("\t");
System.out.println("*");
System.out.print("\t");
System.out.print("\t");
System.out.print("\t");
System.out.print(" ");
System.out.print(" ");
System.out.print("*");
}
结果:
方式二:
class Exercise3{
public static void main(String[] args){
System.out.print("\t"+"*"+"\t\t\t\t\t\t\t\t\t\t\t\t"+"*"+"\t"+"\n");
System.out.print("*"+"\t\t"+"*"+"\t\t\t\t"+"I love Java"+"\t\t\t\t"+"*"+"\t\t"+"*"+"\n");
System.out.print("\t"+"*"+"\t\t\t\t\t\t\t\t\t\t\t\t"+"*"+"\t"+"\n");
System.out.print("\t\t"+"*"+"\t\t\t\t\t\t\t\t\t\t"+"*"+"\t\t"+"\n");
System.out.print("\t\t\t"+"*"+"\t\t\t\t\t\t\t\t"+"*"+"\t"+"\n");
System.out.print("\t\t\t\t"+"*"+"\t\t\t\t\t\t"+"*"+""+"\t"+"\n");
System.out.print("\t\t\t\t\t"+"*"+"\t\t\t\t"+"*"+""+"\t\t"+"\n");
System.out.print("\t\t\t\t\t\t"+"*"+"\t\t"+"*"+""+"\t\t"+"\n");
System.out.print("\t\t\t\t\t\t\t"+"*"+"\n");
}
}
结果:
方法三:
class StarPrinttest {
public static void main(String[] args) {
System.out.println(" * *"); // \t=Tab
System.out.println("* * I love JAVA * *");
System.out.println(" * *");
System.out.println(" * *");
System.out.println(" * *");
System.out.println(" * *");
System.out.println(" * *");
System.out.println(" * *");
System.out.println(" **");
}
}
结果:
三:变量与运算符
3.1 关键字
说明:
- 关键字一共50个,其中const和goto是保留字(reserved word)。
true,false,null不在其中,它们看起来像关键字,其实是字面量,不是关键字,表示特殊的布尔值和空值
3.2 标识符( identifier)
标识符的命名规则(必须遵守的硬性规定):
> 由26个英文字母大小写,0-9 ,_或 $ 组成
> 数字不可以开头。
> 不可以使用关键字和保留字,但能包含关键字和保留字。
> Java中严格区分大小写,长度无限制。
> 标识符不能包含空格。
3.3变量
-
3.30变量的概念:
- 内存中的一个存储区域,该区域的数据可以在同一类型范围内不断变化
- 变量的构成包含三个要素:数据类型、变量名、存储的值
- Java中变量声明的格式:数据类型 变量名 = 变量值
3.31 变量类型
整形:byte \short \int \long
浮点型:float \double
字符型:char
布尔型:boolean
3.32 引用数据类型:
类:class
数组:array
接口:interface
枚举:enum
注解:annotation
记录:record
3.34 使用变量注意
- 使用变量注意:
- Java中每个变量必须先声明,后使用。
- 使用变量名来访问这块区域的数据。
- 变量的作用域:其定义所在的一对{ }内。
- 变量只有在其作用域内才有效。出了作用域,变量不可以再被调用。
- 同一个作用域内,不能定义重名的变量。
3.4 变量的使用
3.4.1 步骤1:变量的声明
//例如:
//存储一个整数类型的年龄
int age;
//存储一个小数类型的体重
double weight;
//存储一个单字符类型的性别
char gender;
//存储一个布尔类型的婚姻状态
boolean marry;
//存储一个字符串类型的姓名
String name;
//声明多个同类型的变量
int a,b,c; //表示a,b,c三个变量都是int类型。
3.4.2 步骤2:变量的赋值
//举例1:可以使用合适类型的常量值给已经声明的变量赋值
age = 18;
weight = 109;
gender = '女';
//举例2:可以使用其他变量或者表达式给变量赋值
int m = 1;
int n = m;
int x = 1;
int y = 2;
int z = 2 * x + y;
//变量可以反复赋值
//先声明,后初始化
char gender;
gender = '女';
//给变量重新赋值,修改gender变量的值
gender = '男';
System.out.println("gender = " + gender);//gender = 男
举例4:也可以将变量的声明和赋值一并执行
boolean isBeauty = true;
String name = "迪丽热巴";
四. 基本数据类型
4.1 整数类型:byte、short、int、long
- 定义long类型的变量,赋值时需要以"l"或"L"作为后缀。
- Java程序中变量通常声明为int型,除非不足以表示较大的数,才使用long。
- Java的整型常量默认为 int 型。
class VariableTest1 {
public static void main(String[] args) {
/* 整形:
byte (1字节)
short (2字节)
int (4字节)
long (8字节)
*/
//long的错误点
//long s=123123123; //error,如果没有加L或l,Java编译器会默认将其视为int类型,可能会导致数据溢出或精度丢失
//System.out.println(s);
long a = 123123123L;//注意:long类型后面要加"L"或"l"
long b = 123123123l;//注意:long类型后面要加"L"或"l"
System.out.println(a);
System.out.println(b);
}
}
结果:
4.2 浮点类型:float、double
浮点型常量有两种表示形式:
-
- 十进制数形式。如:5.12 512.0f .512 (必须有小数点)
- 科学计数法形式。如:5.12e2 512E2 100E-2
float:单精度,尾数可以精确到7位有效数字。很多情况下,精度很难满足需求。
double:双精度,精度是float的两倍。通常采用此类型。
定义float类型的变量,赋值时需要以"f"或"F"作为后缀。
Java 的浮点型常量默认为double型。
class VariableTest2 {
public static void main(String[] args) {
/*
浮点型:
float (4字节) 单精度
double (8字节) 双精度
*/
//浮点型精度不高,如果需要高精度,需要使用BigDecimal类替换浮点型
//float
//float a=1.1;//error,没有加f或F,Java编译器会默认将其视为double类型,可能会导致数据溢出或精度丢失
float b = 1.1f;//注意:float类型后面要加"F"或"f"
float c = 1.1F;//注意:float类型后面要加"F"或"f"
//System.out.println(a);
System.out.println(b);
System.out.println(c);
//double
double d = 1.1;
double e = 1.1d;//注意:double类型后面要加"D"或"d"
double f = 1.1D;//注意:double类型后面要加"D"或"d"
System.out.println(d);
System.out.println(e);
System.out.println(f);
}
}
结果:
4.2.1 应用举例
案例1:定义圆周率并赋值为3.14,现有3个圆的半径分别为1.2、2.5、6,求它们的面积。
class FloatDoubleExer1 {
public static void main(String[] args) {
//定义圆周率赋值3.14
double pi = 3.14;
//3个半径为1.2,2.5,6
double radius1 = 1.2;
double radius2 = 2.5;
int radius3 = 6;
//求面积
double area1 = pi * radius1 * radius1;
double area2 = pi * radius2 * radius2;
double area3 = pi * radius3 * radius3;
System.out.println("圆1的半径为 " + radius1 + ",面积为 " + area1);
System.out.println("圆2的半径为 " + radius2 + ",面积为 " + area2);
System.out.println("圆3的半径为 " + radius3 + ",面积为 " + area3);
}
}
结果:
案例2:小明要到美国旅游,可是那里的温度是以华氏度为单位记录的。 它需要一个程序将华氏温度(80度)转换为摄氏度,并以华氏度和摄氏度为单位分别显示该温度。
/*案列2:转换华氏温度(80度)为摄氏度,并以华氏温度单位和摄氏度单位分别显示温度
摄氏度 = (华氏度 - 32)/1.8
*/
class FloatDoubleExer2 {
public static void main(String[] args) {
//定义华氏温度
double fahrenheit = 80; //华氏温度:fahrenheit
//double fahrenheit = 80.0;
//double fahrenheit = 80.0d;
//double fahrenheit = 80.0D;
//定义摄氏温度
double celsius = (fahrenheit - 32) / 1.8; //摄氏温度:celsius
//double celsius = (fahrenheit - 32) / 1.8d;
//double celsius = (fahrenheit - 32) / 1.8D;
System.out.println("华氏温度为 " + fahrenheit);
System.out.println("摄氏温度为 " + celsius);
}
}
结果:
4.3 字符类型:char
char 型数据用来表示通常意义上“字符”(占2字节)
Java中的所有字符都使用Unicode编码,故一个字符可以存储一个字母,一个汉字,或其他书面语的一个字符。
/*字符型变量的三种表现形式:
–形式1:使用单引号(' ')括起来的单个字符。
例如:char c1 = 'a'; char c2 = '中'; char c3 = '9';
–形式2:直接使用 Unicode值来表示字符型常量:‘\uXXXX’。其中,XXXX代表一个十六进制整数。
例如:\u0023 表示 '#'。
–形式3:Java中还允许使用转义字符‘\’来将其后的字符转变为特殊字符型常量。
例如:char c3 = '\n'; // '\n'表示换行符
*/
4.4 布尔类型:boolean
举例
boolean isFlag = true;
if(isFlag){
//true分支
}else{
//false分支
}
4.3,4.4,4.5 总结
class VariableTest3 {
public static void main(String[] args) {
//字符类型:
// char (2字节)
//表示形式1 使用一对''表示,内部只可以有一个字符,不可以没有,字符不分地域
char c1 = 'a';//单引号
char c2 = '中';//单引号
char c3 = '1';//单引号
char c4 = '%';//单引号
//char c5 = '';//error,不能没有
//char c6 = 'ab';//error,不能有多个
System.out.println(c1);
System.out.println(c2);
System.out.println(c3);
System.out.println(c4);
//System.out.println(c5);
//System.out.println(c6);
//表示形式2 使用Unicode编码表示字符常量:'\ uXXX'
char c7 = '\u0061';//单引号
char c8 = '\u4e2d';//单引号
char c9 = '\u0031';//单引号
char c10 = '\u0025';//单引号
System.out.println(c7);
System.out.println(c8);
System.out.println(c9);
System.out.println(c10);
//表示形式3 使用转义字符表示特殊字符:'\t' '\n' '\r' '\b' '\f' '\"' '\'' '\\' '\0'
char c11 = '\t';//制表符
char c12 = '\n';//换行符
char c13 = '\r';//回车符
char c14 = '\b';//退格符
char c15 = '\f';//换页符
char c16 = '\"';//双引号
char c17 = '\'';//单引号
char c18 = '\\';//反斜杠
char c19 = '\0';//空字符
System.out.println(c11);
System.out.println(c12);
System.out.println(c13);
System.out.println(c14);
System.out.println(c15);
System.out.println(c16);
System.out.println(c17);
System.out.println(c18);
System.out.println(c19);
//表示形式4:Ascii码,字符类型变量在内存中存储的是字符的ASCII码值
char c20 = 97;//=="a”
char c21 = 65;//==“A"
char c22 = 48;//==“0”
System.out.println(c20);
System.out.println(c21);
System.out.println(c22);
//布尔类型 :
//boolean (1字节)
//true (空间占4字节) 因为ture,false分别为1,0,1,0为整形,占4字节
//false (空间占4字节) 因为ture,false分别为1,0,1,0为整形,占4字节
//只有两个值:true,false,用来判断逻辑条件
//true使用1表示,false使用0表示
boolean bo1 = true;
boolean bo2 = false;
System.out.println(bo1);
System.out.println(bo2);
//编译不通过
//boolean bo3 = 0; //boolean只为ture,false
//System.out.println(bo3);
//常使用在流程控制语句中,如:条件判断,循环结构
boolean isMarried = true;
if (isMarried) {
System.out.println("很遗憾,不能参加单身派对");
} else {
System.out.println("可以多几个女朋友");
}
}
}
结果:
五.自动类型提升与强制类型转换
5.1 自动类型提升
规则:将取值范围小(或容量小)的类型自动提升为取值范围大(或容量大)的类型 。
1.自动类型提升
byte \short\char ----> int ---> long ---> float ---> double
注意:特殊的
*(byte+short)在运算时,会自动提升为int类型 怕溢出
*(byte+byte)运算结果为int类型 怕溢出
*(short+short)运算结果为int类型 怕溢出
规则:当容量小与容量大的变量运算时,结果自动转换为容量大的类型
注:容量大与容量小,并非是占用内存空间大小,而是数据范围大小
1)当把存储范围小的值(常量值、变量的值、表达式计算的结果值)赋值给了存储范围大的变量时
int i = 'A';//char自动升级为int,其实就是把字符的编码值赋值给i变量了
double d = 10;//int自动升级为double
long num = 1234567; //右边的整数常量值如果在int范围呢,编译和运行都可以通过,这里涉及到数据类型转换
//byte bigB = 130;//错误,右边的整数常量值超过byte范围
long bigNum = 12345678912L;//右边的整数常量值如果超过int范围,必须加L,显式表示long类型。否则编译不通过
(2)当存储范围小的数据类型与存储范围大的数据类型变量一起混合运算时,会按照其中最大的类型运算。
int i = 1;
byte b = 1;
double d = 1.0;
double sum = i + b + d;//混合运算,升级为double
(3)当byte,short,char数据类型的变量进行算术运算时,按照int类型处理
byte b1 = 1;
byte b2 = 2;
byte b3 = b1 + b2;//编译报错,b1 + b2自动升级为int
char c1 = '0';
char c2 = 'A';
int i = c1 + c2;//至少需要使用int类型来接收
System.out.println(c1 + c2);//113
(4)总结
/*基本数据类型运算规则
1.自动类型提升
byte \short\char ----> int ---> long ---> float ---> double
注意:特殊的
*(byte,short)在运算时,会自动提升为int类型 怕溢出
*(byte,byte)运算结果为int类型 怕溢出
*(short,short)运算结果为int类型 怕溢出
规则:当容量小与容量大的变量运算时,结果自动转换为容量大的类型
注:容量大与容量小,并非是占用内存空间大小,而是数据范围大小
2.强制类型转换
*/
class VariableTest4 {
public static void main(String[] args) {
//1.自动类型提升
byte b1 = 10;
int i1 = b1;
long l1 = b1;
int i2 = b1 + i1;
//byte b2 = b1 + i1; //编译不通过,因为b1(byte)+i1(int)结果为int类型,而b2为byte类型,int类型不能赋值给byte类型
int i3 = b1 + i1; //编译通过,因为b1(byte)+i1(int)结果为int类型,而i3为int类型,int类型可以赋值给int类型
System.out.println(i3);
//**************************************************************************************************************
//特殊的情况1;
byte b3 = 12;
short s1 = 10;
//short s2 = b3 + s1;//编译不通过,因为b3(byte)+s1(short)结果为int类型,而s2为short类型,int类型不能赋值给short类型
byte b4 = 10;
//byte b5 = b3 + b4;//编译不通过,因为b3(byte)+b4(byte)结果为int类型,而b5为byte类型,int类型不能赋值给byte类型
int i4 = b3 + s1;//编译通过,因为b3(byte)+s1(short)结果为int类型,而i3为int类型,int类型可以赋值给int类型
System.out.println(i4);
//**************************************************************************************************************
//特殊的情况2;
/*
(char,byte,short)运算时,结果为int类型
(char,char)运算时,结果为int类型
(char,short)运算时,结果为int类型
(char,byte)运算时,结果为int类型
*/
char c1 = 'a';
//char c2 = c1+b3;//编译不通过,因为c1(char)+b3(byte)结果为int类型,而c2为char类型,int类型不能赋值给char类型
int i5 = c1 + b3;//编译通过,因为c1(char)+b3(byte)结果为int类型,而i5为int类型,int类型可以赋值给int类型
System.out.println(i5);
//**************************************************************************************************************
//练习1:
long l2 = 123L;
long l3 = 123;//编译通过,自动类型提升,因为123为int类型,使123自动转换为long类型,而long类型可以赋值给long类型
//long l4 = 123123123123;//编译不通过,因为123123123123超出int上限
long l5 = 123123123123L;//编译通过,因为123123123123L为long类型,而long类型可以赋值给long类型
System.out.println(l2);
System.out.println(l3);
System.out.println(l5);
//练习2
float f1 = 12.3f;
//float f2 = 12.3;//不满足自动类型提升(double---->float),编译不通过,因为12.3为double类型,而float类型不能赋值给double类型
//练习3
//规定整形常量为int类型,浮点型常量为double类型
byte b6 = 10;
//byte b7 = b6+1;//编译不通过,因为b6(byte)+1(int)结果为int类型,而b7为byte类型,int类型不能赋值给byte类型
double d1 = b6 + 1.1;//编译通过,因为b6(byte)+1.1(double)结果为double类型,而d1为double类型,double类型可以赋值给double类型
System.out.println(d1);
//练习4:说明为什么变量名字为什么开头不能是数字,为了“自洽”
/* int 123L =112;//编译不通过
long l6 = 123L;
*/
}
}
结果:
5.2 强制类型转换
规则:将取值范围大(或容量大)的类型强制转换成取值范围小(或容量小)的类型。
(1)当把存储范围大的值(常量值、变量的值、表达式计算的结果值)强制转换为存储范围小的变量时,可能会损失精度或溢出。
int i = (int)3.14;//损失精度
double d = 1.2;
int num = (int)d;//损失精度
int i = 200;
byte b = (byte)i;//溢出
(2)当某个值想要提升数据类型时,也可以使用强制类型转换。这种情况的强制类型转换是没有风险的,通常省略
int i = 1;
int j = 2;
double bigger = (double)(i/j);
(3)声明long类型变量时,可以出现省略后缀的情况。float则不同。
long l1 = 123L;
long l2 = 123;//如何理解呢? 此时可以看做是int类型的123自动类型提升为long类型
//long l3 = 123123123123; //报错,因为123123123123超出了int的范围。
long l4 = 123123123123L;
//float f1 = 12.3; //报错,因为12.3看做是double,不能自动转换为float类型
float f2 = 12.3F;
float f3 = (float)12.3;
(4)总结
/*规则:
强制类型转换
1.如果需要将容量大的转换为容量小的类型,需要使用强制类型转换
2.强制类型转换需要使用强转符:()。在()内指明转换类型
3.强制类型转换可能导致精度损失,因为数据范围变小了
4.强制类型转换只对一次有效,如果需要多次转换,需要多次使用强制类型转换*/
class VariableTest5 {
public static void main(String[] args) {
double d1 = 12;//自动类型提升
//强制类型转换
//int i1 = d1;//编译不通过,因为double类型不能赋值给int类型
int i1 = (int) d1;//编译通过,因为强制类型转换,将d1(double)强制转换为int类型,而int类型可以赋值给int类型
System.out.println(i1);//12.0---->12
long l1 = 123;
//short s1 = l1;//编译不通过
short s1 = (short) l1;//编译通过,因为强制类型转换,将l1(long)强制转换为short类型,而short类型可以赋值给short类型
System.out.println(s1);//123---->123
//练习1
int i2 = 12;
float f1 = i2;//自动类型提升
System.out.println(f1);//12---->12.0
float f2 = (float) i2;//强制类型转换,只不过可以省略()
System.out.println(f2);//12---->12.0
//练习2:精度损失
double d2 = 12.3;
double d3 = 12.9;
int i3 = (int) d2;//强制类型转换
int i4 = (int) d3;//不遵循4舍5入
System.out.println(i3);//12.3---->12
System.out.println(i4);//12.9---->12
//练习3
int i5 = 128;
byte b1 = (byte) i5;//强制类型转换
System.out.println(b1);//128---->-128
//**********************************************************************************************************************
//实际开发案列:
byte b2 = 12;
methood(b2); //编译通过,因为byte类型可以自动类型提升为int类型,而methood(int)的参数为int类型,int类型可以赋值给int类型
long l2 = 12L;
//methood(l2);//编译通过,因为long类型可以自动类型提升为int类型,而methood(int)的参数为int类型,int类型可以赋值给int类型
methood((int) l2);//编译通过,因为强制类型转换,将l2(long)强制转换为int类型,而methood(int)的参数为int类型,int类型可以赋值给int类型
}
结果:
5.3为什么标识符的声明规则里要求不能数字开头?
//如果允许数字开头,则如下的声明编译就可以通过:
int 123L = 12;
//进而,如下的声明中l的值到底是123?还是变量123L对应的取值12呢? 出现歧义了。
long l = 123L;
标签:JAVA,int,print,数据类型,System,运算符,类型,println,out From: https://blog.csdn.net/2403_87725694/article/details/142864967