Java基础--进制、运算符、语句

时间:2023-02-15 16:26:03

Java语言基础组成

  • 关键字
  • 标识符
  • 注释
  • 常量和变量
  • 运算符
  • 语句
  • 函数
  • 数组

标识符

  1. 组成:26个英文字母大小写:a~zA~Z,数字:0~9,下划线:_,美元符号:$;
  2. 定义合法标识符规则:
    • 数字不可以开头;
    • 不可以使用关键字;
  3. Java严格区分大小写;
  4. 尽量定义有意义的名称(增强阅读性);

Java中的名称规范

  1. 包名:所有字母都要小写,例:xxxyyyzzz;
  2. 类名接口名:所有单词首字母大写,例:XxxYyyZzz;
  3. 常量名:多有单词都要大写,例:XXX_YYY_ZZZ;
  4. 变量名和函数吗:第一个单词小写,后面的每个单词首字母大写,例:xxxYyyZzz;

进制

二进制

  1. 1个字节由8个二进制位组成;
  2. 负数的二进制就是其正数的二进制取反+1,例:-6的二进制就是6的二进制取反+1,负数的最高位都是1;
    Java基础--进制、运算符、语句

进制转换

  1. 二进制转十进制
    原理:对十进制数进行除2运算取模;
  2. 二进制转十进制
    原理:二进制乘以2的过程;
  3. 其他进制转换
    • 转16进制:四个二进制位就是一个十六进制位;
    • 转八进制:三个二进制位就是一个八进制位;

Java基础--进制、运算符、语句


常量与变量

数据类型

  1. 基本数据类型
    • 数值型:
      a.整数类型:byte(1字节)、short(2字节)、int(4字节)、long(8字节);
      b.浮点类型:float(4字节)、double(8字节);
    • 字符型:char(2字节);
    • 布尔型:boolean;
  2. 引用数据类型
    • 类(class);
    • 接口(interface);
    • 数组(数据类型[]);

注:整数默认为:int;小数默认为:double;

Java中常量分类

  1. 整数常量:所有整数;
  2. 小数常量:所有小数;
  3. 布尔型常量:true、false;
  4. 字符常量:将一个数字或字母、符号用单引号标识,例:‘c’;
  5. 字符串常量:将一个或多个字符用双引号标识,例:“abc”;
  6. null常量:只有一个数值就是null;

变量的定义

  1. 定义变量时需注意的问题:

    • 同一区间不能定义同名的变量;
    • long l=4l,数字后的l表示长整型(4默认为int);
    • float f=2.3f,数字后的f表示单精度(小数默认为double);
    • double d=34.56,默认double;
    • char ch=’a’,字符常量需用单引号包含;
  2. 什么时候定义变量
      当数据不确定的时候,需要对数据进行存储时,就定义一个变量来完成存储动作;

  3. 自动类型提升
    例:byte b=3;
      b=b+2;
    以上定义在编译时将会发生异常:类型不兼容;
    解释:
     ①.b定义为byte类型,2是整数默认为int,当运行b+2时,b将自动提升类型为int型(以大的为主,小的向大的提升),运算结果为int,在运行b=b+2时将int型的结果向byte型的b赋值将发生异常(因为int为4个字节,byte为1个字节,所占空间不够,所以不能完成赋值);
     ②.若要将b+2的值赋给b可以进行“类型强制转换操作”,将b+2强转为byte,操作形式如下:
     b=(byte)(b+2);//前面的类型标识需要用“()”括起来;
     ③.类型强制转换应用场景:
     例1:运算结果为小数,但仅需整数部分时,可强制转换为int;
     例2:(char)(‘a’+1)运行结果为b,此运行过程为:运行’a’+1是将’a’类型提升为整型(因为1默认为整型,类型提升以大的为主),‘a’对应ASCII码值为97,作加法运算+1后的值为98,进行强制转换为字符型,98的ASCII码表对应为字符’b’,故运行结果为b;

class VarDemo 
{
public static void main(String[] args)
{
//定义变量的格式;
//数据类型 变量名 = 初始化值;
// 定义一个int类型变量.取值为4;
int x = 4;
System.out.println(x);
x = 10;
System.out.println(x);
//演示其他数据类型。
byte b = 2;//-128~127;
//byte b1 = 128;
short s = 30000;
long l = 4l;
float f = 2.3f;
double d = 34.56
char ch = '4';
char ch1 = 'a';
char ch2 = '+';
char ch3 = ' ';
boolean bo = true;
boolean bo1 = false;
int a = 5;
a = a + 6;
/*
什么时候定义变量?
当数据不确定的时候。需要对数据进行存储时。
就定义一个变量来完成存储动作。
*/

//类型的转换。
byte b = 3;
b = b + 2;
System.out.println(b);
System.out.println((char)5);
byte b = 3;
b = 3 + 4;
b = b + 4;
System.out.println(b);
}
}

