java中的return this问题

java中的return this问题

return this ;大家都知道,这是返回当前对象引用,我就很郁闷,这个有什么好返回的,返回给谁???假设返回给A,那A为什么不用前面创建对象的变量直接去访问,???

补充:public class Leaf

{

int i = 0;

Leaf increment()

{

i++;

return this;

}

void print()

{

System.out.println( "i = " + i);

}

public static void main(String[] args)

{

Leaf x = new Leaf();

x.increment();

}

}

输出结果是什么呢,难道是对象??????郁闷!

我来回答

回答 (5)

钟鹏辉 项目经理 |1705个满意答案 2010-09-03

返回当前类实例...

相当于new了

评论(0)00

レ我心飛揚 2010-09-03 这个问题就奇怪了,比如你吃饭有时用勺子用时要用筷子一样。如果A是一个私有类,在B中要用到A的属性this就有用了,通过构造器

评论(0)00

迩的爱属于莪 2010-09-03

x.increment(); 返回自身

也就是说 x.increment()==x

比如你要连续调用 2次increment()

一般的写法是

x.increment();

x.increment();

但是因为方法返回自身的引用

所以可以这样写

x.increment().increment();

好好体会一下this的妙用

追问:

return this的作用仅仅是x.increment(); x.increment();可以写成x.increment().increment();吗???那也太花哨了吧

回答:

如果你只认为它有这种作用 那你就大错特错了

虽然我也不知道怎么跟你讲 但是既然return可以返回任何基本数据类型和任何对象的引用,当然也可以返回它自身的引用

纵观JDK,有很多类的方法都会返回其自身的引用

像StringBuffer

当然要不要返回自身 看场合 论实际 而不是一定要用

评论(0)10

正在输入 2010-09-03 这个有点类似单列模式:单例模式就是某个类只存在一个对象(只new 一次),当某个类的初始化比较耗时,耗资源的时候,比如加载某些配置文件hibernate,spring的配置文件等,一般会选择单例模式。

一、懒汉式单例

在类被加载的时候,唯一实例已经被创建。这个设计模式在Java中容易实现,在别的语言中难以实现。

/**

* Created by IntelliJ IDEA.

* User: leizhimin

* Date: 2007-9-11

* Time: 14:57:08

* <> 单例模式-懒汉式单例

*/

public class LazySingleton {

/**

* 私有静态对象,加载时候不做初始化

*/

private static LazySingleton m_intance=null;

/**

* 私有构造方法,避免外部创建实例

*/

private LazySingleton(){

}

/**

* 静态工厂方法,返回此类的唯一实例.

* 当发现实例没有初始化的时候,才初始化.

* @return LazySingleton

*/

synchronized public static LazySingleton getInstance(){

if(m_intance==null){

m_intance=new LazySingleton();

}

return m_intance;

} }

二、饿汉式单例

在类加载的时候不创建单例实例。只有在第一次请求实例的时候的时候创建,并且只在第一次创建后,以后不再创建该类的实例。

/**

* Created by IntelliJ IDEA.

* User: leizhimin

* Date: 2007-9-11

* Time: 14:45:25

* <> 单例模式-饿汉式单例

*/

public class EagerSingleton {

/**

* 私有的(private)唯一(static final)实例成员,在类加载的时候就创建好了单例对象

*/

private static final EagerSingleton m_instance = new EagerSingleton();

/**

* 私有构造方法,避免外部创建实例

*/

private EagerSingleton() {

}

/**

* 静态工厂方法,返回此类的唯一实例.

* @return EagerSingleton

*/

public static EagerSingleton getInstance() {

return m_instance;

}

}

三、登记式单例

这个单例实际上维护的是一组单例类的实例,将这些实例存放在一个Map(登记薄)中,对于已经登记过的实例,则从工厂直接返回,对于没有登记的,则先登记,而后返回。

/**

* Created by IntelliJ IDEA. * User: leizhimin

* Date: 2005-9-11

* Time: 15:20:16

* <> 单例模式- 登记式单例

*/

