Java编程思想学习笔记——一切都是对象

前言

Java是基于C++的,但Java是一种更加纯粹的面向对象程序设计语言。

C++和Java都是混合/杂合型语言。杂合型语言允许多种编程风格。

用引用操纵对象

每种编程语言都有自己操纵内存中元素的方式。

  • 直接操纵元素
  • 用某种基于特殊语法的间接表示(C和C++里的指针)
  • 用引用操纵对象(Java)

在Java中,一切都被视为对象。操纵的标识符实际上是对象的一个引用

  • 类比为遥控器(引用)来操纵电视机(对象)
  • 只要把握这个遥控器,就能保持与电视机的连接
  • 改变频道或减小音量,实际操纵的是遥控器(引用),再由遥控器来调控电视机(对象)
  • 在房间四处走走,只要携带遥控器(引用)而不是电视机(对象)就能调控电视机
  • 即使没有电视机,遥控器也可以独立存在
        //创建的只是引用而不是对象
        String s1;
        //创建一个引用的同时便进行初始化
        //Java语言的特性:字符串可以用带引号的文本初始化
        String s2 = "abcd";
        //更通用的初始化方法
        //创建一个引用,并与一个新的对象相关联
        String s3 = new String("abcd");

必须由我们创建所有对象

存储到什么地方

程序运行时,对象的放置安排,内存的分配都是我们必须了解的。
有五个不同的地方可以存储数据:
1.寄存器
2.堆栈
3.
4.常量存储
5.非RAM存储

寄存器:位于数量极其有限的寄存器,是最快的存储区,寄存器会根据需求进行分配,不能直接控制,也不能在程序中感觉到寄存器存在的任何迹象

堆栈:位于通用RAM(随机访问存储器)中,通过堆栈指针可以从处理器那里获得直接支持,堆栈指针向下移动,则分配新的内存,向上移动,则释放那些内存(这是一种快速有效的分配存储方法,仅次于寄存器)创建程序时,Java系统必须知道存储在堆栈内所有项的确切生命周期,以便上下移动堆栈指针。--->限制了程序的灵活性,所以某些Java数据(如对象引用)存储在堆栈中,但是Java对象并不存储在堆栈中

:通用的内存池(位于RAM区)。用于存储所有java对象。编译器不需要知道存储的数据在堆中存活多长时间(灵活性,但分配和清理的时间较长)。

常量存储:存放在程序代码内部。

非RAM存储:数据完全存活于程序之外,不受程序的任何控制,在程序没有运行时也可以存在。如流对象持久化对象

特例:基本类型

new一个对象存储在堆里,因此用new创建一个对象——特别是小的,简单的变量往往不是很有效的。
对于这些类型,Java采取不用new来创建变量,而是创建一个并非是引用的自动变量(直接存储值,并且存储在堆栈中)。

Java语言对于每种基本类型所占存储空间大小是固定的,不像其他语言随机器硬件架构的变化而变化。(可移植性更高)

       /**
         * 基本类型创建的不是引用,而是一个自动变量,直接存储值,并且存储在堆栈中。
         * 基本类型都有相对应的包装器类,能在堆中创建一个非基本对象,用来表示相对应的基本类型。
         */
        //基本类型
        int i = 5;
        //包装类型
        Integer integer = new Integer(i);
        //Java SE5自动包装
        Integer integer1 = 4;
        //反向转换
        int i1 = integer1;

Java中的数组

Java确保数组被初始化,且不能在范围之外被访问(以少量的内存开销和运行时下标检查为代价)

  • 创建对象数组---->创建引用数组,自动初始化为null
  • 创建基本数据---->初始化为0(boolean为false)

永远不要销毁对象

作用域

作用域由花括号的位置决定。

对象的作用域

new 创建一个对象时,对象可以存活在在作用域之外。

{
   String s = new String("abc");
}//作用域结束的地方

String引用s在作用域终点消失,s指向的String对象仍继续占据内存空间。

在Java中,由new创建的对象,只要你需要,就会一直保留下去。并且有一个垃圾回收器,
用来监视new创建的所有对象,并辨别出那些不会再被引用的对象。

随后释放这些对象的内存空间,给其他新的对象使用。

原文地址:http://www.cnblogs.com/JohnTsai/p/4606365.html

时间: 2024-09-08 05:33:22

Java编程思想学习笔记——一切都是对象的相关文章

Java编程思想学习笔记——类型信息

