Java基础知识篇02——Java基本语法
一、数据类型
定义:
就是用了保存数据的一个类型,一种数据类型,只能保存该类型数据值
作用:
- 只有了解数据类型,才能选择合适的类型存放数据,才能更好的利用计算机硬件资源(内存和硬盘等)。
- 不同的数据类型存放数据大小是不同的。
- 数据类型的使用方式就是用来声明一个变量,装数据的。
常用的整数类型是 int 和 long,byte 和 short 基本不用,常用的小数类型是 double,float 基本不用 ,因为 double 是不精确的,在实际开发中表示精确的小数我们使用 BigDecimal 类。
计算机存储数据:存储在硬盘【磁盘】,硬盘中的方式都是用的二进制数据的方式进行存储 01010101010101010101010101010101
计算机底层本质存储的数据形式就是二进制数据:例如 0101010101010101
1.1、基本数据类型
1.1.1、整型:
整数类型包含:byte、short、int、long
整数的默认类型为:int
为什么需要整数有四种类型?
因为不同的数据类型,占用的内存空间不一样,能够存储的值范围也就不一样
注意事项:
- byte的范围大小 [-128,127]
- long赋值时,因为整数默认是int类型,要转换为long类型的值,后面加上l或L【建议写大写L】
- 如果超过了long的范围,用BigInteger的类来存放其值【后面学习】
- 同一个整数可以使用不同的进制表示
1.1.2、浮点型:
浮点数类型包括:float、double
浮点数默认类型为:double
浮点数可以理解位表示的小数;
注意事项:
直接赋值给float类型,需要加上F或f,因为默认类型都为double。
精度损失,如double d = 1.0 表示的是无限接近于1.0的一个小数,而不是真正的1.0。如果需要精确的表示一个小数,可以使用后面学到的BigDecimal。
单精度双精度区别:
3.1对于单精度浮点数,运行速度相比double更快,占内存更小,
3.2但是当数值非常大或者非常小的时候会变得不精确。
3.3双精度比单精度表示的位数大 精确的位数多,简单地说, float表示的小数点位数少。
3.4最近几天建议用double类型,而实际开发用BigDecimal类型表示小数。
1.1.3、字符类型:
单引号引起来的一个符号就是字符数据。例如:'a'
使用方式:
- 'a'、’1’、’好’等最常用。
- 使用一个数字表示字符,参考下图中ASCII码表[字符编码]。关于ASCII码表请百度了解。
char c = 65;// 表示 ‘A’这个字符
//16进制表示一个字符
char c = '\u0041';// 十六进制的0041,是十进制的65,在字符集中对应的是A字符
特殊字符使用
\r 表示回车符;
\n 表示换行符;
\t 表示相当于Table键制表符,;
\b表示退格键,相当于Back Space键;
\’表示单引号;
\” 表示双引号;
\ 表示一个斜杠\。
注意:因为系统差异性,在不同的系统中 ,有时候\r起作用,有时候\n起作用。所以,一般建议:\r\n 连用,这样可以在任意系统中都可以换行。
1.1.4、布尔类型
只有两个值:true、false,不能使用:0和1表示。
位数占1位
1.2、引用数据类型
除了基本类型以外,几乎所有的其他类型都是引用类型。
如:java自带的类、我们自定义的类、接口、枚举、数组等都属于引用数据类型。
- 类 class2
- 接口 interface
- 枚举 enum
- 抽象类 abstract class
- 数组 数据类型[]
String 类是java中一种自带的引用数据类型,表示字符串数据。
//使用双引号 包含字符内容。
String s = "你好";
System.out.println(s);// 你好
二、基础语法和变量
2.1、基础语法
命名规范:
一般不建议使用$ 及下划线_作为起始符号
见名知意:一般来说都是取一些有意义的单词。例如,age表示年龄
类名首字母必须大驼峰。大驼峰:首字母大写,后面每个单词首字母大写。
例如:用户管理类 : UserManagement 大驼峰
方法名、变量名小驼峰。小驼峰:首字母小写,后面每个单词首字母大写
用户名(成员)变量 : userName 小驼峰
获取用户名方法 : getUserName() 小驼峰
不要以java中关键字、保留字、jdk中存在的类 命名
注释:
单行注释: 语法://
一般写在main(或者其他)方法内部
多行注释: 语法:/* */
可以注释多行内容,一般写在main方法中,用来写解题思路
多行注释: 语法:/** */
这是文档注释,写在方法、类、成员变量上面
2.2、变量
概念:
就是一个盒子(容器),用来装数据的。同一时间只能装一个数据。
变量是内存中的一个存储区域,该区域有自己的名称(变量名)和类型(数据类型),Java中每个变量必须先声明,后使用, 该区域的数据可以在同一类型范围内不断变化
(变量可以理解为装某种类型数据的容器,容器可以重复使用)
声明变量:
int age;// 声明一个int类型的变量age(年龄)
//数据类型 变量名1 = 值1, 变量名2 = 值2, 变量名3 = 值3...;// 值和变量的类型必须相同
int age, age2, age3;
//或者
int age = 1, age2 = 2, age3 = 3;
变量赋值:
//语法:变量名 = 值; =右边的值,赋值给 =左边的变量。注意:必须保证值和变量的数据类型一致
age = 23;// 将23赋值给变量age。注意:必须保证值23和变量age的数据类型一致
eg:
public class _02Var {
public static void main(String[] args) {
// ================== int类型变量使用 =========================
// 1. 声明变量,语法:数据类型 变量名; 例如:int age;
int score;// 声明一个int类型变量score
// 2. 变量赋值,语法:变量名 = 值
score = 0;// 将int类型的值0通过=赋值给=左边的变量score
// 直接打印输出变量score
System.out.println(score);
// 做运算(+,-,*,/....) score + 1
score = score + 1;
System.out.println(score);// 1
// 赋值给另外的变量
int score2 = score;
System.out.println(score2+","+score);// 1
System.out.println(score);// 1
// ======== String 字符串类型(引用类型) 最常用【掌握】=========================
// 1 声明变量同时赋值,语法:数据类型 变量名 = 值;
String str = "abc";
// 2. 变量取值: 语法:变量名;
System.out.println(str);
// +在字符串中表示连接符号,也就是拼接符号
str = str + "123";// 将String变量str中值abc取出来,然后通过+号拼接 123,重新赋值给 str
// 重新打印str
System.out.println(str);// abc123
// +在字符串出现之前,表示加法运算,字符串之后表示拼接符号
System.out.println(1 + 2 + "ab" + 1 + 2);// 3ab12
}
注意事项:
- 此处的数据类型可以是Java中支持的所有的数据类型!
- 数据类型限定了变量可以存值的类型
- 赋值使用的 = 号,从右往左赋值
- 规范写法:= 两边都加上一个空格
- 变量一旦定义好了,可以反复使用
- 变量只可以存一个值,下次存值会覆盖上一次的值
三、数据类型的转换
定义:
将数据从一种格式或结构转换为另一种格式或结构的过程
作用
- 节约内存空间 byte short int long
- 将一些类型转换为项目所需要的类型
3.1、自动隐式转换
定义:
将小的数据类型转换大的数据类型
注意事项
在Java中,boolean类型与所有其他7种类型都不能进行转换。
其他 7种数据类型,它们之间都可以进行转换,但是可能会存在精度损失或者其他一些变化。
byte -> short -> int -> long-> float-> doublechar -> int -> long-> float-> double
byte与char 不能自动转换
char与short不能自动转换
由于小数(浮点数) 的存储方式,结构和整数不一样,所以,float哪怕是4个字节、
long是8个字节,表示范围也大于long类型。知道就好无须深入研究。
eg:
//1.
short s = 10;
int num = 20;
int n = num + s;
System.out.println(n);
//2.
int num = 10;
double b = 10.01;
double c = num + b;
System.out.println(c);
//3.char类型向更高长度类型(例如整型)转换时,会转换为对应的ASCII码值,再做其他类型的自动转换
char c = 'A';
int num = 10;
int a = c + num;
System.out.println(a);
//4.特例:只看类型,不看值
/ 示例1:
int a = 129;
byte b = (byte)a;// 编译器只看容器不看值
System.out.println(b);// 结果为-127
// 示例2:
byte b = 100;// 可以自动转换
float f = 1.3;// 不能自动转换
int a = 2147483647;
a = a + 1;
System.out.println(a);// 结果为-2147483648
3.2、强制转换
定义:
将大数据类型转为小数据类型
语法:
小数据类型 变量名 = (小数据类型)大类型值/大类型变量名
注意事项
- 高转低会导致精度丢失,有数据的溢出风险。溢出的时候,会以二进制进位。
- 实际开发中:应该要知道被强制转换的数据,是在一个已知的范围。
- 当int类型的具体的值,向byte、short、char类型转换的时候,值只要在其表示范围内,都会隐式转换。
- 编译只看类型不看值
eg:
int i1 = 123;
int i2 = 456;
float f1 = (float)((i1 + i2) * 1.2);// 类型大的转换为类型小的时,要加上强制转换符
short i = 99;
char c = (char)i;
System.out.println(c);
byte b1 = 1;
byte b2 = 2;
byte b3 = (byte)(b1 + b2); // byte,short,char在计算时首先转换为int,大类型(int)转换为小类型的(byte)时要加强制转换
byte t = 127;// 不报错
int a = 127;
// 需要强制转换才不报错:编译器只看类型,不看值
byte b = (byte)a;
System.out.println(b); // 结果为 127
/**
* 4. 类型转换:(掌握)
byte short(char) int long float(单精度) double(双精度) (只有数值类型才能相互转换)
----------------从左到右精度越来越高-------------------->
1. 小转大,都是可以隐式转换 (从左到右)
2. 大转小,必须强制转换 (从右到左) 强制转换有数据的溢出风险。溢出的时候,会以二进制进位
强制转换语法:
小的数据类型 小的变量 = (小的数据类型)大的变量/值;
当int类型的具体的值,向byte、short、char类型转换的时候,值只要在其表示范围内,都会隐式转换
*/
public class _03TypeChange {
public static void main(String[] args) {
// 1. 小转大,都是可以隐式转换 (从左到右)
byte byt = 1;// 声明一个byte类型变量byt 赋值1
short s = byt;// 声明一个short类型变量s 赋值一个byte类型变量byt
int i = s;// 声明一个int类型变量i 赋值一个short类型变量s
long lon = i;// 声明一个long类型变量lon 赋值一个int类型变量i
float f = lon;// 声明一个float类型变量f 赋值一个long类型变量lon
double doub = f;// 声明一个double类型变量doub 赋值一个float类型变量f
// 2. 大转小,必须强制转换 (从右到左) 强制转换有数据的溢出风险。溢出的时候,会以二进制进位
// 强制转换语法:小的数据类型 小的变量 = (小的数据类型)大的变量/值;
float f2 = (float)doub;// 声明一个float类型变量f2,赋值为一个强制转换的double类型变量 doub
long lon2 = (long)f2;
byte byt2 = (byte)128;// 128是int类型,强制转换有可能发生溢出,溢出时会以二进制进位
System.out.println(byt2);// -128
int a = 1;
// byte byt3 = a;// 报错,int类型a值是1,因为在编译期程序只看右边的数据类型,而不看变量中的值
byte byt4 = 1;// 不报错
}
}
4.3、表达式示例
四、运算符
4.1、算术运算符
算数运算(Arithmetic Operation)
+ :加号。只有String字符串参与的加法运算,才有拼接功能,在String之前,表示加法 运算,之后,才表示连接
-:减号。
*****:乘号。
/:除号。不能除0
%:模(也叫取余)相当于求余数。例如:10 % 3 ,表示求10除3的余数,结果是1
作用:1. 求余数 2. 找一个数的倍数 3. 可以拆分一个多位的数字
eg:
public class _05ArithmeticOperation {
public static void main(String[] args) {
System.out.println("============= 除法 / ==============");
System.out.println(10 / 1);// 10
System.out.println(10 / 2);// 5
System.out.println(10 / 3);// 3
System.out.println(10 / 4);// 2
System.out.println(10 / 5);// 2
System.out.println(10 / 6);// 1
System.out.println(10 / 7);// 1
System.out.println(10 / 8);// 1
System.out.println(10 / 9);// 1
System.out.println(10 / 10);// 1
System.out.println(10 / 11);// 0
//System.out.println(10 / 0);// ArithmeticException算术异常
System.out.println("============= 特殊情况 ==============");
/*
* 特殊情况:【了解】
1) 10/3 =3;
2) 10.0/3=3.33333…
3) 0/0
4) 0.0/0.0
结果是NaN ,任何的NaN都不等于自己(面试题)not a number不是一个数字
5) 1.0/0.0 结果:Infinity,表示无穷大
*/
System.out.println(10.0 / 3);
System.out.println(0.0 / 0.0);// NaN
System.out.println(1.0 / 0.0);// Infinity表示无穷大
System.out.println("============== % 模(取余) ==============");
System.out.println(10 % 1);// 0
System.out.println(10 % 2);// 0
System.out.println(10 % 3);// 1
System.out.println(10 % 4);// 2
System.out.println(10 % 5);// 0
System.out.println(10 % 6);// 4
System.out.println(10 % 7);// 3
System.out.println(10 % 8);// 2
System.out.println(10 % 9);// 1
System.out.println(10 % 10);// 0
System.out.println(10 % 11);// 10
//System.out.println(10 % 0);// ArithmeticException算术异常
// 请求出个十百位的值 / %
int a = 127;
// 求个位
int ge = a % 10;
// 求十位
int shi = a / 10 % 10;
// 求百位
int bai = a / 100;
System.out.println(ge + " : " + shi + " : " + bai);
}
}
4.2、自增自减运算符
++(加加)、--(减减)
注意事项:
- 自增自减只能够用于变量,不能用于常量
- 自增自减运算的优先级比其他算术运算符高
- 一般用在循环语句中
使用要点:
- 把整个表达式看成是一个整体。
- ++i 表示运算完再赋值,i++ 表示先赋值再运算
eg:
int i = 3;
int a1 = i++ + i++ + i++;
//i++=3 i=4 i++=4 i=5 i++=5 i=6 计算过程
int b1 = ++i + ++i + ++i;
//++i=7 i=7 ++i=8 i=8 ++i=9 i=9
System.out.println("i = " + i); // 9
System.out.println("a1 = " + a1); // 12
System.out.println("b1 = " + b1); // 24
int a2 = 1;
int b2 = 2;
// a++: 先赋值再自增 ++a:先自增再赋值
int c1 = a2++ + ++a2 + b2--;
// a2++=1 a2=2 ++a2=3 a2=3 b2--=2 b2=1 c1=1+3+2
int d1 = c1++ + c1-- + a2++ + ++b2;
// c1++=6 c1=7 c1--=7 c1=6 a2++=3 a2=4 ++ba=2 b2=2
// a = ? b = ? c = ? d = ?
System.out.println("a = " + a2);//4
System.out.println("b = " + b2);//2
System.out.println("c = " + c1);//6
System.out.println("d = " + d1);//18
4.3、复合赋值运算符
赋值运算(Assignment Operation):是优先级最低的一种运算,等 = 后边的所有运算完毕后,才执行赋值运算。
+=(加等)、-=(减等)、=(乘等)、/=(除等)、=*(等于)
语法:
//+= 累加
int a = 5;
a += 5 => a = a+5
注意事项:
- 从右到左,把符号右边的值赋值到左边的变量中
- 上面符号看成是一个整体: 例如 += 看成是一个符号,不要看成两个。
- 赋值运算有强制转换功能,可以避免类型提升.会有溢出风险
int i= 3;
i += 2;// 表示把2 累加到变量 i 中
i -= 1;
// 特例
short s = 3;
s += 2; // 存在隐式转换
short s = 3;
s = s + 2; // 报错,因为结果值是int,int不能自动转换为short
public class _08AssignmentOperation {
public static void main(String[] args) {
int a = 1;
a += 5;// 表示将变量a的值累加上5,相当于a = (int)(a + 5);
System.out.println(a);// 6
byte b = 127;
b += 1;// b += 1相当于 : b = (byte)(b + 1);
System.out.println(b);// -128
// b = b + 1;// 报错, b + 1表达式结果是int类型
a += 1 + 3 + 5;// 会先计算 += 右边所有的运算,再执行 += 赋值运算
System.out.println(a);
}
}
4.4、比较运算符
**比较运算 **(Compare Operation) :结果一定是 boolean 类型
<(小于)、>(大于)、<=(小于等于)、>=(大于等于)
- ==(等等于),比较基本类型,比较的是值是否相等 ;比较引用类型,比较的是值并且地址是否相等
- !=(不等于),比较基本类型,比较的是值是否不相等 ;比较引用类型,比较的是值并且地址是否不相等
4.5、三目运算符
语法:
x ? y : z
描述:
x 一般为一个关系表达式。
如果 x 的值为 true,那么就取 y 的值否则就取 z 的值。
eg:
bool resuilt=5>3?true:flase
注意点:
凡使用if else的判断,可以考虑使用三元表示式;y 的结果类型必须跟 z 的结果类型一致,并且也要跟整个三元表达式的结果类型一致
Java基础知识篇02——Java基本语法的更多相关文章
- java基础知识回顾之---java String final类普通方法
辞职了,最近一段时间在找工作,把在大二的时候学习java基础知识回顾下,拿出来跟大家分享,如果有问题,欢迎大家的指正. /* * 按照面向对象的思想对字符串进行功能分类. * ...
- 「Java面试题/知识点精华集」20000+字的Java基础知识篇(2020最新版) !
本文已经收录进我的 79K Star 的 Java 开源项目 JavaGuide:https://github.com/Snailclimb/JavaGuide (「Java学习+面试指南」一份涵盖大 ...
- 超详细的Java面试题总结(一)之Java基础知识篇
面向对象和面向过程的区别 面向过程: 优点:性能比面向对象高,因为类调用时需要实例化,开销比较大,比较消耗资源;比如单片机.嵌入式开发.Linux/Unix等一般采用面向过程开发,性能是最重要的因 ...
- java基础知识回顾之java集合类-Properties集合
/** java.lang.Object |--java.util.Dictionary<K,V> |--java.util.Hashtable<Object,Obje ...
- java 基础知识一 初识java
java 基础知识一初识java 1.java语言的特点 (1)简洁有效(2)可移植性(3)面向对象(4)解释型(5)适合分布式计算 2.java的源文件扩展名为.java 编译后的扩展名为.cla ...
- Java基础知识强化02:import static 和 import
1.import static静态导入是JDK1.5中的新特性.一般我们导入一个类都用 import com.....ClassName;而静态导入是这样:import static com..... ...
- 超详细的Java面试题总结(二)之Java基础知识篇
多线程和Java虚拟机 创建线程有几种不同的方式?你喜欢哪一种?为什么? 继承Thread类 实现Runnable接口 应用程序可以使用Executor框架来创建线程池 实现Callable接口. 我 ...
- Java基础知识篇【gitee】
https://snailclimb.gitee.io/javaguide 一.Java基本功 Java一次编译,字节码通过JVM,处处运行jsp会转化为servlet,也要由jdk编译OracleJ ...
- java基础知识回顾之java Thread类学习(三)--java线程实现常见的两种方式实现好处:
总结:实现Runnable接口比继承Thread类更有优势: 1.因为java只能单继承,实现Runnable接口可以避免单继承的局限性 2.继承Thread类,多个线程不能处理或者共享同一个资源,但 ...
- Java基础系列篇:JAVA多线程 并发编程
一:为什么要用多线程: 我相信所有的东西都是以实际使用价值而去学习的,没有实际价值的学习,学了没用,没用就不会学的好. 多线程也是一样,以前学习java并没有觉得多线程有多了不起,不用多线程我一样可以 ...
随机推荐
- Proxmox 7.4 使用vgpu_unlock,为GTX1060开启vGPU支持
本文在 2021年发布的博客<Proxmox 5.4使用vgpu_unlock,为GTX1060开启vGPU支持>,介绍了 Proxmox VE 5.4 上部署vGPU unlock 的操 ...
- 京豆薅羊毛新姿势-docker方式
背景 上周看脉脉的时候看到下面这个帖子,领导让搞项目容器化,但是楼主没搞过,对新东西有畏惧感,怂了,然后把机会白白送给其他同事了. 想来我也是差不多这样的,刚到阿里工作的时候,有个好的项目机会来了,领 ...
- C语言中如何使两个整型变量计算出浮点型结果
遭遇的问题 在学习时有一个课后题要求计算两个变量的加减乘除以及取余,想到除法可能会计算出小数,就用浮点型接收除法的结果 int a,b: double div; div = a / b; 但是算出来的 ...
- offline 2 online | Cal-QL:校准保守 offline 训出的 Q value,让它与真实 reward 尺度相当
论文标题:Cal-QL: Calibrated Offline RL Pre-Training for Efficient Online Fine-Tuning. NeurIPS 2023,5 5 6 ...
- 【译】使用.NET将WebAssembly扩展到云(一)
原文 | Richard Lander 翻译 | 郑子铭 WebAssembly(Wasm)是一种令人兴奋的新虚拟机和(汇编)指令格式. Wasm 诞生于浏览器,是 Blazor 项目的重要组成部分. ...
- 利用LiveReload插件实现vscode和谷歌浏览器实时刷新
说明 最近在研究CSS希望可以提升一个层次.在写DEMO练习的时候老是需要去谷歌浏览器手动刷新页面才能看到更改后的效果次数多了 我也受不了,这不我又请来了个帮手: LiveReload,名如其人,这家 ...
- 1.Go 的基本数据类型
Go 的基本数据类型
- 【LeetCode链表#6】移除链表元素
移除链表元素 题目 力扣题目链接(opens new window) 题意:删除链表中等于给定值 val 的所有节点. 示例 1: 输入:head = [1,2,6,3,4,5,6], val = 6 ...
- Java HashMap 详解
HashMap HashMap 继承自 AbstractMap,实现了 Map 接口,基于哈希表实现,元素以键值对的方式存储,允许键和值为 null.因为 key 不允许重复,因此只能有一个键为 nu ...
- 【Azure APIM】验证APIM删除后的恢复步骤
问题描述 在Azure门户中,误删除API Management资源后,怎么办? 问题解答 遇见误删除的第一反应就是: 想恢复删除的内容,但是从门户上查看没有发现有可以操作的方面. (错误,Azure ...