public class RegSingleton {

/**

* 登记薄,用来存放所有登记的实例

*/

private static Map m_registry = new HashMap();

//在类加载的时候添加一个实例到登记薄

static {

RegSingleton x = new RegSingleton();

m_registry.put(x.getClass().getName(), x);

}

/**

* 受保护的默认构造方法

*/

protected RegSingleton() {

}

/**

* 静态工厂方法,返回指定登记对象的唯一实例;

* 对于已登记的直接取出返回,对于还未登记的,先登记,然后取出返回

* @param name

* @return RegSingleton

*/

public static RegSingleton getInstance(String name) {

if (name == null) {

name = "RegSingleton";

}

if (m_registry.get(name) == null) {

try {

m_registry.put(name, (RegSingleton) Class.forName(name).newInstance());

} catch (InstantiationException e) { e.printStackTrace();

} catch (IllegalAccessException e) {

e.printStackTrace();

} catch (ClassNotFoundException e) {

e.printStackTrace();

}

}

return m_registry.get(name);

}

/**

* 一个示意性的商业方法

* @return String

*/

public String about() {

return "Hello,I am RegSingleton!";

}

}

评论(0)10

凡人的智慧 2010-09-08

一般来说 进行链式编程的时候会用到return this这类的用法 至于在你的代码 完全是没有意义的

合集下载

java构造函数的八种方法

java构造函数的八种方法

java构造函数的八种方法

在Java中,构造函数是用来初始化对象的特殊方法。Java中构造函数的定义与普通方法类似,但具有以下特点:构造函数的方法名与类名相同;构造函数没有返回值类型;每个类都可以有一个或多个构造函数。根据参数列表和调用方式的不同,构造函数可以分为以下八种方法:

1. 无参构造函数: 这是最简单的构造函数,不接受任何参数。当我们创建一个对象时,如果没有显式地调用构造函数,并且类中没有定义其他构造函数,则会隐式地调用无参构造函数。

javapublic class MyClass {

public MyClass() {

// 构造函数体

}

}

2. 有参构造函数: 有参构造函数接受一个或多个参数,并根据这些参数对对象进行初始化。

javapublic class MyClass {

public MyClass(int param1, String param2) {

// 构造函数体

}

}

3. 默认构造函数: 如果没有在类中显式地定义构造函数,编译器会默认提供一个无参的构造函数。这个构造函数称为默认构造函数。

javapublic class MyClass {

// 编译器提供的默认构造函数

public MyClass() {

// 构造函数体

}

}

4. 重载构造函数: 在一个类中可以定义多个构造函数,只要它们的参数列表不同即可,这就是构造函数的重载。

javapublic class MyClass {

public MyClass() {

// 无参构造函数

}

public MyClass(int param1) {

// 有参构造函数

}

} 5. 私有构造函数: 私有构造函数可以防止类被实例化,通常用于创建工具类或单例模式。

枚举实现单例模式原理

枚举实现单例模式原理

枚举实现单例模式原理

实现单例模式的方法有很多种,其中比较常见的一种是使用枚举类型。在Java中,枚举类型是一种特殊的类,它只允许有固定数量的实例,并且这些实例在枚举类型定义的时候就已经确定。使用枚举类型可以很方便地实现单例模式,而且具有线程安全和反序列化安全等优点。本文将介绍如何使用枚举类型实现单例模式,以及其实现原理。

使用枚举类型实现单例模式

我们定义一个枚举类型,例如:

public enum Singleton {

INSTANCE;

//其他成员变量和方法

}

在这个枚举类型中,我们只定义了一个枚举常量INSTANCE。这个常量就是我们要实现的单例对象,而且它是一个类的静态变量,因此就具有了全局访问点。

在这个枚举类型中,我们可以定义其他成员变量和方法,以实现单例对象的功能。例如:

public enum Singleton {

INSTANCE;

private String name;

public void setName(String name){

= name;

}

public String getName(){

return ;

}

} 在这个例子中,我们定义了一个name成员变量和相应的setter和getter方法,以实现单例对象的属性访问。

使用这个单例对象的代码可以这样实现:

Singleton.INSTANCE.setName("my name");

String name = Singleton.INSTANCE.getName();

这段代码调用了Singleton枚举类型的INSTANCE常量,并通过它访问了单例对象的属性和方法。这样,我们就实现了一个简单的枚举类型单例对象。

java枚举类型enum用法 switch-概述说明以及解释

java枚举类型enum用法 switch-概述说明以及解释

java枚举类型enum用法 switch-概述说明以及解释

1.引言

1.1 概述

