Java那些事:基本控制流

来源:互联网 发布:非首脑会谈知乎 编辑:程序博客网 时间:2024/05/06 23:49

数据类型

         Java中的char是16位,由于Java为了保持跨平台(Unicode编码)所以如此设置,Java提供了另外一种数据类型----byte,这个和C语言中的char是一样的,其次,Java为了跨平台,所以为每一个数据类型提供了固定的字长,另外,相较于C语言,Java提供了boolean数据类型,布尔值在Java中占用一位存储(相对于C++是使用一个字节存储)。Java还有另外的一中数据类型就是short----16位。另外一点需要特别的注意—Java中没有无符号的数据类型,也就是说bye是-128----127,其余的也就得到相关的推演。String是Java中使用频度很高的,但是它其实并不是基本数据类型,而是对象。

 

Java引用传递OR值传递

         Java中只有值传递,所谓引用传递是C++中的一种特性。Java的基本数据类型在参数传递的过程中,是直接复制传递,所以在主调方法中改变参数是不会对原值造成任何的影响,对于对象,由于Java中所有的对象都是在堆上面,在栈中只会存在引用(或者可以说一种受到限制的指针)指向堆中的对象,所以,当传递引用(或者说对象)的时候,就像C语言中传递指向某个数据的指针一样,任何修改都会反映到这个被传递的对象中,有时候这个真的很烦!所以,不论是C语言还是Java都只有一种参数传递方式---值传递。

 

Java支持的操作符

         除了四则运算外,还有%、--、++、+=的一系列、三元运算符、字符串连接+、==的特性、逻辑运算符、位操作符、类型转换。

         优先级,赋值都和C语言一样,当然对于自增和自减操作符和C语言有一样的特性。Java支持短路-----在判断语句中,如果当前的条件已经足够判断真假,那么后面的条件判断将不会执行,高效的Java程序在这一点上都会优化。

         其次便是字符串连接操作“+”,对于这个操作符,在程序中我的建议是少用!由于Java的字符串是常量所以每执行一次+的字符串连接操作,将会创建一个新的String对象,所以如果不小心是程序使用了较多的+(比如在for中)来连接字符串,将会导致程序的效率降低,而且在某些情况下,还会造成安全问题,比如SQL注入攻击。

         在浮点数中,当使用科学计数法的时候,一般有个很特殊的“e”存在,当然,如果平时和数值计算打交道比较少就会认为这个是数学中的e,但是,请一定记住,这里的e是10的代表。也就是说1.33e12f所表示的是1.22*10^12,所以如果以后遇见,千万别被*了,才知道。

         对于移位,如果没有学习过相关的课程,可能会觉得陌生,但是连Java这个高级的语言,都提供了移位操作,已经足以说明移位操作的重要性(其实你大部分时间都不会用到)!这里介绍一下相关的几个名词:高位、低位、原码、反码、补码还有与、异或、取反等,最近在上数字逻辑和组成原理,其实这种高效率的操作符有时候可以用于某些算法。

         类型转换:Java允许基本类型之间互换。在执行窄转化时,必然会有相应的截尾,比如把一个double转换为一个int,会直接舍去小数点后面的数值,如果想要数学中的四舍五入,可以自己编写算法或者使用Math中的round()方法(别重复发明轮子)。

         另外一点就是,在基本类型的运算中,只要比int小(比如char、byte等),都会被自动提升到int,而double和float运算,float也会被自动提升到double,当然对于计算机,齐位更加好计算。在进行数值运算的时候,其中最大的数值类型决定了结果的类型,这点需要明白,因为,有时候涉及数值运算的时候,你会发现很多的类型转换问题!所以,数值运算的时候一定要提醒自己---溢出了吗?精度丢失了吗?……

 

Java控制语句

         If(和C语言中的else选择原理相同)、while、break、continue、return、普通for、逗号运算符(唯一的用处就是for语句中)就不说明了。

         Foreach语法:是Java SE5引入的一种对于遍历数组和容器更加简洁易读的方法,据说,Foreche的效率更高!而在《Java编程思想》说“只要有可能,就使用Foreach语法”。容器中只有实现了Iterator接口的类才可以使用Foreach语法,数组的Foreach语法是被Java所支持的,不需要任何其他编程要求。

 

public classForeachTest {     public static void main(String[] args) {        int[] test ={1,2,3,4,5,6,7,8,9};               for(inti : test){            System.out.println(i);        }    }}


         上面是foreach的语法规则,test的每一个元素都会依次被赋值给i,这样的写法是不是显得简洁得多?当然,如果涉及到计数相关,自然对于对于集合的foreach,以后集合那一块再说。

 

         switch语句单独说明是,很多的时候大家将不是int和char的数值放入switch中(byte,char,int均可放入,但是不能放入long),这个时候编译时一定不会通过的。Java SE1.5提供了一种新的类型---枚举,它也可以作为switch的判断对象,switch和枚举其实是相当不错的一个技术。另外有一个很大的惊喜就是StringJavaSE7中也可以在switch中使用,但是这一点背后的技术难度其实是相当大的。

 

         需要特别说明一下goto,在第一次学习C语言的时候,我曾经在一个程序中较多的使用了goto语句,但是后来发现程序有些问题的时候,却发现程序的流程十分的混乱,即使只有单个线程,再一看,发现我深爱的C语言的简洁被我完全破坏了,所以,即使有时候goto可以带来不错的效率或者流程操作,也要权衡使用goto所带来的诸多坏处,说这么多的原因就是Java保留了goto的用法,虽然没有直接使用goto,但是有标签这个语法就足够表现goto了。

2 0
原创粉丝点击