运算符

算术运算符

  1. 单目:+(取正)-(取负) ++(自增) - -(自减)
    • a++ ——> a=a+1;
      b=a++;a先赋值给b,在自加1;
      b=++a;a先自加1,再将值赋值给b;
    • “+”符号的另一用法:字符串连接符:
       字符串数据和任何数据使用”+”都是相连接,最终都会变成字符串;
  2. 双目:+(加) -(减) *(乘) /(除) %(取余)
    用法与数学运算一样;
  3. 三目:a>b?true:false
    三元运算符:(条件表达式)?表达式1:表达式2;
    如果条件结果为true,执行是表达式1;
    如果条件结果为false,执行表达式2;

注:三元运算符为if else语句的简化形式,但其有局限性:三运运算符必须要有结果,但是if else无需结果亦可;

class OperateDemo 
{
public static void main(String[] args)
{
//int x = 4270;

//x = x /1000 * 1000;
//System.out.println(-1%5);
int a = 3,b;
//a++; //--> a = a+ 1;
b = ++a;
System.out.println("a="+a);
//字符串数据和任何数据使用+都是相连接,最终都会变成字符串。
//System.out.println("5+5"+(5+5));//"5+5=55"
/*
转义字符:通过\ 来转变后面字母或者符号的含义。
\n:换行。
\b:退格。相当于backspace。
\r:按下回车键。window系统,回车符是由两个字符来表示\r\n.
\t:制表符。相当于tab键。
*/

System.out.println("hello \t world");
//System.out.println("hello java");
System.out.println("\\hello\\");
char ch = '\'';
char c = 'a';
int x = 1,y;
//三元运算符
y = (x>1)?'a':200;
System.out.println("y="+y);
}
}

赋值运算符

= += -= *= /= %= &= ^= |= <<= >>=
例:x+=4 ——>x=x+4;
这两者的区别在于:若x被定义为short类型时,x=x+4编译失败,x+=4编译通过;
解释:x为short,4为int,x+4运算后结果为int,无法赋值给short类型的变量;
x+=运算再给x赋值时,自动完成强制转换操作;

比较运算符

  • 等于符号:==
  • 大于符号:>
  • 小于符号:<
  • 小于等于符号:<=

注意:
1. 比较运算符的结果都是boolean型,也就是要么true,要么false;
2. 比较运算符”==”不能误写成”=”;

逻辑运算符

  1. 逻辑运算符用于连接boolean类型的表达式:

    • 与 &:只要两边的boolean表达式结果,有一个为false,结果为false;只有两个都为true,结果为true;
      true & true = true;
      true & false = false;
      false & true = false;
      false & false = false;
    • 或 |:两边只要一个为true,结果为true;两边都为false,结果为false;
      true | true = true;
      true | false = true;
      false | true = true;
      false | false = false;
    • 异或 ^:两边相同结果为false;两边不同结果为true;
      true ^ true = false;
      true ^ false = true;
      false ^ true = true;
      false ^ false = false;
      一个数异或同一个数两次,结果是它本身(应用于加密)。
      示例:见下文代码;
    • 非 !:
      ture==!false; false==!true;
  2. &&和||

    • &&双与(短路):当左边为false时,右边不运算;&:左边无论真假,右边都进行运算;
    • ||双或(短路):左边为真时,右边不参与运算;|:同理;
      注:&&和||的运算效率稍微高一点;
      Java基础--进制、运算符、语句
class OperateDemo2 
{
public static void main(String[] args)
{
int x = 7;
//逻辑运算符用于连接boolean类型的表达式。
//x>3 & x<6 = true & true = true;
/*
!!true
*/

int a = 2;
//a>3 && a<6;
System.out.println(false ^ false);
System.out.println(~6);
int n = 3,m = 8;
System.out.println("n="+n+",m="+m);
//交换两个数的值:
//1,通过第三方变量。
/*int temp;
temp = n;
n = m;
m = temp;
*/

//2不用第三方变量。
//11 = 3 + 8;

//3 = 11 - 8;
//8 = 11 - 3;
/*
n = n + m;//如果n和m的值非常大,容易超出int范围。
m = n - m;
n = n - m;
*/


//一个数异或同一个数两次,结果是它本身
n = n ^ m;
m = n ^ m;//(n^m)^m;
n = n ^ m;//n ^ (n ^ m)
System.out.println("n="+n+",m="+m);
}
}