在计算机编程中,枚举类型(enum)是一种特殊的数据类型,用于表示一组具名的常量。与普通的变量不同,枚举类型的取值是有限且固定的,它将一系列具有相似属性或关联关系的常量进行分组,方便在程序中进行使用和管理。

在Java编程语言中,枚举类型是一种独立的类,它可以包含多个枚举常量,并且允许定义属性和方法。枚举类型的定义方式简单明了,可以帮助程序员更好地组织和管理常量。

本文将重点介绍Java中枚举类型enum的用法,并阐述枚举类型在switch语句中的应用。首先,我们将讨论枚举类型的定义和声明,包括如何创建枚举类型以及如何给枚举常量赋值。接着,我们将探讨枚举类型的属性和方法,包括如何为枚举常量定义属性和方法,以及如何在程序中使用它们。最后,我们将重点关注枚举类型在switch语句中的应用,介绍如何使用switch语句处理枚举类型的不同取值。通过本文的学习,读者将能够更好地掌握枚举类型enum的用法,进一步提升自己的编程能力。

接下来,我们将详细介绍枚举类型的定义和声明。

1.2 文章结构

本文将按照以下结构来探讨Java枚举类型(enum)以及其在switch语句中的应用。

1. 引言

1.1 概述

在引言部分,我们将简要介绍Java枚举类型(enum)的基本概念和作用,以及本文的目的和重要性。

1.2 文章结构(当前部分)

在文章结构部分,我们将详细介绍本文的整体结构,让读者对接下来的内容有一个清晰的认知。

1.3 目的

在目的部分,我们将阐述本文的目标是为读者提供全面了解Java枚举类型(enum)及其在switch语句中应用的知识,以帮助读者在实际开发中更好地运用这些概念。

2. 正文 2.1 枚举类型的定义与声明

在这一节中,我们将介绍如何定义和声明枚举类型,以及枚举类型的特点和用法。

构造方法及this关键字实验目的

构造方法及this关键字实验目的

构造方法和关键字 "this" 在编程中与对象的创建和初始化有关。构造方法是一种特殊的方法,用于在创建对象时初始化对象的属性和状态。关键字 "this" 用于引用当前对象的引用。下面是一个简单的Java示例,说明了构造方法和关键字 "this" 的用法以及实验目的:

