目录
Java数据类型
1、基本数据类型
- 数值型(byte,short,int,long)(float,double)
- 布尔型(Boolean)逻辑值,不可以用0和1来代替false和true
- 字符型(char)
2、引用数据类型
用系统中的类作为字符串变量类型,例如:String
String类型不能转为其他的基本类型
类型 | 占用存储空间 | 表述范围 | |
整数型 | byte | 1个字节 | -128~127 |
short | 2个字节 | ||
int | 4个字节 | ||
long | 8个字节 | ||
字符型 | float | 4个字节 | -3.403E38~3.403E38 |
double | 8个字节 | -1.798E308~1.798E308 | |
布尔型 | boolean | 逻辑值 | true / false |
类 | String | ------- | -------- |
public static void main(String[] args){
//布尔型和布尔型
boolean a=true;
boolean b=false;
System.out.println(a!=b);//true
//引用类型和引用类型
String s1="abcd";
String s2="bcad";
System.out.println(s1==s2);//false
int c=10;
System.out.println(c>'a');//false
}
基本数据类型转换
在Java程序中,不同的基本数据类型(只有7种,不包含Boolean类型)之间可以进行相互转换。
转换分为默认转换和强制转换
char
short ------> int -------> long --------> float ---------> double
byte
1、默认转换
小容量转换大容量
2、强制转换
大容量转换小容量
容易出现溢出或者精度降低的问题
public class D_5data_change {
public static void main(String[] args) {
//小容量转换为大容量
byte a=127;
short b=a;
int c=b;
long d=c;
float e=d;
double f=e;
System.out.println(f);//127.0
//大容量类型转化为小容量
int x=263;//4个字节
byte y=(byte)x;//1个字节,强制转换
System.out.println(y);//7
float z=10.55f;//4个字节
int v=(int)z;
System.out.println(v);//10 精度降低
}
}
ASCll码和Unicode码的区别
- ASCll(ASCII American Standard Code for Information Interchange美国信息互换标准代码),是对英语字符与二进制之间的关系,做了统一规定,被称之为ASCII码。ASCII码在计算机内部,所有数据都使用二进制表示。每一个二进制位(bit)有0和1两种状态,因此8个二进制位可以组合出256种状态,这被称之为一个字(byte),ASCII码一共规定了128个字符的编码。
- 缺点:不能表示所有字符
- Unicode:将世界上所有的符号都纳入其中,范围到十六进制0x10FFFF,有110多万,每个字符都有一个唯一的Unicode编号,例如:“马”的Unicode是U+9A6C
- Java底层采用Unicode编码来存储字符。
运算符
- 算数运算符
- 逻辑运算符
- 赋值运算符
- 比较运算符
- 条件运算符
- 位运算符
1、算数运算符
运算符 | 运算 |
+ | 1、正号 2、加法运算(数值+数值)(字符+数值) 3、连接(数值+字符串)(字符串+字符串) |
- | 1、减法运算 2、符号 (不能连接) |
* | 乘 |
/ | 除 |
% | 取模 |
++ | 1、a++ 先取值后运算 2、++a 先运算后取值 |
-- | 1、a-- 先取值后运算 2、--a 先运算后取值 |
public static void main(String[] args) {
int A=10;
int B=A++;//B=10,A=11,注意:先给B赋值再运算
int C=++A;//c=12,注意:先自加再赋值
A++;//A=12+1=13
++A;//A=13+1=14
++B;//B=11
C++;//C=13
++C;//C=14
System.out.println("A="+A);//14
System.out.println("B="+B);//11
System.out.println("C="+C);//14
//例题
int i = 1; //i=2->3->4->5->6
int j = ++i + i++ + ++i + ++i + i++;//j=2+2+4+5+5
System.out.println(i);//6
System.out.println(j);//18
int a = 10, b = 10, c = 10;
boolean result = a++ == 10 && b-- == 10 || ++c == 10;
System.out.println(a);//11
System.out.println(b);//9
System.out.println(c);//10
System.out.println(result);//true
int i1 = 10, i2 = 10;
System.out.println("i1 + i2 = " + i1 + i2);//1010
System.out.println("i1 - i2 = " + i1 - i2);//语句错误
System.out.println("i1 * i2 = " + i1 * i2);//100
System.out.println("i1 / i2 = " + i1 / i2);//1
}
2、逻辑运算符
运算符 | 名称 | 说明 |
& | 逻辑与 | 区别与联系 |
&& | 短路与 | |
| | 逻辑或 | |
|| | 短路或 | |
! | 逻辑非 | 取反 |
^ | 逻辑异或 | 相同为假,不同为真 |
public static void main(String[] args) {
int x=10;
int y=5;
int z=1;
//&:左右两边都是true,有一个false,结果就为false
//&:当遇到false后,还会继续执行后面的表达式
System.out.println(x>y & y>z);//true & true--->true
System.out.println(x>y & y<z);//true & false--->false
System.out.println(x<y & ++y<z);//false & false--->false
System.out.println(y);//6
//&&:左右两边都是true,有一个false,结果就为false
//&&:当遇到false后,不会继续执行后面的表达式
System.out.println(x>y && y>z);//true & true--->true
System.out.println(x>y && y<z);//true & false--->false
System.out.println(x<y && ++y<z);//false & false--->false
System.out.println(y);//6 ++y没有执行
int x1=10;
int y1=5;
int z1=1;
//|:两边都为false,有一个true,结果就为true
//|:当遇到true后,还会继续执行后面的表达式
System.out.println(x1>y1 | y1>z1);//true & true--->true
System.out.println(x1>y1 | ++y1<z1);//true & false--->true
System.out.println(x1<y1 | y1<z1);//false & false--->false
System.out.println(y);//6
//||:两边都为false,有一个true,结果就为true
//||:当遇到true后,不会继续执行后面的表达式
System.out.println(x1>y1 || y1>z1);//true & true--->true
System.out.println(x1>y1 || ++y1<z1);//true & false--->true
System.out.println(x1<y1 || y1<z1);//false & false--->false
System.out.println(y);//6 ++y没有执行
//!:逻辑非 取反
System.out.println(!(x>y));//false
//^:逻辑异或 相同为假,不同为真
System.out.println(true^true);//false
System.out.println(false^true);//true
}
3、赋值运算符
运算符 | 说明 |
= | 赋值运算(区分==) |
+= | 加法运算(隐式类型转换) |
-= | 减法运算 |
/= | 除法运算 |
*= | 乘法运算 |
%= | 取余运算 |
public static void main(String[] args) {
//赋值运算符
//1、区分==和=
//=:右边赋值给左边,赋值时,注意左右两边的数据类型,不同时,要遵循数据类型转换规则
//==:比较运算符
Boolean b1=false;
if (b1=true)
{
System.out.println("结果为真");//√
}
else if(b1==false)//此时b为true,此语句不执行
{
System.out.println("结果为假");
}
//2、+=赋值时会隐式类型转换
int a=10;
long b=a+2;//b=12
short s=3;
a+=5;//a=15
//如果是:s=s+3; 那么:short=shor+int 提示错误
s+=32767;//会隐式类型转换 short=(short)int
System.out.println(a);//15
System.out.println(b);//12
System.out.println(s);//-32766
}
4、比较运算符
运算符 | 运算 | 范例 | 结果 |
== | 相等于 | 4==3 | false |
!= | 不等于 | 4!=3 | true |
< | 小于 | 4<3 | false |
> | 大于 | 4>3 | true |
<= | 小于等于 | 4<=3 | false |
>= | 大于等于 | 4>=3 | true |
instanceof | 检查是否是类的对象 | "Hello"instanceof String | true |
5、条件运算符
- 语法
(条件表达式)?表达式1:表达式2;
public static void main(String[] args) {
int a=40;
String result=(a>=60)?"及格":"不及格";
System.out.println(result);//不及格
}
6、位运算符
运算符 | 运算 | 说明 |
<< | 左移 | 左移一位,相当于乘2 被移除的高位丢弃,空缺位补0 |
>> | 右移 | 右移一位,相当于除以2 高位移动后,正数补0,负数补1 |
>>> | 无符号右移 | 右移一位,相当于除以2 高位移动后,默认都补0 |
& | 与 | 可以进行逻辑运算(左右两边都是逻辑值) 也可以进行位运算(左右两边都是数值) |
| | 或 | |
^ | 异或 | |
~ | 非 | 各二进制码按照补码各位取反 |
public static void main(String[] args) {
int a=2;
int b=3;
int c=-8;
//0010 2
//0100 4 左移一位
a=a<<2;//左移两位:0000 0000 0000 1000 8
//0011 3
//0001 1 右移一位
b=b>>1;//0000 0000 0000 0001
//1111 1111 1111 1000 负数在计算机中以二进制补码的形式存储 -8
//1111 1111 1111 0111 反码(补码减一)
//0000 0000 0000 1000 源码(反码取反)8
c=c>>>1; //0111 1111 1111 1100 在补码的基础上右移1,最高位默认补0,
//c=214748364
System.out.println(a);//8
System.out.println(b);//1
System.out.println(c);//2147483644
//0000 1000 a=8
//0000 0001 b=1
//0000 0000 a&b=0
//0000 1001 a^b=9
//0000 1001 a|b=9
System.out.println(a&b);//0
System.out.println(a^b);//9
System.out.println(a|b);//9
}
条件语句
1、if
if(条件表达式,最终返回一个布尔值){ } if(条件表达式,最终返回一个布尔值){ }else{ } if(条件表达式,最终返回一个布尔值){ }else if(条件表达式,最终返回一个布尔值){ }
例题:
public class Demo{
public static void main (String args[]) {
int n = 100;
int m = 20;
if (m++ <= 20 || n == n++)// true||不再执行 m=21
System.out.println(n);//100
System.out.println(m);//21
boolean state=false;
int i=2;
if((++i>2)&&(state=true))
i++;
if((++i>4)||(state=false))
i++;
System.out .println (i);//6
}
}
分支语句
1、switch语句
多分支选择语句,根据表达式的值,执行多个操作中的一个
注意事项:
- case语句后面只能使用常量(字面量)表达式(byte,short,in,char,枚举类型,String类型)
- case后的值不能重复
- 某个case分支如果没有break,继续执行下一个case后的语句。(穿透性)
- 凡是switch可以实现,if也可以,反之不行
switch(表达式){
case value1: 代码块
break;
case value2: 代码块
break;
case value3: 代码块
break;
default: 默认代码块;}
public class D3_3switch {
/*
表达式的值可以是byte,Byte,short,Short,int,Integer,char,Character,枚举类型,String类型;
*/
public static void main(String[] args) {
int input=0;
switch(input) {
case 1:
System.out.println("4");
break;
case 2:
System.out.println("5");
break;
default:
System.out.println("重新输入");
}
}
}
循环语句
循环语句的功能
在某些条件满足的情况下,反复执行特定代码的功能
循环语句的四个组成部分
- 循环变量的初始化
- 循环条件的部分
- 循环体的部分
- 迭代部分
循环语句的分类
- while循环
- do while 循环
- for循环
1、while循环
while(逻辑表达式){
循环体;
迭代部分;
}
2、do while 循环
do{
循环体;
迭代部分;
}while(逻辑表达式);
3、for循环
for(表达式1;表达式2;表达式3){
循环体;
迭代部分;
}
执行规则:
先执行表达式1,接着执行表达式2,若表达式2的值为真,则执行循环语句,接着执行表达式3,再判断表达式2的值,依此重复。
区分do while循环和while:do while循环至少执行一次循环体语句。
for和while循环先判断循环条件语句是否成立,然后决定是否执行循环体。
使用时如何选择循环?
- 遍历有明显的循环次数(范围)的需求,选择for循环
- 遍历没有明显的循环次数(范围)的需求,选择while循环
- 如果循环体语句至少执行一次,可以考录使用do while循环
public static void main (String [] args) {
int x=5;
while(++x<4) {
--x;
}
System.out.println( "x="+x);//6
for (int i=0; i<10;i++){
if(i==3){
break;
}
System.out.print (i);//012
}
}
java中的方法
Java中的方法类似于c语言中的函数,将完成某个功能的代码进行封装,为其命名。最终可以重复调用,减少代码的冗余。方法必须写在类中(.java文件中)。
1、方法定义
public---->访问权限
static----->静态的 直接可以使用类名调用
void------->表示此方法没有返回值
起一个名字------>方法名
{ }------>方法体
public class D3_6means {
public static int max(int a,int b){
return a>b?1:0;
}
public static void main(String[] args) {
int a=max(10,34);
System.out.println(a);//0
}
}