位移运算符(二进制运算)

  • <<:左移 其实就是乘以2的移动的位数次幂;
  • >>:右移 就是除以2的移动的位数次幂;
    特点:右移的时候,最高位是什么就补什么,例:负数的最高位补1;
  • >>>:无论最高位是什么,右移后都用0补;
  • ~:取反;
    Java基础--进制、运算符、语句
    综合代码示例:
class OperateDemo3 
{
public static void main(String[] args)
{

//System.out.println(Integer.toBinaryString(60));
//System.out.println(Integer.toHexString(60));

int num = 26;

//获取60的最低4位,通过&15;
int n1 = num & 15;

System.out.println(n1>9?(char)(n1-10+'A'):n1);


//要获取下一组四位,将60右移4位。
int temp = num >>> 4;

//对temp的值进行最低四位的获取。
int n2 = temp & 15;
System.out.println(n2>9?(char)(n2-10+'A'):n2);

/*
0-9 'A' 'B' 'C' 'D' 'E' 'F'
65 66 67
10 11 12 13 14 15

12 - 10 = 2 + 'A' = (char)67;
*/


int x = 1,y;

y = (x>1)?'a':200;
System.out.println("y="+y);
}
}

转义字符

通过“\”来转变后面字母或者符号的含义;

  • \n:换行;
  • \b:退格,相当于backspace;
  • \r:按下回车键,Windows系统,回车符由两个字符来表示,\r\n;
  • \t:制表符,相当于tab键;
    例:想要打印带双引号的字符串,书写格式如下:”\”hello\”“;
    带斜线的字符串:”\hello\”;

程序流程控制

1.判断结构:if else语句

三种常见格式:
- 格式一:
if(条件表达式)
{
执行语句;
}

  • 格式二:
    if(条件表达式)
    {
     执行语句;
    }
    else
    {
     执行语句;
    }

  • 格式三:
    if(条件表达式)
    {
     执行语句;
    }
    else if(条件表达式)
    {
     执行语句;
    }
    else
    {
     执行语句;
    }

    注:当if下的控制语句只有一条时,”{}”可不写;

代码示例:

class IfTest 
{
public static void main(String[] args)
{
//需求1:根据用户定义的数值不同。打印对应的星期英文。
/*
int num = 1;

if(num==1)
System.out.println("monday");
else if(num==2)
System.out.println("tsd");
else
System.out.println("nono");
*/

//需求2:根据用于指定月份,打印该月份所属的季节。
//3,4,5 春季 6,7,8 夏季 9,10,11 秋季 12, 1, 2 冬季

int x = 4;

if(x==3 || x==4 || x==5)
System.out.println(x+"春季");
else if(x==6 || x==7 || x==8)
System.out.println(x+"夏季");
else if(x==9 || x==10 || x==11)
System.out.println(x+"秋季");
else if(x==12 || x==1 || x==2)
System.out.println(x+"冬季");
else
System.out.println(x+"月份不存在");


if(x>12 || x<1)
System.out.println(x+"月份不存在");
else if(x>=3 && x<=5)
System.out.println(x+"春季");
else if(x>=6 && x<=8)
System.out.println(x+"夏季");
else if(x>=9 && x<=11)
System.out.println(x+"秋季");
else
System.out.println(x+"冬季");
}
}

2.选择结构

  • switch语句
    格式:
    switch(表达式)//switch表达式的值仅接收byte、short、int、char四中类型;
    {
     case 取值1:
       执行语句;
       break ;
     case 取值2:
       执行语句;
       break ;

     case 取值3:
       执行语句;
       break ;
       ……
     default:
       执行语句;
       break ;//最后一条break可省略;
    }

  • 注:
      当case后面没有执行与且也没有break时,将从与它最近的执行语句开始执行;
      case之间与default没有顺序,先执行第一个case,诶呦匹配case执行default,当default在case前面且所有case都不满足时,执行default接着不再判断case并将所有能执行的语句全执行一遍;
      当答案选项不多时,且为byte、short、int、char这四种类型时,用switch结构,当区间范围较大时用if结构;

  • 特点:
      if可判断区间及boolean型值;
      switch的执行效率较高;

代码示例:

class  SwitchTest
{
public static void main(String[] args)
{

//需求2:根据用于指定月份,打印该月份所属的季节。
//3,4,5 春季 6,7,8 夏季 9,10,11 秋季 12, 1, 2 冬季

int x = 4;

switch(x)
{
case 3:
case 4:
case 5:
System.out.println(x+"春季");
break;

case 6:
case 7:
case 8:
System.out.println(x+"夏季");
break;
case 9:
case 10:
case 11:
System.out.println(x+"秋季");
break;
case 12:
case 1:
case 2:
System.out.println(x+"冬季");
break;
default:
System.out.println("nono");

}

/*
if和switch语句很像。
具体什么场景下,应用哪个语句呢?
如果判断的具体数值不多,而是符合byte short int char这四种类型。
虽然两个语句都可以使用,建议使用swtich语句。因为效率稍高。

其他情况:对区间判断,对结果为boolean类型判断,使用if,if的使用范围更广。

*/

System.out.println("Hello World!");
}
}

3.循环结构

代表语句:while、do while、for

  1. while 语句格式:
    while(条件表达式)//注:该语句()后面不可加”;”否则进入死循环;
    {
      执行语句;
    }

  2. do while语句格式;
    do
    {
      执行语句;
    }
    while(条件表达式);//此处分好不可少,代表语句结束;
    注:do while特点是条件无论是否满足,循环体至少被执行一次(先执行循环体一次,再判断条件再执行循环体);

  3. for语句格式:
    for(初始条件表达式;循环条件表达式;循环后的操作表达式)
    {
      执行语句;
    }

    注:

    • for里面的表达式运行的顺序:
      1.执行初始化表达式(只执行一次);
      2.执行判断循环条件:真就执行循环体,假就跳出循环;
      3.执行循环后的操作表达式;
      4.重复步骤2和3;
    • while与for可互换,区别在于for循环内定义的变量在for循环结束就在内存中释放,而while循环使用的变量在循环结束还可以继续使用;
    • 最简单的无限循环格式:while(true),for( ; ; );
    • 条件表达式必须有真假(可判断);
    • 当有多条表达式时,可用”,”隔开;
      例:for(初始化表达式1,~2,~3;循环条件表达式;循环后表达式1,~2){}
    • 计数器思想:通过一个变量记录注数据的状态变化,也许通过循环完成;
    • 其他:嵌套循环的应用。
 /*
2,1~100之间 7的倍数的个数。并打印。
思路:
1,先对1~100进行循环(遍历)通过循环的形式。
2,在遍历的过程中,定义条件。只对7的倍数进行操作。
3,因为7的倍数不确定,只要符合条件,就通过一个变量来记录住这个变化的次数。
步骤:
1,定义循环语句,选择for语句。
2,在循环中定义判断。只要是7的倍数即可。使用if语句。条件:7的倍数 x%7==0;
3,定义变量,该变量随着7的倍数的出现而自增。
*/

class ForTest
{
public static void main(String[] args)
{
int count = 0;
for(int x=1; x<=100; x++)
{
if(x%7==0)
//System.out.println("x="+x);
count++;
}
System.out.println("count="+count);

/*
计数器思想。
通过一个变量记录住数据的状态变化。
也许通过循环完成。

*/

}
}

其他流程控制语句

  • break(跳出)
    break语句:应用范围 选择结构和循环结构;
  • continue(继续);
    continue语句:应用于循环结构;

  • 注:

    1. 这两个语句离开应用范围,存在是你没有意义的;
    2. 这两个语句单独存在下面都不可以有语句,因为执行不到;
    3. continue语句是结束本次循环继续下一次循环;
    4. 标号的出现可以让这个两个语句作用于指定的范围;
  • 给循环起名可用标号 方式,使用方式:

    w:for(;;)//给循环起名for前面  循环名+":"的形式;
{
q:for(;;)
{
System.out.println("hello");
break w(q);//break后跟谁就跳谁,若break语句后无循环名,默认跳出break语句所在的循环体;
}
}

经典示例:

/*
练习:3000米长的绳子,每天减一半。问多少天这个绳子会小于5米?不考虑小数。

*/

class ForTest4
{
public static void main(String[] args)
{
int day = 0;
for(int x=3000; x>=5; x/=2)
{
day++;
}
System.out.println("day="+day);

/*
for(int x=3000; x>=5; day++)
{
x = x/2;
}
*/

}
}


/*
打印等腰三角形图形
----*
---* *
--* * *
-* * * *
* * * * *

* * * * *
-* * * *
--* * *
---* *
----*

*/


class ForForTest2
{
public static void main(String[] args)
{
for (int x=0; x<5 ;x++ )
{
for(int y=x+1; y<5 ; y++)
{
System.out.print(" ");
}
for(int z=0; z<=x ; z++)
{
System.out.print("* ");
}

System.out.println();
}
}
}