public class Person {

private String name;

private int age;

// 构造方法1

public Person() {

= "未知";

this.age = 0;

}

// 构造方法2

public Person(String name, int age) {

= name;

this.age = age;

}

// 获取姓名

public String getName() {

return ;

}

// 获取年龄

public int getAge() {

return this.age;

}

public static void main(String[] args) {

// 创建两个Person对象,使用不同的构造方法

Person person1 = new Person();

Person person2 = new Person("Alice", 25);

// 输出对象的属性值

System.out.println("Person1的姓名是:" + person1.getName());

System.out.println("Person1的年龄是:" + person1.getAge());

JAVA笔试题_附答案版

JAVA笔试题_附答案版

一:单选题

1. 下列哪一种叙述是正确的(D )

A. abstract修饰符可修饰字段、方法和类

B. 抽象方法的body部分必须用一对大括号{ }包住没有body部分

C. 声明抽象方法,大括号可有可无 不存在body

D. 声明抽象方法不可写出大括号

2. 如下代码

public class Test {

public int aMethod() {

static int i = 0;

i++;

return i;

}

public static void main (String args[]) {

Test test = new Test();

test.aMethod();

int j = test.aMethod();

System.out.println(j);

}

}

输出结果是什么? D

A. 0

B. 1

C. 2

D. 编译失败

3. 下列哪种说法是正确的( D)

A. 实例方法可直接调用超类的实例方法 如果超类没有被重写就可以

B. 实例方法可直接调用超类的类方法 有可能是私有方法不可以调用

C. 实例方法可直接调用其他类的实例方法 不可以

D. 实例方法可直接调用本类的类方法

4. 在Servlet处理请求的方式为: C

A.以进程的方式

B.以程序的方式

C.以线程的方式 Servlet容器默认是采用单实例多线程的方式处理多个请求的:

D.以响应的方式

5. JDBC中,用于表示数据库连接的对象是: B

A.Statement 连接的实例,执行sql

B.Connection 建立与数据库的连接

C.DriverManager该方法将建立与数据库的连接 D.PreparedStatement

6. 用于调用存储过程的对象是: C

A.ResultSet 返回结果集

B.DriverManager

C.CallableStatemet

Java语言程序设计课后习题解答-张思民-第三章

Java语言程序设计课后习题解答-张思民-第三章

word格式-可编辑-感谢下载支持

第3章 面向对象程序设计基础

【1】什么是Java程序使用的类?什么是类库?

[解答]:Java程序的基本单位是类。对象是对事物的抽象,而类是对对象的抽象和归纳,找出事物的共性,把具有共同性质的事物归结为一类,得出一个抽象的概念——类。类是具有相同属性和方法的一组对象的集合,类是在对象之上的抽象,对象则是类的具体化,一旦建立类之后,就可用它来建立许多你需要的对象。

Java的类库是系统提供的已实现的标准类的集合,是Java编程的API(Application Program Interface),它可以帮助开发者方便、快捷地开发Java程序。

【2】如何定义方法?在面向对象程序设计中方法有什么作用?

[解答]:方法的定义由两部分组成:方法声明和方法体。方法声明的基本格式如下:

返回类型 方法名(形式参数)

{

… //方法体内容

}

方法声明包括方法名、返回类型和形式参数,方法的小括号是方法的标志;方法体为实现方法行为的Java语句。

在面向对象程序设计中,方法所起的作用是完成对类和对象属性操作。

【3】简述构造方法的功能和特点。下面的程序片段是某学生为student类编写的构造方法,请指出其中的错误。

void Student(int no,String name)

{

studentNo=no;

studentName=name;

return no;

}

[解答]:构造方法是一个特殊的方法,主要用于初始化新创建的对象。构造方法的方法名要求与类名相同,用户不能直接调用,只能通过new运算符调用,而且构造方法是不返回任何数据类型,甚至也不返回void数据类型,即不能在构造方法前加void。

以上的代码段出错于:①构造方法Student()前不能加void ②不能用return语句

【4】定义一个表示学生的student类,包括的域有学号、姓名、性别、年龄,包括的方法有获得学号、姓名、性别、年龄及修改年龄。编写Java程序创建student类的对象及测试其方法的功能。

Java题库——Chapter11继承和多态

Java题库——Chapter11继承和多态

1)Analyze the following code:

public class Test {

public static void main(String[ ] args) {

B b = new B();

b.m(5);

System.out.println("i is " + b.i);

}

}

class A {

int i;

public void m(int i) {

this.i = i;

}

}

class B extends A {

public void m(String s) {

}

}

A)The program has a compilation error, because m is overridden with a different signature in B.

B)The method m is not overridden in B. B inherits the method m from A and defines an overloaded method m in B.

C)The program has a runtime error on b.i, because i is not accessible from b.

D)The program has a compilation error, because b.m(5) cannot be invoked since the method m(int) is hidden in B.

B中没有重写⽅法m。B继承了A中的⽅法m,并在B中定义了⼀个重载的⽅法m。

2)Analyze the following code.

// Program 1

