java 编程思想笔记(二)——初始化

一.问题

  随着计算机革命的发展,“不安全”的编程方式已逐渐成为编程代价高昂的主因之一。

  初始化和清理正是涉及安全的两个问题。

二.java 解决方案

  构造器:一种特殊的方法。java 中”初始化“和”创建“捆绑在一起,两者不能分离。

  垃圾回收器:释放无用的对象。

三.方法重载

  为什么要在这里讲方法重载?我觉得首先:构造器是一种特殊的方法,再一个,构造器除了默认构造器还有有参构造器。为了让方法名称相同而形式参数不同的构造器同时存在,就必须用到方法重载。

  区分方法重载的判决条件

  1.参数的数量是否相同

  2.参数的类型是否相同

  只要其中一条为否,则就是方法重载,必须记住重载的前提:方法名称必须相同。

四.构造器中调用构造器

  1.尽管可以用this调用一个构造器,但却不能调用两个。此外,必须将构造器调用置于最起始处,否则编译错误。

  2.除构造器之外,编译器禁止在其他任何方法中调用构造器。

五.成员初始化途径

  1.所有变量在使用前都能得到恰当的初始化,类的基本类型默认为基本类型的默认值,局部变量必须由编程者指定初始值,在类中,一个对象引用不将其初始化,就会获得特殊的null值。

  2.编程者指定变量初始化值

  3.通过构造器初始化变量值,但是自动初始化在构造器初始化之前完成。

六.变量初始化顺序

 变量定义的顺序决定了初始化的顺序,即使变量定义散步于方法定义之间。

七.静态数据初始化

  无论创建多少个对象,静态数据都只占用一份存储区域,static 关键字不能用于局部变量,因此只能作用于域。

八.非静态实例初始化

  代码如下:

Class Mug{

   Mug(int maker){
          print("Mug("+maker+")");    

    }
   void f(int maker){
          print("f("+maker+")");
    }
}
public  Class Mugs{

    Mug mug1;
    Mug mug2;
   {
       mug1= new Mug(1);
       mug2= new Mug(2);
       print("mug1&mug2 initial");
    }

   Mugs()
    {
          print("Mugs(int)");
    }

   public static void main(String[] args)
    {
          print("Inside main()");
          new Mugs();
          print("new Mugs()  completed");
          new Mugs(1);
          print("new Mugs(1)  completed");
    }

}                  

从输出结果可以看出,实例初始化子句是在两个构造器之前执行的。

九,对六七八的总结

  1.首先初始化静态的变量(第一次访问.class文件时初始化,只初始化一次),然后初始化非静态变量

  2.非静态变量会被创建对象时复制给默认值。

  3.执行编程值为变量指定的初始值。

  4.执行构造器。

时间: 2024-10-25 07:07:45

java 编程思想笔记(二)——初始化的相关文章

Java编程思想笔记(第二章)

第二章  一切都是对象 尽管Java是基于C++的,但相比之下,Java是一种更纯粹的面向对象程序设计语言. c++和Java都是杂合型语言(hybird language) 用引用(reference)操作对象 类似遥控器(引用)来操作电视(对象) 在Java中你可以创建一个引用,但是没有与任何对象关联,比如: String s; 这个时候如果用则会报错.安全的做法是: 创建一个引用的同时并进行初始化 String s="1111"; 必须由你创建所有对象 New关键字的意思是给我一

【Java编程思想】二、一切都是对象

