前言
本篇文章带大家认识java的基本数据类型与运算符以及java中的输出和输出语句
博客主页:KC老衲爱尼姑的博客主页 博主的github,平常所写代码皆在于此 共勉:talk is cheap, show me the code 作者是爪哇岛的新手,水平很有限,如果发现错误,一定要及时告知作者哦!感谢感谢!
java语言有三种输出方式,第一种是打印不换行,第二种是打印并换行,第三种是格式化输出。
public class Text {
public static void main(String[] args) {
System.out.print("Hello World");
System.out.print("我是hmr");
}
}
🎲1.2打印换行
打印换行只需在print后加ln即可
public class Text {
public static void main(String[] args) {
System.out.println("Hello World");
System.out.println("我是hmr");
}
}
运行结果
如果还是对C语言恋恋不忘的话,可以使用格式化输出来聊表对C的想念。java中的格式化输出的格式几乎与C语言中的一致。
public class Text {
public static void main(String[] args) {
int a=520;
float b=1314.0F;
System.out.printf("%d %.1f",a,b);
}
}
运行结果
java中的输入语句相较于C语言的scanf来说使用的过程是繁琐的,但是没有scanf那么坑,之前我使用scanf多打了一个空格结果啥都出不来。悲伤已过去,接下来就来分享java输入语句的三板斧。
(1)第一步在类的前面导包
import java.util.Scanner;
这一步我们不需要手动导包,我们只需将鼠标放到Scanner上按住Alt+Enter就会自动导入,在idea中Alt是万能提示键。
(2)第二步:在获取输入数据之前,定义一个Scanner类的对象
Scanner sc= new Scanner(System.in);//sc就是Scanner的一个对象
(3)获取输入的数据
常用获取输入数据的方法,须通过Scanner的对象去调用
具体如下
注意:java中并没有提供单独获取字符的方法,sc.next().char(0)是先在键盘允许录入字符串也就是使用next()方法,然后使用charAt(index)方法可以获取字符串中任意一个字符,因为字符串是有长度的,我们可以指定index来获取一个字符串中第几个字符
比如获取字符串中的第一个字符
package com.bit.task1;
import java.util.Scanner;//导包,不用手动导,可先创建对象后导包
public class Text {
public static void main(String[] args) {
Scanner sc= new Scanner(System.in);//创建Scanner对象,sc就是Scanner的对象
System.out.println("请输入一个字符串:");
char ch=sc.next().charAt(0);//通过对像调用方法
System.out.println(ch);
}
}
运行结果
java是强类型语言,意味着每一种变量在申明时就必须指定一种类型。在java中一共有8中基本数据类型,其中4中整型,2中浮点型,1中用于表示真假的boolean,还有一种用于表示Unicode编码的字符单元的字符类型char.
注意
类型 | 字节大小 | 储存范围 |
---|---|---|
int | 4 | -2147483648 ~ 2147483647 |
int最值求法
public class Text {
public static void main(String[] args) {
int num=10;
System.out.println(num);
System.out.println(Integer.MAX_VALUE);//利用包装类求最int的最大值
System.out.println(Integer.MIN_VALUE);//利用包装类求最int的最小值
}
}
java中为了万物皆对象,就把基本数据类型进行封装,就导致了每种数据类型都有其对应的包装类。其中Integer为int的包装类,可以看做是int的plus版,通过Integer的MAX_VALUE以及MIN_VALUE便可求出int的最值
类型 | 字节大小 | 存储范围 |
---|---|---|
short | 2 | -32768 ~ 32767 |
short最值求法
public class Text {
public static void main(String[] args) {
short num=10;
System.out.println(num);
System.out.println(Short.MAX_VALUE);
System.out.println(Short.MIN_VALUE);
}
}
类型 | 字节大小 | 存储范围 |
---|---|---|
long | 8 | -9 223 372 036 854 775 808 ~ 9 223 372 036 854 775 807 |
long最值求法
public class Text {
public static void main(String[] args) {
short num=10;
System.out.println(num);
System.out.println(Long.MAX_VALUE);
System.out.println(Long.MIN_VALUE);
}
}
类型 | 字节大小 | 范围 |
---|---|---|
byte | 1 | -128~127 |
byte最值求法
public class Text {
public static void main(String[] args) {
byte num=10;
System.out.println(num);
System.out.println(Byte.MAX_VALUE);
System.out.println(Byte.MIN_VALUE);
}
}
注意一下代码
byte a=90;
byte b=12+a;//a默认为int型 12+a 得到的是int型的数值无法存入byte
类型 | 字节大小 | 存储范围 |
---|---|---|
float | 4 | 大约 ± 3.402 823 47E+38F (有效位数为 6 ~ 7 位) |
double | 8 | 大约 ± 1.797 693 134 862 315 70E+308 (有效位数为 15 位) |
float类型的数值后需带有F或者f否则就会被当做double的数值,也可以在浮点数后加后缀D或者d,如3.14D。所有的浮点型数值都遵循IEEE 754规范,具体说来,下面用于表示溢出和出错的情况
如,一个正整数除以0的结果为正无穷大。计算0/0负数的平方根结果为NaN
单精度浮点型最值求法
public class Text {
public static void main(String[] args) {
float num=10f;
System.out.println(num);
System.out.println(Float.MAX_VALUE);
System.out.println(Float.MIN_VALUE);
}
}
双精度浮点型最值求法
public class Text {
public static void main(String[] args) {
double num=10.89;
System.out.println(num);
System.out.println(Double.MAX_VALUE);
System.out.println(Double.MIN_VALUE);
}
}
boolean的取值只有两种true or false,用于逻辑判断,整型值与浮点型数值和布尔型的值是无法转换的。
代码示范
public class Text {
public static void main(String[] args) {
boolean flag = true;
if(flag){//flag为真
System.out.println("你好");//输出你好
}else{
System.out.println("你不好");
}
}
}
类型 | 字节大小 | 存储范围 |
---|---|---|
char | 2 | 0~65535 |
注意
public class Text {
public static void main(String[] args) {
char ch='界';
System.out.println(ch);
}
}
⚫ java.lang.String 类代表字符串,String类定义的变量可以用于指向字符串对象,然后操作该字符串。
⚫ Java 程序中的所有字符串文字(例如“abc”)都为此类的对象。
特点
⚫ String其实常被称为不可变字符串类型,它的对象在创建后不能被更改。
常用API
方法 | 说明 |
---|---|
public int length() | 返回此字符串的长度 |
public char charAt(int index) | 获取某个索引位置处的字符 |
public char[] toCharArray(): | 将当前字符串转换成字符数组返回 |
public String substring(int beginIndex, int endIndex) | 根据开始和结束索引进行截取,得到新的字符串(包前不包后) |
public String substring(int beginIndex) | 从传入的索引处截取,截取到末尾,得到新的字符串 |
public String replace(CharSequence target, CharSequence replacement) | 使用新值,将字符串中的旧值替换,得到新的字符串 |
public String[] split(String regex) | 根据传入的规则切割字符串,得到字符串数组返回 |
###🎲 4.1什么是变量?
变量可以看做一个存储物品的箱子,箱子的大小取决于变量的类型。
也就是该变量能生效的范围, 一般是变量定义所在的代码块 (大括号)
变量的错误使用
class Test {
public static void main(String[] args) {
{
int x = 10;
System.out.println(x); // 编译通过;
}
System.out.println(x); // 编译失败, 找不到变量 x.
}
}
切记:变量出大括号就不法使用。
硬性指标:
注意: 虽然语法上也允许使用中文/美元符($)命名变量, 但是 强烈 不推荐这样做.
软性指标:
小驼峰命名示例:
int maxValue = 100;
String studentName = "张三";
定义:常量指的是运行时类型不能发生改变
10 // int 字面值常量(十进制)
010 // int 字面值常量(八进制) 由数字 0 开头. 010 也就是十进制的 8
0x10 // int 字面值常量(十六进制) 由数字 0x 开头. 0x10 也就是十进制的 16
10L // long 字面值常量. 也可以写作 10l (小写的L)
1.0 // double 字面值常量. 也可以写作 1.0d 或者 1.0D
1.5e2 // double 字面值常量. 科学计数法表示. 相当于 1.5 * 10^2
1.0f // float 字面值常量, 也可以写作 1.0F
true // boolen 字面值常量, 同样的还有 false
'a' // char 字面值常量, 单引号中只能有一个字符
"abc" // String 字面值常量, 双引号中可以有多个字符.
final int a = 10; a = 20; // 编译出错. 提示 无法为最终变量a分配值
类型转换分为两种一种是强制类型转换,另一种是隐式转换。强制类型转换如同将大瓶子中的水倒入到小瓶子里最终瓶子虽然也装满水了,但是会造成溢出部分水(数据的缺失);隐式转换如同小瓶子中的水倒入到大瓶子里。
先看以下几个代码场景:
int a = 10;
long b = 20;
a = b; // 编译出错, 提示可能会损失精度.
b = a; // 编译通过.
int a = 10;
double b = 1.0;
a = b; // 编译出错, 提示可能会损失精度.
b = a;
java是强类型语言,会对变量的字面值进行检查,如果字面值大于某一类型存储的最大值的话是无法编译的体现在idea中就是有一条红色的波浪线。当long类型的数值赋值给int类型的变量时是无法编译通过的,因为大类型的数值赋值给小类型的变量,而小类型的变量由于存储不下会造成数据的缺失,java是不允许这种情况的存在,而小类型的数值是可以赋值给大类型的变量,因为大类型的边量容量够大完全可以存储。
结论: 不同数字类型的变量之间赋值, 表示范围更小的类型能隐式转换成范围较大的类型, 反之则不行.
int a = 10;
boolean b = true;
b = a; // 编译出错, 提示不兼容的类型
a = b;
结论: int 和 boolean 是毫不相干的两种类型, 不能相互赋值.
byte a = 100; // 编译通过
byte b = 256; // 编译报错, 提示 从int转换到byte可能会有损失
注意: byte 表示的数据范围是 -128 -> +127, 256 已经超过范围, 而 100 还在范围之内.
结论: 使用字面值常量赋值的时候, Java 会自动进行一些检查校验, 判定赋值是否合理.
使用强制类型转换
int a = 0;
double b = 10.5;
a = (int)b;
int a = 10;
boolean b = false;
b = (boolean)a; // 编译出错, 提示不兼容的类型.
结论: 使用 (类型) 的方式可以将 double 类型强制转成 int.
类型转换的路径图
注意:int和float虽然都是占用4个字节的内存空间,但是float能表示数据的宽度比int大,因为它既能表示整数,也能表示小数部分,所以int可以向float转换。
7.1int 和 long 混合运算
int a = 10;
long b = 20;
int c = a + b; // 编译出错, 提示将 long 转成 int 会丢失精度
long d = a + b;
结论: 当 int 和 long 混合运算的时候, int 会提升成 long, 得到的结果仍然是 long 类型, 需要使用 long 类型的变量来 接收结果. 如果非要用 int 来接收结果, 就需要使用强制类型转换.
byte a = 10;
byte b = 20;
byte c = a + b;
System.out.println(c);
// 编译报错
Test.java:5: 错误: 不兼容的类型: 从int转换到byte可能会有损失
byte c = a + b;
结论: byte 和 byte 都是相同类型, 但是出现编译报错. 原因是, 虽然 a 和 b 都是 byte, 但是计算 a + b 会先将 a 和 b 都 提升成 int, 再进行计算, 得到的结果也是 int, 这是赋给 c, 就会出现上述错误. 由于计算机的 CPU 通常是按照 4 个字节为单位从内存中读写数据. 为了硬件上实现方便, 诸如 byte 和 short 这种低于 4 个字节的类型, 会先提升成 int, 再参与计算.
正确的写法:
byte a = 10;
byte b = 20;
byte c = (byte)(a + b);
System.out.println(c);
最后的话
各位看官如果觉得文章写得不错,点赞评论关注走一波!谢谢啦!