类的构造器名必须与类名一致,且无返回类型,通过参数类型的不同(即使顺序不同也行)可以重载构造器,也可以以此技巧重载方法

this关键字:表示对“调用方法的那个对象的引用”,也可将当前对象传递给其他方法,也可通过this在构造器中调用构造器

  在方法内部调用同一类的另一方法无需使用this

  static方法中不得调用this,仅通过类本身便能调用static方法,产生类似于全局方法的效果

  例如:class Leaf{

      int i=0;

      Leaf increment(){

        i++;

        return this;}

  例如:class Peeler{

      static Apple peel(Apple apple){

        /*.......*/

        return apple;} }

     class Apple{

      Apple getpeeled(){

        return Peeler.peel(this);} }

在构造器中调用构造器(注意:不能在除构造器之外的任何方法中调用构造器)

  例如:class Flower{

      String s="Hello";

      Flower(String s){

        /*.......*/ }

      Flower(int petal){

        /*.......*/}

      Flower(String s,int petal){

        this(petal);//调用Flower(int petal)

        this.s=s;//给构造器参数s赋值“Hello”} }

清理:(手动机制)垃圾回收仅回收垃圾占据的内存

  1.对象可能不被垃圾回收

  2.垃圾回收并不等于“析构”

  3.垃圾回收只与内存有关

  通常调用finalize()与java使用本地方法引入c&c++代码有关

  finalize()不能作为所谓的java中的"析构"函数,其应用可以是终结条件的验证

  强制执行终结动作:System.gc();

成员初始化:

  方法的局部变量未经初始化会报错;

  类的数据成员未经初始化会给予其默认值,未经初始化的对象引用为null。

  类的数据成员在定义处即可进行初始化,类成员的定义顺序决定初始化顺序,静态对象优先于非静态对象进行初始化。

  显式的静态初始化:

    static int i;

    static Cup cup1;

    static{

      i=19;

      cup1=new Cup(1);

      /*........*/}

  显式的非静态初始化:(少了static关键字)

    int i;

    Cup cup1;

    {

      i=19;

      cup1=new Cup(1);

      /*........*/}

  在java中允许将一个数组赋给另一个数组,数组元素个数可由arr.length提供

  使用System.out.print(Arrays.toString(arr))可以打印一维数组arr

可变参数列表:(协助重载方法)

  所有类都直接或间接的继承自Object类,故可通过创建以Object数组为参数的方法建立可变参数:

  定义:  static void printArray(Object[ ] args){(类型,长度不受限制)

        for(Object obj:args){

        /*..........*/}

        /*.................*/}

  调用:printArray(new Integer(19),new Float(1.9),new Double(11.11));  

     printArray("one","two","three");

     printArray(new A(),new B(),new C());//也就是说方法中的参数类型不受限制

  也可:定义:static void f(int id1,String...str1){(类型限制,长度不限)

          for(String s:str1){

            /*...............*/}

          /*......................*/}

     调用如:f( );不可行,必须带有参数

枚举:(enum也看作是一个类)

  例如:定义:public enum Spiciness{

        NOT,MILD,MEDIUM,HOT,FLAMING}

    调用:Spiciness spn=Spiciness.HOT;

       System.out.print(spn);(编译器自动调用.toString()以便打印)

       for(Spiciness s:Spiciness.values()){//.values()获取枚举值

        System.out.print(s+",ordinal "+s.ordinal()); //.ordina()获取顺序

  enum协助switch:

    完整实例:

      

 enum Spiciness{
NOT,MILD,MEDIUM,HOT,FLAMING
}
class Burrito{
Spiciness degree;
public Burrito(Spiciness degree){
this.degree=degree;
}
public void describe(){
switch(degree){
case NOT:/*..........*/break;
case MILD:/*..........*/break;
/*...........*/
}
}
}

Thinking In Java 4th Chap5 初始化和清理的更多相关文章

  1. Java编程思想——初始化与清理

    PS:最近一直忙于项目开发..所以一直没有写博客..趁着空闲期间来一发.. 学习内容: 1.初始化 2.清理 1.初始化   虽然自己的Java基础还是比较良好的..但是在解读编程思想的时候还是发现了 ...

  2. 浅谈Java中的初始化和清理

    引言 这篇文章我们主要介绍Java初始化和清理的相关内容,这些内容虽然比较基础,但是还是在这边做一个简单的总结,方便以后查阅. 初始化过程 Java尽力保证:所有变量在使用之前都会得到恰当的初始化(对 ...

  3. JAVA学习笔记--初始化与清理

    编写程序时,常会由于变量没有初始化而产生各种错误:用完一个元素,如果不将其占用的内存资源释放,则会导致资源耗尽,这也很严重,为此,C++引入了构造器的概念,这是一个在创建对象时被自动调用的特殊方法,以 ...

  4. 【Thinking in Java, 4e】初始化与清理

    [用构造器确保初始化] [方法重载] 涉及基本类型的重载 1.如果传入的数据类型小于方法中声明的形式参数类型:实际数据类型会被提升. 2.如果传入的数据类型大于方法中声明的形式参数类型:编译器报错,应 ...

  5. Think in Java(二):初始化与清理

    1. 区分重载方法: 參数顺序的不同能够区分两个方法,只是,普通情况下千万别这么做.由于这会使代码难以维护不能通过返回值类型来区分重载方法:由于假设我直接调用f(), 此时java不知道应该调用那一个 ...

  6. Java基础:初始化和清理

    转载请注明出处:jiq•钦's technical Blog (1) 初始化: 所以假设继承关系为:A导出B再导出C,在创建C对象的情况下的调用顺序是: * (1) A的静态域,B的静态域,C的静态域 ...

  7. 图解 & 深入浅出Java初始化与清理:构造器必知必会

    Writer      :BYSocket(泥沙砖瓦浆木匠) 微         博:BYSocket 豆         瓣:BYSocket FaceBook:BYSocket Twitter   ...

  8. Java的初始化与清理

    大家都知道,Java是站在巨人的肩上成功的,它是在C&C++的基础上进一步的开发,投入面向对象开发的怀抱.Java吸取了很多以前的教训,加入自己很多独创的方式.在程序语言发展初期,许多C程序员 ...

  9. Java编程思想学习(五)----第5章:初始化与清理

    随着计算机革命的发展,“不安全”的编程方式已逐渐成为编程代价高昂的主因之一. C++引入了构造嚣(constructor)的概念,这是一个在创建对象时被自动调用的特殊方法.Java中也采用了构造器,并 ...

随机推荐

  1. 收藏加备用。ext.xfs文件系统 文件恢复

    注意 当确认误删除文件后立刻使用各种方式阻止新数据在写入该分区了. 设置只读或umount都可以 ext2 3 4 文件系统 可以用 extundelete 这个工具来恢复. github地址: ht ...

  2. 使用Ajax向SpringMVC传递Json数据

    这篇文章已经过时了. 请参考比较合适的前后端交互方式. 1.保证SpringMVC配置成功了. 2.在pom.xml中追加Jackson相关的依赖 <dependency> <gro ...

  3. Devexpress GridControl中 repositoryItemCheckEdit作为选择列以及作为显示列的使用方法

    一.在gridcontrol列表控件中使用单选框作为选择列,这里有两种方式. 方式一:选择gridcontrol控件的Run Designer按钮,添加一列,设置该列的ColumnEdit为check ...

  4. skb head/data/tail/end/介绍

    2017年04月26日 18:21:12 abcLinux 阅读数 799   This first diagram illustrates the layoutof the SKB data are ...

  5. redis之持久化RDB与AOF

    redis数据持久化 Redis是一种内存型数据库,一旦服务器进程退出,数据库的数据就会丢失,为了解决这个问题,Redis提供了两种持久化的方案,将内存中的数据保存到磁盘中,避免数据的丢失. RDB持 ...

  6. POJ 1661 Help Jimmy ——(记忆化搜索)

    典型的记忆化搜索问题,dfs一遍即可.但是不知道WA在哪里了= =,一直都没找出错误.因为思路是很简单的,肯定是哪里写挫了,因此不再继续追究了. WA的代码如下,希望日后有一天能找出错误= =: —— ...

  7. 运维自动化之ansible

    Ansible简介 Ansible是一个简单的自动化运维管理工具,基于Python语言实现,由Paramiko和PyYAML两个关键模块构建,可用于自动化部署应用.配置.编排task(持续交付.无宕机 ...

  8. DSSM算法-计算文本相似度

    转载请注明出处: http://blog.csdn.net/u013074302/article/details/76422551 导语 在NLP领域,语义相似度的计算一直是个难题:搜索场景下quer ...

  9. 【Linux】ssh命令行下多任务前后台切换

    原文:https://my.oschina.net/huxuanhui/blog/13844 我们都知道,在 Windows 上面,我们要么让一个程序作为服务在后台一直运行,要么停止这个服务.而不能让 ...

  10. [dart学习]第六篇:流程控制语句

    经过前面的基础知识了解学习,我们今天可以进入语句模块啦. dart主要有以下流程控制语句: if-else for循环 while和do-while循环 break和continue switch-c ...