尽管Java是基于C++的,但是相比之下,Java是一种更“纯粹”的面向对象设计语言. 2.1 用引用操纵对象 一切都被视为对象, 因此可采用单一固定的语法.尽管一切都被看作对象,但操纵的标识符实际上是对象的一个“引用”. Java里的“引用”与C++中的“引用”是有区别的,但是这个概念不需要完全明白,学会处理引用就可以了. 2.2 必须由你创建所有对象 new关键字的意思就是“给我一个新对象”! 2.2.1对象存储到什么地方 1)寄存器 2)堆栈(RAM) 3)堆(RAM) 4)常量存储(RO

java编程思想笔记(第一章)

Alan Kay 第一个定义了面向对象的语言 1.万物皆对象 2.程序是对象的集合,他们彼此通过发送消息来调用对方. 3.每个对象都拥有由其他对象所构成的存储 4.每个对象都拥有其类型(TYpe) 5.某一特定类型的所有对象都可以接收同样的消息. Booch提出一种更简洁的描述: 对象拥有状态(state) 行为(behavior) 和标识(identity) 每个对象都有一个接口 每个对象都属于定义了特性和行为的某个类(特性可以理解为属性的状态,行为可以理解为method) 在面向对象的程序设

《 Java 编程思想》CH05 初始化与清理

< Java 编程思想>CH05 初始化与清理 用构造器确保初始化 在 Java 中,通过提供构造器,类的设计者可确保每个对象都会得到初始化.Java 会保证初始化的进行.构造器采用与类相同的名称. 由于构造器的名称必须与类名完全相同,所以"每个方法首字母小写"的风格在这里不适用. 构造器方法可以有参数,这样可以在初始化对象时提供实际参数. 不接受任何参数的构造器叫做"默认构造器". 构造器一种特殊类型的方法,它没有返回值 方法重载 因为可以要用多种方式

Java编程思想笔记-类的初始化顺序

1.如果有父类,先初始化父类,然后初始化子类 2.先初始化静态成员变量.静态代码块(static { }包围的代码),然后初始化非静态成员变量.非静态代码块(大括号包围的代码).静态成员变量间.非静态成员变量间按定义顺序初始化. 3.调用构造函数 class Bowl { Bowl(int marker) { System.out.println("Bowl(" + marker + ")"); } void f(int marker) { System.out.p

Java编程思想之二十 并发

20.1 并发得多面性 并发编程令人困惑的一个主要原因:使用并发时需要解决的问题有多个,而实现并发的方法也有多种,并且在这两者之间没有明显的映射关系. 20.1.1 更快的执行 速度问题初听起来很简单:如果你需要一个程序运行得更快,那么可以将起断开为多个片段,在单个处理器上运行每个片段. 并发通常是提高运行在单个处理器上的程序的性能,但在单个处理器上运行的并发程序开销确实应该比该程序所有部分都顺序执行开销大,因为其中增加了所谓的上下文切换的代价. 如果没有任务会阻塞,那么在单处理器上使用并发就没

7.JAVA编程思想笔记隐藏实施过程

欢迎转载,转载请标明出处:http://blog.csdn.net/notbaron/article/details/51040237 "进行面向对象的设计时,一项基本的考虑是:如何将发生变化的东西与保持不变的东西分隔开." Java 推出了"访问指示符"的概念,允许库创建者声明哪些东西是客户程序员可以使用的,哪些是不可使用的.这种访问控制的级别在"最大访问"和"最小访问"的范围之间,分别包括:public,"友好的

Java编程思想笔记02:组合与继承、final、策略设计模式与适配器模式、内部类、序列化控制(注意事项)

1.组合和继承之间的选择 组合和继承都允许在新的类中放置子对象,组合是显式的这样做,而继承则是隐式的做. 组合技术通常用于想在新类中使用现有类的功能而非它的接口这种情形.即在新类中嵌入某个对象,让其实现所需要的功能,但新类的用户看到的只是为新类所定义的接口,而非所嵌入对象的接口.为取得此效果,需要在新类中嵌入一个现有类的private对象.但有时,允许类的用户直接访问新类中的组合成分是极具意义的,即将成员对象声明为public.如果成员对象自身都隐藏了具体实现,那么这种做法是安全的.当用户能够了

Java编程思想(十二) —— 字符串(1)

字符串在编程中也是经常使用的. 1)不可变 其实查看API就会发现: public final class String extends Object implements Serializable, Comparable<String>, CharSequence final,不可变的. public class TestString { static String upcase(String s){ return s.toUpperCase(); } public static void