`

JAVA基本功<5>

 
阅读更多

一.常量与变量
1.概念:变量就是内存中的一个存储区域,它有自己的名称和类型。在这个区域中的数据,可以在同一类型范围内不断变化。其实变量就是用来存储某些常量的内存空间。

那么为什么要定义变量呢??
原因就是,它所存储的数据可以在同一类型范围内不断变化,进而可以重复利用。

定义变量的格式:
数据类型  变量名 = 初始化值
注:格式是固定的,记住格式,以不变应万变。
理解:变量就如同数学中的未知数。

2.数据类型
4类八种  1.byte的取值范围是-128到127,即-2的7次方,到2的7次方减1。
             2.老师用了一个很容易记得例子来描述基本数据类型所占的字节:
               一个字节就相当于一两饭,byte 能装一两饭(指占一个字节),short,char能装2两饭,int,float能装4两饭, long,double能装8两饭。
注意:1.一个中文也是2个字节,所以用char来存储中文,也是可以的。Char的取值范围是0到65535。
      2. 一个float类型,必须对其存储的小数数据结尾处添加f标识。表示只取该小数的单精度。
3.类型转换
分为两种:一种是自动类型转换(隐式类型转换),另一种是强制类型转换(即显式类型转换)。
  自动转换:所有short,byte,char,自动转换为int型。(整型默认的是int型)
            小数默认的是double型。
            1如果一个操作数是long型,计算结果就是long型;
                         2 如果一个操作数是float型,计算结果就是float型;
3 如果一个操作数是double型,计算结果就是double型。
注意:    不同数据类型之间是不可以直接进行运算的,
需要转换成同一个类型才可以进行运算。
数值类型因为都代表具体整数和小数,是可以转换的。
通常以占内存空间较大的类型为主,进行转换。

  强制转换:                                                     x=2;
       在需要被转换的数据前面,加上你想要的转换成的类型即可,如:byte b = (byte)(x + 4)    

面试题:
class VarTest
{
public static void main(String[] args)
{

//byte b = 3;

//b = b + 1;//错了。因为1默认就是int类型,所以b+1时,b会自动类型提升为int类型。
//相加的结果还是int类型,所以赋给b装不下。

//b = (byte)(b+1);//一般做这样强制转换的不多。

// byte b3 = 2 + 7;//2和7都是常量,而且加完的结果也是一个常量,9在byte范围内,所以自动转换成byte类型。
byte b1 = 2;//其实2是int类型,在编译时,编译器会判断具体的常量值是否在byte类型范围内。
//如果在,会将其转成byte类型存储到byte的空间中。这个转换动作是自动的。

byte b2 = 7;

//byte b4 = b1 + b2;//错误,因为b1 b2的值是不确定的。所以默认都是用int存储的。
//因为加完的结果有可能超出byte范围,丢失精度。
char ch = 'a';
System.out.println((char)(ch+4));//98//ch和1运算,ch进行提升为int类型,因为字符都有对应的编码表中的数字
//所以ch提升为int后,就是97.因为字符a对应的数字就是97.
//String s = "abc";//定义一个字符串数据。
System.out.println("4+5="+4+5);//任何数据和字符串相加都是相连接。连接后,会变成一个新的字符串。

//"4+5="+4="4+5=4"+5 = "4+5=45"
/*
结论:
当右边的数据是常量值时,编译器会判断是否在左边的类型范围之内,如果在,会自动转换成左边的类型。

当右边的数据是变量时,编译器会使用默认的类型进行存储。如果左边的类型占用空间小于默认类型,
如果不做强制转换,会容易丢失精度。编译会失败。

*/
}

二. 运算符
1. 算术运算符
包括:+  -  *  /  %  ++   - -。
需要注意的问题:1.去模时,左边小于右边,结果是左边。 如:2%3  结果就是 2
左边等于右边,结果是零。   如:2%2 结果为0
             2.运算中,只参考被模数(指左边的数)的正负号。如:-2%3= -2 ; 2%-3 = 2
                3.++  -- 的一些问题 :
int a = 3,b;
//b = a++;//自增就是在变量原有数据的基础上+1,然后将+1后的结果赋值给该变量。
b = ++a;

/*
如果是 b= a++;a在前面,a先参与其他运算,比如将a的值赋值给b。然后a在自增,将a+1的结果赋值给a。
如果是 b= ++a;++在前面,先运算,将a+1的结果赋值给a。然后,a在参与其他运算,比如:将a的结果赋值给b。
如果a++;不参与其他运算,而是单独一条语句,++在前在后都一样。
*/


2. 赋值运算符
包括:= , +=, -=, *=, /=, %=
注意:  =:将右边赋值给左边。
        +=:将左右两边的和赋值给左边。
面试题:
short s = 5;
s = s + 2;
s+=2;
问:代码是否有问题?  这两句代码有什么区别?
答:区别一:第一句代码不能通过编译,第二句代码可以通过编译(因为赋值运算符,会做自动转换动作。)。
     区别二:第一句的代码是两步运算,第二句的代码是一步运算。它相当于s=2,只不过呢,它是把左右两边的和赋值给的s。

3.比较运算符
   包括:>   <    >=   <=   ==   !=
比较运算符运算的结果只有两种值:要么是true。要么是false。

4. 逻辑运算符
逻辑,可以理解为关系。
它包括:与:&    或:|     非:!    异或:^     短路与 &&      短路或 ||
     它们的作用是:用于连接两个boolean类型的表达式。

& 和 &&  的区别:
&:无论左边的结果是true还是false,右边都会被运算。
&&:当左边为false时,右边是不参与运算的。
简单说:
&:两边都执行。
&&,只有左边是false右边不执行,剩下的剩下情况都执行。

| 和 || 的区别:

|:无论左边的结果是true还是false,右边都会被运算。
||:当左边为true时,右边是不参与运算的。
简单说:
|:两边都执行。
||,只有左边是true右边不执行,剩下的剩下情况都执行。
5. 位运算符
   它是专门用于操作二进制位的运算符。
    左移:<< :左移就是乘以2的次幂。左移几位,就乘以2的几次幂。
右移:>> :右移就是除以2的次幂,右移几位,就除以2的几次幂。
注意:右移后,高位出现的空位,按照原来高位的值进行补位,如果原来最高位值是0,就用0补空位。    
  如果最高位是1,就用1补空位。

无符号右移:>>> : 右移后出现的空位,都用0补,不参考原来最高位的值。
~ 这个运算符,叫作反码。如:~6 = -7
注意:计算的时候,先转换为二进制,再进行运算。
      如:6&3 即  110
                & 011
                  010 它转化为十进制就是2

面试题:
问题是: 对两个整数变量的值进行互换(不需要第三方变量)
答案:  int x = 3,y = 5;//要求置换后:x = 5,y = 3;
  //这是利用了异或的特性。面试要答这个答案。 而开发时,要使用第三方变量的形式。
  //因为异或这种形式,阅读性很差,而第三方变量容易阅读和理解。
  x = x ^ y;//x = 3 ^ 5;
  y = x ^ y;//y = (3 ^ 5) ^ 5 = 3;
  x = x ^ y;//x = (3 ^ 5) ^ 3 = 5;

6. 三元运算符
格式是:(条件表达式)?表达式1:表达式二

三. 程序流程控制
1. 判断结构
包括:1.if(){ }  2.if() { }  else     3. if(){}  else if{} …….  Else
注意:三元运算符是if else的简写格式。
好处:简化书写。看起来更加简单明了。
弊端:只能是在if else执行完有具体数据结果时,才可以进行简写。
如:if(x > 2){ System.out.println(“ ok”);}
     else
          System.out.println(“no”);   这种就没有具体的数字结果,所以无法简写。
  但是呢 int x=1 , y=3, z ;
       If(y>x){ z = y;}  else { z = x;}      这种的就可以简写,因为有数字结果。
     简写就可以写成: z =(y > x)? y : x;

2. 选择结构
    格式:
switch(表达式)
{
case 取值1:
执行语句;
break;
case 取值2:
执行语句;
break;
…...
default:
执行语句;
break;
}
特点:
1,和switch语句结束大括号相邻的break可以省略不写。写上也没问题。
2,switch语句的所有答案,没有固定的顺序。可以任意排放。但是执行时,肯定从第一个case执行。
3,switch语句结束,有两种方式。1,执行到break,2,执行到switch语句结束大括号。
4,被选择的值的类型是有限定的。只能接受byte short  int char。四种类型的值。
5,当所有的case都没有匹配时,就会执行default语句。

switch特殊情况:
当匹配的case没有对应的break,那么switch语句会继续执行下面可以执行代码,不会在判断其他case。
将能执行的代码执行完,直到遇到break,或者执行到switch语句。

但是什么时候使用判断结构,什么时候使用选择结构呢???
f和switch的应用场景:
1,对几个值进行判断的时候,
可以用if,也可以用switch。但是建议使用switch。因为swtich效率稍高。
注意:switch有局限性,1,只能是固定个数的值,不能太多。2,类型有限定,只能是byte short int char。
2,对于数据区间的判断,使用if语句。
对于运算的结果是boolean类型的数据,也可以使用if语句。
相对而言,if较为常用。switch较为少用。
所以在JDK不断升级过程中,对switch也进行了升级。
JDK5.0.  switch语句多一种支持的数据类型 enum.枚举。
JDK7.0   switch语句又多一种支持的数据类型 String 字符串类型。

四. 总结:
今天的很多东西,在以前已经学过,但是很多细节上的知识,我在以前是没学到的。今天我觉得收获最大的应该就是赋值运算了,如:a = a + 1; a += 1。它们的区别,以前没了解过,今天一听课,才恍然大悟。明天讲解循环,函数。数组。感觉学的东西越来越多,我还应该更努力的去学习才行。



师傅,今天没有问题呢, 。其实我也不想这么花哨的,但是为了以后复习看起来有针对性,我就不得不整成这样了,加颜色的部分,我是得侧重看的,以后要是工作了,我就不会这样弄了。其实花哨了也浪费了好多时间。唉。师傅,我睡觉去了,明天任务很重,后天我休息。我到时候把这3天的都再压缩总结一下。辛苦师傅啦!!嘿嘿。
分享到:
评论

相关推荐

    html css网页制作成品.zip

    HTML5引入了更多语义化标签,如`&lt;header&gt;`、`&lt;footer&gt;`、`&lt;section&gt;`、`&lt;article&gt;`等,提高了网页内容的可读性和可访问性。 CSS允许开发者对这些HTML元素进行样式设定。可以使用选择器(如类选择器 `.class`,ID...

    历年软考程序员试题及答案

    其中的一道试题: &lt;br&gt;面向对象程序设计以_(1)_为基本的逻辑构件,用_(2)__来描述具有共同特征的一组对象,以_(3)_为共享机制,共享类中的方法和数据。&lt;br&gt;&lt;br&gt;(1) A.模块 B.对象 C.结构 D.类&lt;br&gt;(2) A.类型 B....

    web.xml配置详解

    了解并熟练掌握`web.xml`配置是每个Java Web开发者的基本功,它可以帮助我们更精确地控制应用的行为,提高代码的可维护性和可扩展性。通过不断实践和调整,你可以根据需求定制出最适合你的应用的配置方案。

    HTML,CSS,JavaScript语法简明速查表

    在HTML5中,新增了如`&lt;header&gt;`、`&lt;footer&gt;`、`&lt;section&gt;`等语义化标签,以更好地表达网页的结构。 CSS(Cascading Style Sheets)则是用来控制网页样式的语言。它可以定义颜色、字体、布局以及不同设备上的显示...

    java 基本功训练题及参考答案

    "java 基本功训练题及参考答案"这个资料集合显然就是为了帮助Java初学者巩固基础而设计的。 文档"Java编程基本功训练题及参考答案(50+10).doc"很可能包含了50个基础编程题目和额外的10个进阶问题,覆盖了Java语言的...

    疯狂Java:突破程序员基本功的16课PDF

    《疯狂Java:突破程序员基本功的16课》是一本专为Java初学者和有经验的程序员设计的书籍,旨在通过一系列深入浅出的课程,帮助读者巩固和提升编程技能,从而达到“疯狂”提升Java编程能力的目标。这本书涵盖了程序员...

    疯狂Java 突破程序员基本功16课 2

    疯狂Java 突破程序员基本功16课1 完全清晰版 5分超低分 挥泪相送啦!这是第二部分 记得下第一部分哇!

    疯狂Java:突破程序员基本功的16课2

    《疯狂Java:突破程序员基本功的16课2》是一本深入浅出的编程学习书籍,专注于提升程序员的基础技能。作者李刚以其丰富的教学经验,精心设计了16个课程,旨在帮助读者全面掌握Java编程的核心知识,为日后的职业发展...

    java基本功面试专题

    Java基本功面试专题涵盖了许多核心概念,是求职者在准备Java相关职位面试时不可或缺的知识点。这份2W字的详细资料可能包括了类与对象、数据类型、控制结构、异常处理、内存管理、多线程、集合框架、IO流、网络编程、...

    疯狂Java:突破程序员基本功的16课

    对于提升java程序员的基本功十分有帮助,让你深入理解java的内在。也可用于面试

    Java基本功:List转Map List的几种姿势

    灰灰老师 Java基本功:List转Map List的几种姿势

    WebService接入用户使用说明

    &lt;voicePrice&gt;0.1&lt;/voicePrice&gt; &lt;signZH&gt;中文签名&lt;/signZH&gt; &lt;signEN&gt;英文签名&lt;/signEN&gt; &lt;/resp&gt; ``` **返回值说明**: - **code**:返回状态码,其中`1000`表示操作成功,其他状态码的含义参考附录中的`code`...

    《疯狂Java 突破程序员基本功的16课》PDF版本下载.txt

    根据提供的文件信息,我们可以推断出这是一本关于Java编程技术的书籍——《疯狂Java突破程序员基本功的16课》。尽管没有提供具体的章节内容,但基于书名及其描述,我们可以合理推测这本书的主要内容是帮助程序员提升...

    安卓开发的两种数据解析(json、xml)

    String xmlString = "&lt;students&gt;&lt;student&gt;&lt;name&gt;John&lt;/name&gt;&lt;age&gt;30&lt;/age&gt;&lt;/student&gt;&lt;student&gt;&lt;name&gt;Jane&lt;/name&gt;&lt;age&gt;28&lt;/age&gt;&lt;/student&gt;&lt;/students&gt;"; DocumentBuilderFactory factory = DocumentBuilderFactory....

    疯狂Java:突破程序员基本功的16课.修订版

    疯狂Java:突破程序员基本功的16课.修订版。。

    疯狂java 突破程序员基本功的16课

    内容讲解的很详细,对java程序员有一个质的提升,欢迎大家下载

    突破程序员的java基本功代码

    "突破程序员的java基本功代码"这个主题旨在帮助Java程序员深化对基础概念的理解,提升编程技能,从而在职业生涯中实现突破。下面将详细探讨Java编程的基本知识点。 一、Java语法基础 Java的语法结构严谨,它借鉴了...

Global site tag (gtag.js) - Google Analytics