`

java中的对象详谈

    博客分类:
  • java
阅读更多
2.1 用引用操作对象
(1)Java语言是一种纯面向对象的编程语言,Java中操纵一个对象是通过“引用”实现的。让我们来看下书中的一个实例:
String s = “asdf”
这句话“等号”(个人习惯引用数学上的概念,计算机中应该是赋值符号,下同)左边部分申明了一个指向string类型的对象的引用,该引用名为s,如果我们忽略“等号”右边内容的话,那么这个引用可以指向string类型的所有对象,“等号”右半部分是对这个引用进行初始化,即把s指向一个string类型并且内容为 “asdf” 的对象。引用也可以被赋值,如 上面的例子后面跟这句 String a = s ,那么就创建了一个名为 a 的新的引用。a 跟 s 指向同一个对象。

2.2 必须由你来创建所有对象
对象不会凭空产生,所有对象必须都由你自己来创建。除基本类型外的对象都用new关键字来创建。
        (1)String s = new String(“asdf”)
        “等号”左边申明的是一个引用。“等号”右边是对对象进行实例化和初始化,实例化是通过new关键字来实现的,它给对象在内存中分配了一个地址。String(“asdf”)是通过调用一个构造方法String()对这个对象进行初始化,使这个对象的内容为”asdf”。这个例子中,s指向的是对象所在的内存地址值,而不是指向对象本身(对象的内容)。看个例子:
        String s = new String(“asdf”)
        String a = new String(“asdf”)
     这里引用s和a所指向对象的内容是相同的,都为”asdf”,但是 a = = b 编译器返回false,因为s 和 a 分别指向内存中的两个地址,虽然对象内容是相同的,但是编译器返回false,(这也说明 = = 比较的是引用指向的地址的值,并非比较对象的内容)。这好比你去邮局邮寄两个包裹,这两个包裹装的都是同一件物品---书本,但是一个是邮到北京的,一个是邮到上海的,虽然这两个包裹里装的东西是一样的,但是你不能说北京等于上海吧?
(2)并不是所有的对象实例化跟初始化后都必须有引用指向它的,如果把对象实例化跟初始化看成一个整体,如 把 new String(“asdf”) 看成一个整体,也可以这样用:
System.out.print(new String(“asdf”))
     但是这样只能用一次,想再次用这个对象必须重新创建过了。
        (3)对象创建后不同类型的数据放在不同的地方:
             a. 寄存器:在存储器内部,速度最快,但是我们无法直接控制。
             b. 堆栈:在随机访问存储器中,速度快,但是大小和生命周期受限制。对象引用跟基本类型就存在堆栈中。
             c. 堆:也在随机访问存储器中,数据大小和生命周期较灵活,但是牺牲了效率,对象就是存在此的。
             d. 静态存储:也在随机访问存储器中,存储static成员元素。
             e. 常量存储:存储常量。(一般的时候常量是直接存在程序代码中的)。
             f. 非RAM存储:存储完全独立与程序之外的数据,如:流对象、持久化对象。
         (4)Java中有九种基本类型,即 boolean、char、byte、short、int、long、float、double、void ;它们对应的外覆类分别为:Boolean、Character、Byte、Short、Integer、Long、Float、Double、Void ;出于效率上考虑,java中的基本类型不用new关键字来创建。基本类型也存放在堆栈中,并且其大小是固定不变的(虽然boolean类型没有明确指定大小,但是其大小也是不随硬件架构的变化而变化)。如果你想用堆来存储基本数据类型的话,就要使用该类型的外覆类来实现了 例如Character C = new Character(‘x’);下面是基本类型默认初始化的值:
              boolean类型变量默认初始值为false
              char类型变量默认初始值为0(ASCII码)
              byte类型变量默认初始值为0
              short类型变量默认初始值为0
int类型变量默认初始值为0
float类型变量默认初始值为0.0f
double类型变量默认初始值为0.0d
long类型变量默认初始值为0L
          (5) Java中的数组本身也是对象,所以它跟所有对象一样,引用类型变量默认初始值为null,即不指向任何对象,创建数组对象产生的引用数组初始化时也是指向null,值为null的引用是不能被操作的,所以Java中的数组是安全的。

2.3 永远不需要销毁对象
         (1)基本类型变量只能在它的作用域(以一对花括号来分隔)范围生存,在作用域里定义的变量只可用于作用域结束之前。Java中同一作用域下的某个基本变量是不可以被重复定义的。
         (2)对象在离开作用域是不会消失的,出了作用域消失的只是指向对象的引用,java 中有一个“垃圾回收机制”,会定时扫描已建的对象,在确定哪些对象已经没有任何引用指向它的时候就自动把它销毁,从而释放内存空间,所以java中不需要你自己去销毁对象。

2.4 创建新的数据类型:类
          (1)Java是通过类来决定对象的属性(行为跟外观)的。Java类通过class关键字创建,如 class ATypeName创建了一个名为ATypeName的类。Java类包括字段跟方法两元素,字段可以为任何类型的对象,也可以为基本类型;对象的引用通过构造器(特殊的方法)进行初始化,基本类型用做类成员则可在定义的时候进行初始化。(如程序中未初始化,java编译器会自动给它个默认的初始值)但是非某个类的字段的基本类型则不会自动给初始化,编译时则会返回一个错误。

2.5 方法、参数和返回值
          (1)方法是由名称、参数、返回类型以及方法体组成的。名称+参数唯一标识一个方法,方法只有通过对象才能被调用,并且有对象引用指向其返回值的时候,对象引用的类型必须与返回值的类型一致,如:
            Int x = a.f();
     f()的返回值类型必须是int型的,否则会报错。
          (2)在向一个方法传递一个对象的时候,实际上传递的是该对象的引用(基本数据类型除外),而传递的对象类型一定要和方法中接受参数的参数类型相同。如你不想方法返回任何值,可以把该方法的返回类型设置为void,而此时方法中的return就是用来离开方法的,不需要等到它执行完毕,如果方法的返回类型不为void的时候,你可以使用return 返回一个和返回类型一样的值。

2.6 构建一个Java程序
           (1) 使用独一无二的名字空间,推荐使用Internet域名倒写
(2)使用公共类,用import命令导入公共包
          (3)*** static 是静态修饰符,被static修饰后的成员(变量或类),在编译时由内存分配一块内存空间,直到程序停止运行才会释放,也就是说无论该类建多少个对象,所有对象都会共享这块内存空间。所有指向这些对象的引用都相等的。另外,被static修饰后的成员(变量或类)可以通过一个对象去引用它,也可以用类名直接引用它。也就是说不一定要实例化对象才能引用被static修饰的成员。
               ***补充一下关于原始数据类型默认初始化的问题,大家知道,在类函数的外部声明的变量是全局变量,这些全局变量如果是原始数据类型的话,那么不论是否有在声明的时候显示初始化,在每次对象实例化的时候系统都会给其自动初始化的,而对于一个声明为static的原始数据类型的全局变量来说,这样的初始化只会进行一次,例如:
class time {
nt i = 5;
public static void main(String args[]){
time t = new time (); //第一次实例化,系统自动初始化
t.i = 6;
time tt = new time (); //第二次初始化

System.out.println(t.i);
System.out.println(tt.i);
}
}
     运行显示结果6,5,在这里实例化了两次对象,而全局变量就初始化了两次,而如果全局变量i声明为static的话,那么虽然实例化两次,实际上变量i只初始化了一次,在第二次实例化的时候不会对全局变量进行初始化了,此时输出的结果是3,3 。
2.7 你的第一个Java程序
        (1)写第一个Java程序的时候我个人感觉还是环境配置的问题比较头痛,这里就讲下环境配置;其他按书本一步步对即可!
        window2000/xp jdk1.5.0_05 配置方法:
1. JAVA_HOME 值:C:\Program Files\Java\jdk1.5.0_05
2. CLASSPATH 值:.;%JAVA_HOME%\lib
3. Path:%JAVA_HOME%\bin; (也许系统变量里面已经有了Path变量,那么就修改它好了,在原来的值的前面加上%JAVA_HOME%\bin;)
分享到:
评论

相关推荐

    详谈java中boolean和Boolean的区别

    下面小编就为大家带来一篇详谈java中boolean和Boolean的区别。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

    详谈Java中net.sf.json包关于JSON与对象互转的坑

    下面小编就为大家分享一篇Java中net.sf.json包关于JSON与对象互转的坑,具有很好的参考价值,希望对大家有所帮助

    详谈Java中的二进制及基本的位运算

    下面小编就为大家带来一篇详谈Java中的二进制及基本的位运算。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

    JavaScript常用的对象——Math对象详谈

    Math对象属于JavaScript对象中的内置对象,它不同于Array、Function、Object等对象可以创建构造,它是由ECMAScript实现提供,在程序开始执行时出现,可以通过调用其中的方法完成一些数学运算 Math中常用的属性 Math....

    Linux内核编译详谈

    Linux内核编译详谈,Linux内核编译详谈

    详谈Java中instanceof和isInstance的区别

    下面小编就为大家带来一篇详谈Java中instanceof和isInstance的区别。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

    详谈Java中的事件监听机制

    下面小编就为大家带来一篇详谈Java中的事件监听机制。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

    Javascript中的String对象详谈

    这里特别注意,字符串中的第一个字符是第0位的,第二个才是第1位的。 1.创建一个字符串对象的方法 [var] String 对象实例名 = new String(string) 或者是var String 对象实例名 = 字符串值 例子: var str = ...

    经典之谈——Java内存分配

    Java私塾出品 详谈Java的内存分配

    详谈jvm--Java中init和clinit的区别

    下面小编就为大家带来一篇详谈jvm--Java中init和clinit的区别。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

    详谈Java中Object类中的方法以及finalize函数作用

    下面小编就为大家带来一篇详谈Java中Object类中的方法以及finalize函数作用。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

    详谈Java中的Object、T(泛型)、?区别

    下面小编就为大家带来一篇详谈Java中的Object、T(泛型)、?区别。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

    Javascript中的Array数组对象详谈

    //这里注意myArray数组中的元素不只是同一种数据类型的元素,可以有整形,有浮点型,有字符串等等都可以。这里充分展示了javascript作为一种语言对数据类型的弱化,语言更加的随意化,简便化。就行定义对象的时候用...

    详谈java编码互转(application/x-www-form-urlencoded)

    下面小编就为大家带来一篇详谈java编码互转(application/x-www-form-urlencoded)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

    详谈Java泛型中T和问号(通配符)的区别

    下面小编就为大家带来一篇详谈Java泛型中T和问号(通配符)的区别。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

    详谈java集合框架

    主要介绍了详谈java集合框架 ,需要的朋友可以参考下

    详谈Java中BigDecimal的一个除法异常

    下面小编就为大家分享一篇详谈Java中BigDecimal的一个除法异常,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

    hibernate配置要点详谈

    hibernate配置要点详谈hibernate配置要点详谈hibernate配置要点详谈hibernate配置要点详谈

Global site tag (gtag.js) - Google Analytics