Java学习笔记-12.传递和返回对象

1.Clone()方法产生一个object,使用方法后必须产生的object赋值。

Vector v2 = (Vector)v.clone();

2.Clone()方法在object中是保护类型方法,如果自己创建的类需要使用Clone()方法的话需要自己重新写一个,并且继承Cloneable接口。

package tweleve;

import java.util.*;

class MyObject implements Cloneable {
    int i;

    MyObject(int ii) {
        i = ii;
    }

    public Object clone() {
        Object object = null;
        try {
            object = super.clone();
        } catch (CloneNotSupportedException e) {
            System.out.println("MyObject can‘t clone");
        }
        return object;
    }

    public String toString() {
        return Integer.toString(i);
    }
}

public class LocalCopy {
    static MyObject g(MyObject v) {
        v.i++;
        return v;
    }

    static MyObject f(MyObject v) {
        v = (MyObject) v.clone();
        v.i++;
        return v;
    }

    public static void main(String[] args) {
        MyObject aMyObject = new MyObject(11);
        MyObject bMyObject = g(aMyObject);
        if (aMyObject == bMyObject)
            System.out.println("a==b");
        else
            System.out.println("a!=b");
        System.out.println("a=" + aMyObject);
        System.out.println("b=" + bMyObject);
        MyObject cMyObject = new MyObject(31);
        MyObject dMyObject = f(cMyObject);
        if (cMyObject == dMyObject)
            System.out.println("c==d");
        else
            System.out.println("c!=d");
        System.out.println("c=" + cMyObject);
        System.out.println("d=" + dMyObject);

    }

}

3.如果希望一个类能够克隆那么需要有下列步骤:(1)实现Cloneable接口

(2)覆盖Clone()方法

(3)在自己的Clone()方法中调用super.clone()

(4)在自己的clone()中捕获违例

4.String类中所有能修改String的方法其实都创建和返回了一个新的String类,原来的String类是没有改变的,包括+和+=,StringBuffer比String操作字符串时更有效。

package tweleve;

import java.sql.Ref;

import org.omg.CORBA.SystemException;

public class Stringer {
    static String upcase(String s){
         return s.toUpperCase();
    }

    public static void main(String[] args){
        String qString=new String("howdy");
        System.out.println(qString);
        String qq=upcase(qString);
        System.out.println(qq);
        System.out.println(qString);
    }

}
时间: 2024-10-11 05:13:26

Java学习笔记-12.传递和返回对象的相关文章

java学习笔记(12) —— Struts2 通过 xml /json 实现简单的业务处理

XML 1.引入dom4j-2.0.0.jar 2.引入jquery-1.8.2.js 3.新建common.js getInfo = function(){ $.post("getXmlAction.action",{name:$('#name').val()},function(ret,status){ if("success" == status) var id = $(ret).find("id").text(); var age = $

我的java学习笔记(12)关于反射(part 1)

1.能够分析类能力的程序称为反射. 2.在程序运行期间,java运行时系统始终为所有的对象维护一个被称为运行时的类型标识.这个信息跟踪着每个对象所属的类.虚拟机利用运行时类型信息选择相应的方法执行. 3.这些保存信息的类被称为Class. 4.Object类中的getClass()方法将会返回一个Class类型的实例. String s = "hello"; Class c1 = s.getClass(); 5.如果类在一个包里,包的名字也作为类名的一部分. 6.获得类名的三种方法 a

Java学习笔记2-一切都是对象

创建句柄:String s = "abc"; 创建对象:String s= new String("abc"); 程序运行时数据可能保持的位置: 寄存器(register):最快的,但是有编译器分配,我们没法控制 堆栈(stack):存在于 RAM 区域,Java 对象句柄/引用和基础类型的变量值会存放在这里 堆(heap):堆里分配存储空间会花掉更长时间,Java 对象实例和数组会保存在这里 静态存储(static storage):RAM 中的固定位置,使用 s

Java学习笔记12

Object类是所有类.数组.枚举类的父类,是类层次结构的根类.每个类都使用Object作为超类.所有对象(包括 数组)都实现这个类的方法. Object类实现了以下方法: 我们来看看源码中getClass()方法: public final native Class<?> getClass(); 以上的Class<?> getClass()方法的作用是返回该对象的运行时类. 具体使用参看以下程序: class Work{ } public class Main { public

Effective Java 学习笔记之创建和销毁对象

一.考虑用静态工厂方法代替构造器 1.此处的静态工厂方法是指返回指为类的对象的静态方法,而不是设计模式中的静态工厂方法. 2.静态工厂方法的优势有: a.使用不同的方法名称可显著地表明两个静态工厂方法的不同,而不像构造器,名字只能是类名. b.并不是每次调用静态工厂方法,都会重新构造一个新的对象. c.可以返回类型的子类型的对象. d.创建参数化类型的实例时,代码变得简洁了. 3.静态工厂方法的缺点有: a.类如果不含有公有的或者受保护的构造器,就不能被子类化(静态工厂方法的存在导致构造器存在的

JavaScript学习笔记(12)——JavaScript内置对象

1.Number Javascript只有一种数字类型,可以有小数也可以没有,也可以使用科学计数法. var y=123e5; // 12300000 var z=123e-5; // 0.00123 JavaScript 不是类型语言.与许多其他编程语言不同,JavaScript 不定义不同类型的数字,比如整数.短.长.浮点等等. JavaScript 中的所有数字都存储为根为 10 的 64 位(8 比特),浮点数. 如果前缀为 0,则 JavaScript 会把数值常量解释为八进制数,如果

java学习笔记(三)类,对象,包

在面向对象编程中,程序不是围绕着要解决的任务来设计,而是围绕着要解决的问题的对象来设计. 类:是具有相同属性和行为的一组对象的集合,类中要包含这个类的属性和方法,但并不是所有的类都必须包含属性和方法. 例:编写一个学生类,学生拥有学号,姓名,年龄,性别等. /** *学生类 */ public class Student{ /* 属性 */ public int stuNo; public String name; public int age; public String sex; /* 方法

[Java学习笔记]对象克隆

对象克隆: 浅克隆: 被克隆的对象中的值类型数据被复制一份新值,但是引用的对象只被复制其引用传递给新克隆出来的对象 深克隆: 被克隆的对象中的值类型数据被复制一份新值,并且其中引用的对象会重新创建新的对象,把新对象的引用传递给新克隆出来的对象 Java中实现克隆: Java中Object中定义了clone方法,默认为浅克隆操作,即你只是简单super.clone得到的结果是浅克隆的结果,如果需要深克隆,则需要实现Cloneable接口,并且重写clone方法 查看Java源代码发现Object中

java学习笔记15--引用传递

java学习笔记15--引用传递 范例一 class Demo{ public int temp = 30; } public class T { public static void main(String[] args) { // TODO Auto-generated method stub Demo d1 = new Demo(); d1.temp = 50; System.out.println("fun()方法调用之前:"+d1.temp); fun(d1); System