前言 运行时类型信息(RTTI:Runtime Type Information)使得我们可以在程序运行时发现和使用类型信息. Java在运行时识别对象和类的信息的方式: (1)一种是RTTI,它假定我们在编译时已经知道了所有的类型. (2)另一种是反射机制,它允许我们在运行时发现和使用类的信息. 为什么需要RTTI 以使用了多态的类层次结构的例子举例: 如上图,泛型是基类Shape,而派生出来的具体类有Circle,Square和Triangle. 这是一个类层次结构图,基类位于顶部,而派生类

Java编程思想学习笔记——字符串

前言 字符串操作是计算机程序设计中最常见的行为. 不可变String String对象是不可变的 重载"+"与StringBuilder String对象是不可变的,可以给String对象加任意多得别名. String对象具有只读特性,所以指向它的任何引用都不可能改变它的值. String a = "a"; String b = a; System.out.println("first: a=" + a + " b=" + b

Java编程思想学习笔记——注解

前言 在Android开发的过程中,我们为了减少重复代码的编写,会使用类似ButterKnife,AndroidAnnotations 这类依赖注解库.代码示例如下: //不使用 Button btn = (Button)findViewById(R.id.btn); //使用ButterKnife @Bind(R.id.btn) Button btn; //使用AndroidAnnotations @ViewById(R.id.btn) Button btn; 可以看出通过注解,我们能大量减少

Java编程思想学习笔记——枚举类型

前言 关键字enum可以将一组具名的值有限集合创建一种为新的类型,而这些具名的值可以作为常规的程序组件使用. 正文 基本enum特性 调用enum的values()方法可以遍历enum实例,values()方法返回enum实例数组,且数组中元素保持在enum声明时的顺序. public class TestEnum { public static void main(String[] args) { Fruit[] values = Fruit.values(); for (Fruit frui

Java编程思想学习笔记——初始化与清理

初始化 构造器保证初始化 构造器采用与类相同的名称. 默认构造器(default constructor):不接受任何参数的构造器,也叫无参构造器. 构造器也能带有形式参数,就能在初始化对象时提供实际参数. class Foo{ Foo(){ System.out.println("Foo's no-arg Constructor Foo()"); } Foo(int i){ System.out.println("Foo's arg Constructor Foo (&qu

Java编程思想学习笔记——接口

1.抽象类和抽象方法 抽象方法:不完整的,仅有声明而没有方法体. abstract void f(); 抽象类:包含抽象方法的类.(若一个类包含一个或多个抽象方法,则该类必须限定为抽象的.) 1.用抽象类直接创建对象是不安全的,因为这个抽象类是不完整的.编译器通过这种方式保证了 抽象类的纯粹性. public abstract class Person { public abstract void eat(); public abstract void pee(); public abstrac

Java编程思想学习笔记——初始化与清理(二)

成员初始化 Java尽力保证:所有变量在使用前都能得到适当的初始化. 方法的局部变量:未初始化,编译错误. void f(){ int i; // System.out.println(i);//编译错误 } 类的数据成员(字段)是基本类型:保证都会有一个初始值. public class InitialValues { boolean bl; char c; byte bt; short s; int i; long l; float f; double d; InitialValues re

Java编程思想学习笔记——复用类

前言 复用代码是Java众多引人注目的功能之一. 达到复用代码的方法有: 组合:新的类由现有类的对象所组成.(复用现有代码的功能,而非它的形式) 继承:按照现有类的类型组建新类.(不改变现有类的形式,复用现有类的形式并在其中添加新代码).面向对象程序设计的基石 正文 1.组合语法 将对象引用置于新类中即可(非基本类型:在新类中放置引用,基本类型:直接添加就可以了) /** * 引擎 */ class Engine{ /** * 功率 */ double power; /** * 品牌 */ St

Java编程思想学习笔记——访问权限修饰词

几种访问权限修饰词 public,protected,private,friendly(Java中并无该修饰词,即包访问权限,不提供任何访问修饰词) 使用时,放置在类中成员(域或方法)的定义之前的,仅仅控制它所修饰的特定定义的访问权. 包访问权限 是默认访问权限,没有任何关键字 对于同一包中的所有其他类对这个成员都有访问权限,对于包之外的所有其他类,则没有访问权限. 取得对某成员访问访问权的途径有如下方式: 用public修饰成员,任何人在任何地方都有访问权限 不加访问权限修饰词,并将其他类放在