Java基础
Java语言跨平台的原理:
- 操作系统本身其实是不认识Java语言的。 但是针对于不同的操作系统,Java提供了不同的虚拟机(jvm)虚拟机会把Java语言翻译成操作系统能看得懂的语言。
注释:
//单行注释
/*多行注释
多行注释
*/
/**
*文档注释
*
**/
关键字:
被Java赋予了特定含义的英文单词。当我们在代码中写了关键字之后,程序在运行的时候,就知道要做什么事情了。关键字很多,不用刻意去记。
关键字class:表示定义一个类,创建一个类。类:Java项目最基本的组成单元,一个完整的Java项目有可能会有成千上万个类来组成的。class后面跟随的就是这个类的名字,简称:类名。在类名后面会有一对大括号,表示这个类的内容。
eg:
public class HelloWorld{ }
解释:class表示定义类。 类名:HelloWorld, HelloWorld后面的大括号表示这个类的范围。
变量
变量就在程序中临时存储数据的容器。
变量的定义格式数据类型 变量名 = 数据值;
格式详解 数据类型:限定了变量当中能存储什么类型的数据。
如果要存10,那么数据类型就需要写整数类型。如果要存10.0,那么数据类型就需要写小数类型。 变量名:其实就是这个容器的名字。 当以后想要使用变量里面的数据时,直接使用变量名就可以了。
数据值:真正存储在容器中的数据。
分号:表示语句的结束,就跟以前写作文时候的句号是一样的。
常用的数据类型 整数:int 小数:(浮点数)double
八大基本数据类型
如果要定义 一个整数类型的变量,不知道选择哪种数据类型了,默认使用int。
如果要定义 一个小数类型的变量,不知道选择哪种数据类型了,默认使用double。
如果要定义一个long类型的变量,那么在数据值的后面需要加上L后缀。(大小写都可以,建议大写。)
如果要定义一个float类型的变量,那么在数据值的后面需要加上F后缀。(大小写都可以)
(不要用double进行精确的小数计算,会出现丢失精度的问题,以后在有支付功能的项目里一定要注意)
类型转换
高精度向低精度类型转换时会导致精度缺失
0b 代表2进制的数
0 代表8进制的数
0x 代表16进制的数
//java默认的浮点型是double,当用float定义变量时,值后面要跟f
float a = 3.14f;
boolean b = true;
boolean c = false;1
//浮点型转int类型
float o = 8;
double l = (double)9;
System.out.println(o);
System.out.println(l);
//int 转byte
int m = 129;
//因为byte类型的大小范围为 -127~127,故类型转换时 129会被转 -127
byte n = (byte)m;
//java 整型变量默认为int类型
byte d = 1;
byte e = 2;
//所以定义字节型变量相加时,需要用强制类型转换
//python 中bool类型转换0会转换为false,1会转换成true,java不可以转
boolean bool = true;
//boolean bool2 = (boolean)1;int 转boolean会报错
//int i = (int)false; boolean 转int也会报错
**instanceof:**检查左边的对象是否为右边类的实例,返回 boolean。
&:单&时左边无论true或false右边都运算
&&:如果左边为true,右边参与运算,左边为false右边不参与运算
|:左边无论真假右边都参与运算
||:左边为真右边不参与运算
位运算:将数据转换成2进制运算
System.out.println(6&3)
输出>>>>2
正数的原码、反码、补码均是它本身
6 的原码(补码、反码)符号位0 110
3 的原码(补码、反码)符号位0 011
System.out.println(6|3)
输出>>>>7
// 位运算 将数据转换成一个二进制码进行计算
// & 与运算
System.out.println(6 & 3);
/*
6和3的补码
原码(补码、反码):
0 0000000 00000000 00000000 00000110
0 0000000 00000000 00000000 00000011
&运算对应位置上都为1那么结果为1 否则为 0
0 0000000 00000000 00000000 00000010
十进制结果为: 2
*/
// | 或运算
System.out.println(6 | 3);
/*
6和3的补码
原码(补码、反码):
0 0000000 00000000 00000000 00000110
0 0000000 00000000 00000000 00000011
|运算对应位置上出现为1的结果就是1
0 0000000 00000000 00000000 00000111
十进制结果为: 7
*/
// ^ 异或运算
System.out.println(6 ^ 3);
/*
6和3的补码
原码(补码、反码):
0 0000000 00000000 00000000 00000110
0 0000000 00000000 00000000 00000011
^运算对应位置上不一样的为1 一样返回 0
0 0000000 00000000 00000000 00000101
十进制结果为: 5
*/
// ~ 取反运算
System.out.println(~6);
/*
6的补码
原码(补码、反码):
0 0000000 00000000 00000000 00000110
~ 将原先为0的转成1 1转成0
补码 1 1111111 11111111 11111111 11111001
反码 1 1111111 11111111 11111111 11111000
原码 1 0000000 00000000 00000000 00000111
十进制结果为: -7
注意:~中 对于符号位也会进行计算
*/
// << 左移 左移N位 就相当于 是对于当前值 * 2^N幂
System.out.println(3 << 2); // 12
/*
3的补码:
0 0000000 00000000 00000000 00000011
(0 0)0 00000 00000000 00000000 0000001100
十进制结果为:12
*/
// << 右移 右移N位 就相当于 是对于当前值 / 2^N幂
System.out.println(-5 >> 1);
/*
3的补码:
0 0000000 00000000 00000000 00000011
00 0000000 00000000 00000000 0000001(1)
十进制结果为:1
*/
// >>> 无符号右移
System.out.println(-5 >>> 1);
/*
3的补码:
0 0000000 00000000 00000000 00000011
00 0000000 00000000 00000000 0000001(1)
十进制结果为:1
*/
// 请用最有效率的方式写出计算2乘以8的结果
System.out.println(2 << 3);
运算符
算术运算符:+、 -、 * 、/ 、%,跟数学中的加减乘除一模一样
/ 和 % 的区别:他们两个都是做除法运算,/取结果的商。% 取结果的余数。
整数操作只能得到整数,如果想要得到小数,必须有浮点数参与运算。
算术运算符的高级用法:是以+为例进行的讲解,其余减法,乘法,除法的运算规则也是一样的。
特例:字符串只有+操作,没有其他操作。
System.out.println('a');
//字符加上数字,Java编译器会把字符转译为ASC码进行相加
System.out.println('a'+1);//>>>98
//java中" "代表字符串,' '代表字符
System.out.println("-------");
System.out.println("a"+1);//>>>>a1
System.out.println("------------");
System.out.println("hello"+'a'+1);//>>>helloa1
System.out.println("--------------");
System.out.println("5+5+"+5+5);//>>>5+5+55
System.out.println("------");
System.out.println(5+5+"=5+5");//>>>10=5+5
//运算符
int a = 13;
int b = 3;
//对于两个整数用/计算,最后结果会进行取整运算
System.out.println(a/b);//>>>>>4
//对于两个不同数据类型的值进行计算,计算结果会自动向类型较大的转换
double c = 13.0;
System.out.println(a/c);//>>>1.0
System.out.println("---------------");
//对于 a++运算和a--,会先赋值再计算,例如:
int d = b++;
System.out.println(d);//>>>>3
System.out.println(b);//>>>>4
//对于 ++a和--a运算,会先进行加运算,之后再赋值,例如:
System.out.println("----------");
int e = 4;
int f = ++e;
System.out.println(f);//>>>>5
System.out.println(e);//>>>>5
System.out.println("-----------");
//对于两个字符串相加,则会进行字符串的相加,例如:
System.out.println("asdfgh"+"poipiou");//>>>>asdfghpoipiou
赋值运算符:=、+=、-=、*=、/=、%=
//赋值运算符
// =是赋值运算符,把等号右边的值赋值给左边,例如:
int a = 1;
// a+=b,逻辑上与a=a+b相同,例如:
int b = 2;
b +=a;
System.out.println(b);//>>>3
//若用byte和short对变量进行赋值且进行计算
short c = 3;
byte d = 4;
int e = (int)c+d;//对于short和byte 类型相加时,类型会自动转化为默认的int类型
//直接定义变量接收一个short和byte类型的变量,需要考虑类型的转换
c+=d;//若使用+=之类的运算符则不用考虑类型之间的转换
System.out.println(c);
System.out.println("-----------");
//对于字符串值进行比较时,不能用==进行比较,因为字符串用==进行比较时比较的是两个字符串的地址是否相同
//字符串进行比较时要用equals()方法进行比较,例如
String str1 = "ww";
String str2 = "w"+"w";
System.out.println(str1==str2);//>>>>true
String str3 = "w";
String str4 ="w";
String str5 = str3+str4;
System.out.println(str1==str5);//>>>false
System.out.println(str1.equals(str5));//>>>>true
System.out.println("-------------");
//可以使用instanceof方法判断左边的对象是否是右边类的实例,例如
System.out.println(str1 instanceof String);//>>>>true
逻辑运算符:
& 与 &&.对于& 前面的结果不论false或true ,&后面的都需要进行计算。对于&&,&&前面的结果只有为true,后面的才会进行运算,若&&前面的结果为false,则后面的不参与计算.
| 与 ||,对于|,不论前面的结果为true或false后面的都需要进行计算,对于||,只有||前面的结果为fals时,||后面的结果才会进行计算,当||前面的值为true时,||后面的则不参与计算.
三目运算符:
//三目运算符:
(关系表达式)?关系表达式返回true时的结果:关系表达式为false时返回的结果
//三目运算符结果为true或false执行的代码必须要要有返回值,否则会出现报错
int var=(3>4)?3:4;
System.out.println(var);//>>>4
//若返回值结果不同,且需要变量去接收返回的值时,需要定义一个类型较大的变量去接收
short var2 = 9;
int var3 = 8;
//这时需要定义一个int类型的变量去接收三目运算的返回结果值
int res1 =(var2>var3)?var2:var3;
System.out.println("-----");
//用三目运算符获取两个数中的最大值
Scanner scanner = new Scanner(System.in);
int a = scanner.nextInt();
System.out.println("请输入第一个数:");
int b = scanner.nextInt();
System.out.println("两个数中的最大数为:"+((a>b)?a:b));
System.out.println("--------------");
//用三目运算符,计算三个数中的最大值
int i1 = scanner.nextInt();
int i2 = scanner.nextInt();
int i3 = scanner.nextInt();
System.out.println("三个数中的最大数为:"+((i1>i2)?(i1>i3)?i1:i3:(i2>i3)?i2:i3));
输入,输出:
//Scanner对象对象的调用
/*Scanner scanner = new Scanner(System.in);
scanner.nextInt(); 》》只能传入int类型的数据
scanner.next(); 》》》只能传入String类型的数据
*/
//1.键盘录入两个数,获取两个数的最大值
Scanner scanner = new Scanner(System.in);
int a = scanner.nextInt();
int b = scanner.nextInt();
System.out.println((a>b)?a:b);
println:换行输出
print:不换行输出
ew Scanner(System.in);
scanner.nextInt(); 》》只能传入int类型的数据
scanner.next(); 》》》只能传入String类型的数据
*/
//1.键盘录入两个数,获取两个数的最大值
Scanner scanner = new Scanner(System.in);
int a = scanner.nextInt();
int b = scanner.nextInt();
System.out.println((a>b)?a:b);
println:换行输出
print:不换行输出