1.2 J2SE复习之Java语言基础

JVM负责垃圾回收,内存管理


+=符号辨析


short s=10;

s=s+3;//改变了数据类型,int型赋值给short类型,可能损失精度

s=(short)(s+1);//不推荐

s += 1;//不改变数据类型,仍然为short


=支持连续赋值,==为"等于"


if(b=true);//赋值语句

等价于if(true)


int i=1;

i *= 0.1;//编译通过,结果为0


逻辑运算符对象为布尔类型变量


^异或


“&”和“&&”的区别:
单&时,左边无论真假,右边都进行运算;
双&时,如果左边为真,右边参与运算,如果左边为假,那么右边不参与运算。
“|”和“||”的区别同理,||表示:当左边为真,右边不参与运算(节省运算量)


位运算符,运算对象为数值,提高效率


<<左移1等价于*2,2*8,等价于2<<<3,但移动过多,会影响符号位




有无符号右移,区别在于补位的数字(全部的空位)是1还是0


交换数值的方法

1)提供临时变量,略


2)

int m = m+n;

int n = m-n;

int m = m-n;//这种方法容易超出int范围


3)最佳方法(绝妙)

int m = m^n;

int n = m^n;//(m^n)^n==m

int m = m^n;//(m^n)^m==n


三元运算符(重点)


(条件表达式)? 表达式1:表达式2;


true,运算后的结果是表达式1;
false,运算后的结果是表达式2;


1)运算符一定要有运算结果,结果的数据类型同表达式1和2的数据类型一致。

表达式1和表达式2为同种类型

2)可用if-else替代,都能实现时,优先三元运算符


例:String str = (i>j)?"i大":(i==j)?"相等":"j大";


判断三数中最大数


int max1 = (m>n)?m:n;

int max2 = (max1>k)?max1:k;


练习:

将60转化为16进制,并表示出来


PS:JDK封装了相关类方法

String binary = Integer.toBinaryString(i);//二进制表示

String hex = Integer.toHexString(i);//十六进制表示


思路:与运算提取高位,低位(多位可通过循环实现)


int j = i&15;//提取低4位,00001111,&为位运算

char c = 'a';

char c1 = (char)(c+2);

String k1 = (j<=9)?j+"":(char)(j-10+'a')+"";//注意int强制转换为char


i = i>>4;

int z = i&15;

//同上,更多位循环之,如int为32位,8次

sop(k2+k1);


顺序结构
程序从上到下逐行地执行,中间没有任何判断和跳转。

分支结构
根据条件,选择性地执行某段代码。
有if…else和switch两种分支语句。

循环结构
根据循环条件,重复性的执行某段代码。
有while、do…while、for三种循环语句。
注:JDK1.5提供了for-each循环,方便的遍历集合、数组元素


if语句三种格式:

1.  if(true){
    执行代码块;
     }

2.  if(条件表达式){
    执行代码块;
      }
     else{
    执行代码块;
      }

3.  if(条件表达式){
    执行代码块;
      }
      else if (条件表达式){
    执行代码块;
      }
       ……
       else{
    执行代码块;
       }


if...else语句且只执行一条路径(分段函数的既视感)



获取键盘输入:

1.导包2.新建对象3.调用对象方法


import java.util.Scanner;

Scanner s = new Scanner(System.in);//接受键盘内容

sop("请输入");

String str = s.next();//获取字符串

int num = s.nextIn();


if-else语句可嵌套

  if(){

  }else{

    if(){

     }

}


if-else语句


当多个条件互斥时,条件语句的上下位置可调换,反之,不成立

当多个条件语句存在包含关系时,范围小的写在范围大的上面


执行语句块只有一条时,{}可省略


if(a>1){

  if(b>1)

     c=1;//只包含一行语句块

     d=1;//d=1赋值运算,不管b>1与否,都执行

}

等价于

if(a>1){

  if(b>1){

     c=1;}

     d=1;

}




练习:



switch语句(crucial)


switch(表达式)中表达式的返回值必须是下述几种类型一:byte,short,char,int,枚举,String(JDK1.7引入) 不可放double,float,Boolean


switch(变量){
    case 常量1:
        语句1;
        break;
    case 常量2:
        语句2;
        break;
    … …
    case 常量N:
        语句N;
        break;
    default:
        语句;
        break;
     }

case子句中的值必须是常量,不能是范围,且所有case子句中的值应是不同的;


default子句是可任选的,(可以没有,可不在末尾,当即使在句首,仍先判断case语句),当没有匹配的case时,执行default


break语句用来在执行完一个case分支后使程序跳出switch语句块;如果没有break,程序会顺序执行到switch结尾


int i=5;

switch(i){

   default:

    sop("default")

   case 1:

    sop("1");

   case 2:

    sop("2");//输出default 1 2

    break;

   case 3:

    sop("3");

}


int i=2;

switch(i){

   default:

    sop("default")

   case 1:

    sop("1");

   case 2:

    sop("2");//输出2 3 default[和default程序位置无关]

   case 3:

    sop("3");

}


当多个case语句块一致时,可统一书写

下例也体现了switch和if的转换(/10)



编写程序:从键盘上输入2014年的“month”和“day”,要求通过程序输出输入的日期为2014年的第几天。


思路:利用break实现累加效果



if和switch语句很像,具体什么场景下,应用哪个语句呢?

1)如果判断的具体数值不多,而且符合byte、 short 、int、 char这四种类型。虽然两个语句都可以使用,建议使用swtich语句。因为效率稍高。

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


从键盘分别输入年、月、日,判断这一天是当年的第几天
 
   注:判断一年是否是闰年的标准:
       1)可以被4整除,但不可被100整除
       2)可以被400整除


相对于上题,修改之处在于2月

用if判断是否闰年,决定不同天数





猜你喜欢

转载自blog.csdn.net/lwz45698752/article/details/79737880
1.2