public class Test {

public static void main(String[ ] args) {

Object a1 = new A();

-山东大学Java高级程序语言期末考试题(含答案)

1. 下列关于计算机系统和Java编程语言的说法,正确的是(C)

A. 计算机是由硬件、操作系统和软件组成,操作系统是缺一不可的组成部分。

B. Java语言编写的程序源代码可以不需要编译直接在硬件上运行。

C. 在程序中书写注释不会影响程序的执行,可以多写一些详细的注释。

D. Java的集成开发环境(IDE),如Eclipse,是开发Java语言必需的软件工具。

2. 下列选项中符合Java命名规则的标识符是(D)

A. 2japro B. &Class C. const D. _123

3. 下列在Java语言中关于数据类型和包装类的说法,正确的是(B)

A. 基本(简单)数据类型是包装类的简写形式,可以用包装类替代基本(简单)数据类型。

B. long和double都占了64位(64bit)的存储空间。

C. 默认的整数数据类型是int,默认的浮点数据类型是float。

D. 和包装类一样,基本(简单)数据类型声明的变量中也具有静态方法,用来完成进制转化等。

4. 下面赋值语句中正确的是(A)

A. double d=5.3e12; B. float f=11.1;

C. int i=0.0; D. Double oD=3;

5. 如果int x=20, y=5,则语句System.out.println(x+y +""+(x+y)+y); 的输出结果是(D)

A. 2530 B. 55 C. 2052055 D. 25255

6. 如下Java语句 double x=2.0; int y=4; x/=++y; 执行后,x的值是(C)

A. 0.5 B. 2.5 C. 0.4 D. 2.0

7. 下列关于Java语言中String和char的说法,正确的是(C)

解析Java中所有错误和异常的父类java.lang.Throwable

解析Java中所有错误和异常的⽗类ng.Throwable

这篇⽂章主要介绍了Java中所有错误和异常的⽗类ng.Throwable,⽂章中简单地分析了其源码,说明在代码注释中,需要的朋友可以参考下

在java语⾔中,错误类的基类是ng.Error,异常类的基类是ng.Exception。

1)相同点:ng.Error和ng.Exception都是ng.Throwable的⼦类,因此ng.Error和ng.Exception⾃⾝及其⼦类都可以作为throw的

使⽤对象,如:throw new MyError();和throw new MyException();其中,MyError类是ng.Error的⼦类,MyException类是ng.Exception的⼦类。

2)不同点:ng.Error⾃⾝及其⼦类不需要try-catch语句的⽀持,可在任何时候将返回⽅法,如下⾯的⽅法定义:

public String myMethod() {

throw new MyError(); }

其中MyError类是ng.Error类的⼦类。

ng.Exception⾃⾝及其⼦类需要try-catch语句的⽀持,如下的⽅法定义是错误的:

public String myMethod() {

throw new MyException(); }

正确的⽅法定义如下:

public String myMethod() throws MyException {

throw new MyException();

}

其中MyException类是ng.Exception的⼦类。

JAVA异常是在java程序运⾏的时候遇到⾮正常的情况⽽创建的对象,它封装了异常信息,java异常的根类为ng.Throwable,整个类有两个

字符串拼接五种常用方法

字符串拼接五种常⽤⽅法

字符串,是Java中最常⽤的⼀个数据类型了。本⽂,也是对于Java中字符串相关知识的⼀个补充,主要来介绍⼀下字符串拼接相关的知识。本⽂基于jdk1.8.0_181。字符串拼接是我们在Java代码中⽐较经常要做的事情,就是把多个字符串拼接到⼀起。我们都知道,String是Java中⼀个不可变的类,所以他⼀旦被实例化就⽆法被修改。(不可变类的实例⼀旦创建,其成员变量的值就不能被修改。这样设计有很多好处,⽐如可以缓存hashcode、使⽤更加便利以及更加安全等)。 但是,既然字符串是不可变的,那么字符串拼接⼜是怎么回事呢?字符串不变性与字符串拼接,其实,所有的所谓字符串拼接,都是重新⽣成了⼀个新的字符串。下⾯⼀段字符串拼接代码:String s = "abcd";

s = s.concat("ef");

其实最后我们得到的s已经是⼀个新的字符串了。如下图:

中保存的是⼀个重新创建出来的String对象的引⽤。那么,在Java中,到底如何进⾏字符串拼接呢?字符串拼接有很多种⽅式,这⾥简单介绍⼏种⽐较常⽤的。

⼀,使⽤+拼接字符串

在Java中,拼接字符串最简单的⽅式就是直接使⽤符号+来拼接。如:String wechat = "Hollis";

String introduce = "召唤师峡⾕";

String hollis = wechat + "," + introduce;

这⾥要特别说明⼀点,有⼈把Java中使⽤+拼接字符串的功能理解为运算符重载。其实并不是,Java是不⽀持运算符重载的。这其实只是Java提供的⼀个语法糖。后⾯再详细介绍。

概念普及:

运算符重载:在计算机程序设计中,运算符重载(英语:operator overloading)是多态的⼀种。运算符重载,就是对已有的运算符重新进⾏定义,赋予其另⼀种功能,以适应不同的数据类型。

语法糖:语法糖(Syntactic sugar),也译为糖⾐语法,是由英国计算机科学家彼得·兰丁发明的⼀个术语,指计算机语⾔中添加的某种语法,这种语法对语⾔的功能没有影响,但是更⽅便程序员使⽤。语法糖让程序更加简洁,有更⾼的可读性。concat

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档