JAVA 从0开始 二

2013年3月16日;周末加班在公司,看看JAVA,电子文档挺给力的;

一切都是对象

part1:基本概念;

一:用引用(reference )操纵对象

尽管一切都“看作”对象,但操纵的标识符实际上是对象的一个“引用”
(reference) 。你可以将这一情形想象成用遥控器(引用)来操纵电视机(对象)
。你只要握住这个遥控器,就能保持与电视机的连接。当有人想改变频道或者减小音量时,你实际操控的是遥控器(引用),
再由遥控器来调控电视机(对象)。如果你想在房间里四处走走,同时仍能调控电视机;那么你只需携带遥控器(引用)而不是电视机(对象)。

此外,即使没有电视机,遥控器亦可独立存在。也就是说,你拥有一个引用,并不一定需要有一个对象与它关联。

因此,如果你想操纵一个词或句子,你可以创建一个 String 引用:


String s;


但这里所创建的只是引用,并不是对象。如果此时向 s 发送一个消息,就会返回一个运行时刻错误。这是因为此时 s 实际上没有与任何事物相关联(即没有电视机)。

因此,一种安全的做法是:创建一个引用的同时便进行初始化。

String s = "asdf";
字符串可以用带引号的文本初始化。

一旦创建了一个引用,就希望它能与一个新的对象相连接。我们通常用 new 关键字来实现这一目的。New 关键字的意思是“给我一个新对象。

”所以前面的例子可以写成

String s = new String("asdf");

当然,字符串类型并非唯一存在的类型,Java 提供了数量众多的现成类型。重要的是,你可以自行创建类型。

二.基本类型

Java 要确定每种基本类型所占存储空间的大小。它们的大小并不像其它大多数语言那样随机器硬件架构的变化而变化。

这种所占存储空间大小的不变性是 Java 程序具有可移植性的原因之一。

1.基本类型的存储空间。byte--8位,short--16位,int--32位,long--64位,float--32位,double--64位。这六种数字类型都是有符号的。

2.char是16位Unicode字符或者说是16位无符号整数,范围从0到65535。

   即便如此,可以强制转换非法的数据,如:char c1 = (char) 10000;  char c2 = (char) -200;。

   可以从二进制存储的角度理解这点,char可以用单引号表示单个字符,如:'良'。也可以用unicode值'"ucafe'(四位十六进制数)。

3.整数有八进制(以0开头的整数)、十进制、十六进制(以0x或0X开头的整数)表示。

4.布尔型boolean。布尔型只能是true或者false,并且测试它为真还是假。它不能进行任何其他的运算,或者转化为其他类型。

5.默认的浮点类型是双精度(double),要想要一个float必须在浮点数后面加F或者f。

6.默认的整数类型是int型,要想使用长整型可在后面加“l”或“L”,如1000L;

7.float可以精确到7位有效数字,第8位的数字是第9位数字四舍五入上取得的;

   double可以精确到16位有效数字,第17位的数字是第18位数字四舍五入上取得的。
8.如果要求精确的答案,请不要使用float和double,因为它们是为了在广域数值范围上提供较为精确的快速近似运算而精心设计的。

   然而,它们没有提供完全精确的结果。尤其是对货币计算尤为不适合,因为要让一个float或double精确地表达0.1(或者10的任何)

9.BigInteger支持任意精度的整数。BigDecimal支持任意精度的定点数。

10.初始化无论怎么强调都不过分!Java为所有的成员变量提供了默认初始化:byte、short、 int、long--0  float--0.0f double--0.0  boolean--false  char--'"u0000',特别地对象类型的引用全被初始化为null。(注意!除了数组之外的局部变量是得不到这种优待的,需要你自己初始化。另外,默认初始化的值是你想要的吗?所以最好明确地对变量进行初始化,一般是在构造函数中。)

11.基本类型之间的转化。Java的类型检查很严格,从低精度转换到高精度是无须显式转换的,double d = 123;。但是反过来,进行窄化转换,由高精度向低精度,或者一种类型到另一种类型,则必须使用强制类型转化。Java提供了安全转化机制,但是结果是否是期望的,你自己保证吧。
double d = 12.5;
float f = (int) d; //结果不是13,而是12!
浮点型转化为整型时,不进行四舍五入,直接截断小数点后面的数。

12.提升。各种基本数据类型进行混合运算,结果会是表达能力最强的那种。如:int和long运算,结果是long,整型和浮点型运算结果是浮点型。特殊的一点是:只要类型比int小(如char、byte、short),那么在运算之前,这些值会自动地转换成int。例子:
byte b1 = 12;
byte b2 = b1 + 1; //在编译时出错了!因为b1+1已经是int型了!切记!

13.浮点类型的科学表示法。在数学中e代表自然对数(Math.E给出了double值),而在Java中e代表10的幂次。浮点型的数可以这样表示float f = 1e-27f; 代表1乘以10的负27次幂。


三:JAVA 数组


      数组是编程语言中最常见的一种数据结构,可以用于存储多个数据,每个数组元素存放一个数据,通常可以通过数组元素的索引来访问数组元素,包括为数组元素赋值和取出数组元素的值。java语言的数组具有特有的特征

数组也是一种类型

    java数组要求所有的数组元素具有相同的数据类型。因此,在一个数组中,数组元素的类型是唯一的,即一个数组里只能存储一种数据类型的数据,而不能存储多种数据类型的数据。

    一旦数组的初始化完成,数组在内存中所占的空间就被固定下来,因此数组的长度将不可改变。即使把某个数组元素清空,但它所占用的空间依然保留,依然属于该数组,数组的长度依然不变。

    java的数组既可以存储基本类型的数据,也可以存储引用类型的数据,只有所有的数组元素具有相同的类型即可。

    值得提出的是,数组也是一种数据类型,它本身是一种引用类型。

    例如,int是一个基本类型,但int[]就是一个引用类型。

定义数组

     java语言支持两种语法格式来定义数组

       type[] arrayName;


       type arryName[];




    但是我个人认为,前一种比较好些,因为第一种格式不但具有更好的语义,而且具有更好的可读性。对于type[] arrayName;方式,很容易理解定义了一个变量,其中变量名是arrayName,而变量的类型是type[]。


    数组是一种引用类型的变量,因此使用它定义一个变量时,仅仅表示定义了一个引用变量,这个引用变量还未指向任何有效内存,因此定义数组时不能指定数组长度。而且由于定义数组只是定义了一个引用变量,并未指向任何有效的内存空间,所以还没有内存空间来存储数组元素,因此这个数组也不能使用,只有对数组进行初始化后才可以使用。


数组的初始化


    java语言中数组必须先初始化,然后才可以使用。所谓初始化,就是为数组元素分配内存空间,并为每个数组元素赋初值。


    数组的初始化有两种方式


    静态初始化:初始化时由程序员显式指定每个数组元素的初始值,由系统决定数组长度,如


     int[] arr =  {1,3,5,6};


    动态初始化:初始化时,程序员只指定数组长度,由系统为数组元素分配初始值。如


     int[] arr = new int[5];


当你创建一个数组对象时,实际上就是创建了一个引用数组,并且每个引用都会自动被初始化为一个特定值,

该值拥有自己的关键字 null。一旦 Java 看到 null,就知道这个引用还没有指向某个对象。

在使用任何引用前,必须为其指定一个对象;如果你试图使用一个还是null 的引用,在运行时将会报错。

因此,常犯的数组错误在 Java 中就可以避免。



今天先学习到此,下班~



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值