【Java学习笔记之十四】Java中this用法小节

简介: 用类名定义一个变量的时候,定义的只是一个引用,外面可以通过这个引用来访问这个类里面的属性和方法。     那们类里面是够也应该有一个引用来访问自己的属性和方法纳?     呵呵,JAVA提供了一个很好的东西,就是 this 对象,它可以在类里面来引用这个类的属性和方法。

用类名定义一个变量的时候,定义的只是一个引用,外面可以通过这个引用来访问这个类里面的属性和方法。

    那们类里面是够也应该有一个引用来访问自己的属性和方法纳?

    呵呵,JAVA提供了一个很好的东西,就是 this 对象,它可以在类里面来引用这个类的属性和方法。先来个简单的例子:

 

 1 public class ThisDemo {  
 2     String name="Mick";
 3     public void print(String name){
 4         System.out.println("类中的属性 name="+this.name);
 5         System.out.println("局部传参的属性="+name);
 6     }   
 7     public static void main(String[] args) {
 8         ThisDemo tt=new ThisDemo();
 9         tt.print("Orson");
10     }
11 }

 

关于返回类自身的引用,通过this 这个关键字返回自身这个对象然后在一条语句里面实现多次的操作。

 

 1 public class ThisDemo {  
 2     int number;
 3     ThisDemo increment(){
 4          number++;
 5          return this;
 6     }  
 7   private void print(){
 8          System.out.println("number="+number);
 9     }
10     public static void main(String[] args) {
11         ThisDemo tt=new ThisDemo();
12          tt.increment().increment().increment().print();
13     }
14 }

 

   一个类中定义两个构造函数,在一个构造函数中通过 this 这个引用来调用另一个构造函数,这样应该可以实现。

    这样的实现机制在实际做应用开发的时候有会有什么样子的用处纳?贴下写的代码:

 

 1 public class ThisDemo {  
 2     String name;
 3     int age;
 4     public ThisDemo (){ 
 5         this.age=21;
 6    }     
 7     public ThisDemo(String name,int age){
 8         this();
 9         this.name="Mick";
10     }     
11   private void print(){
12          System.out.println("最终名字="+this.name);
13          System.out.println("最终的年龄="+this.age);
14     }
15     public static void main(String[] args) {
16        ThisDemo tt=new ThisDemo("",0); //随便传进去的参数
17        tt.print();
18     }
19 }

 对this的调用必须是构造器中的第一个语句

下面给出实例:

 

 1 import java.util.Arrays;
 2 class People
 3 {
 4     private int age;
 5     private String name;
 6     People(String name)
 7     {
 8         this.name=name;
 9     }
10     People(String name,int age)
11     {
12         //this.People(name);
13         this(name);
14         this.age=age;
15         //this(age);
16     }
17     public void speak()
18     {
19         System.out.println(name+","+age);
20     }
21 }
22 /*
23 class Car
24 {
25     int num;
26     String color;
27     void run()
28     {
29         System.out.println(num+"---"+color);
30     }
31 }
32 */
33 class nzf
34 {
35     public static void main(String[] args)
36     {
37         People p=new People("Sakura",19);
38         p.speak();
39         /*
40         int []a1={1,2,3,4};
41         int []a2={1,2,3,4};
42         int []a3={2,3,4,5};
43         System.out.println(Arrays.equals(a1,a2));
44         System.out.println(Arrays.equals(a2,a3));
45         int []b=Arrays.copyOf(a1,6);
46         for(int x:b)
47         {
48             System.out.print(x+" ");
49         }
50         System.out.println();
51         System.out.println(Arrays.toString(b));
52         Arrays.fill(b,2,4,1);
53         System.out.println(Arrays.toString(b));
54         Arrays.sort(b);
55         System.out.println(Arrays.toString(b));
56         */
57         /*
58         Car c=new Car();
59         c.num=5;
60         c.color="green";
61         c.run();
62         show(c);
63         */
64         /*
65         new Car().num=5;
66         new Car().color="red";
67         new Car().run();
68         */
69 //        show(new Car());
70     }
71     /*
72     public static void show(Car c)
73     {
74         c.num=6;
75         c.color="black";
76         System.out.println(c.num+"---"+c.color);
77     }
78     */
79 }

会显示下面这个结果:

如果交换行号13-14这段顺序,改成这个:

 

        this.age=age;
        this(name);

 

会出现以下错误:

总结一下:

   1) this 关键字是类内部当中对自己的一个引用,可以方便类中方法访问自己的属性;

   2)可以返回对象的自己这个类的引用,同时还可以在一个构造函数当中调用另一个构造函数。

   3)对this的调用必须是构造器中的第一个语句,否则会报错

目录
相关文章
|
2月前
|
移动开发 前端开发 Java
Java最新图形化界面开发技术——JavaFx教程(含UI控件用法介绍、属性绑定、事件监听、FXML)
JavaFX是Java的下一代图形用户界面工具包。JavaFX是一组图形和媒体API,我们可以用它们来创建和部署富客户端应用程序。 JavaFX允许开发人员快速构建丰富的跨平台应用程序,允许开发人员在单个编程接口中组合图形,动画和UI控件。本文详细介绍了JavaFx的常见用法,相信读完本教程你一定有所收获!
1381 1
Java最新图形化界面开发技术——JavaFx教程(含UI控件用法介绍、属性绑定、事件监听、FXML)
|
6月前
|
存储 Java
Java学习笔记 List集合的定义、集合的遍历、迭代器的使用
Java学习笔记 List集合的定义、集合的遍历、迭代器的使用
101 4
|
7月前
|
Java
Java中的equals()与==的区别与用法
【7月更文挑战第28天】
107 12
|
4月前
|
存储 安全 Java
深入理解Java中的FutureTask:用法和原理
【10月更文挑战第28天】`FutureTask` 是 Java 中 `java.util.concurrent` 包下的一个类,实现了 `RunnableFuture` 接口,支持异步计算和结果获取。它可以作为 `Runnable` 被线程执行,同时通过 `Future` 接口获取计算结果。`FutureTask` 可以基于 `Callable` 或 `Runnable` 创建,常用于多线程环境中执行耗时任务,避免阻塞主线程。任务结果可通过 `get` 方法获取,支持阻塞和非阻塞方式。内部使用 AQS 实现同步机制,确保线程安全。
240 3
|
3月前
|
Java 数据库连接 API
Spring 框架的介绍(Java EE 学习笔记02)
Spring是一个由Rod Johnson开发的轻量级Java SE/EE一站式开源框架,旨在解决Java EE应用中的多种问题。它采用非侵入式设计,通过IoC和AOP技术简化了Java应用的开发流程,降低了组件间的耦合度,支持事务管理和多种框架的无缝集成,极大提升了开发效率和代码质量。Spring 5引入了响应式编程等新特性,进一步增强了框架的功能性和灵活性。
77 0
|
5月前
|
存储 安全 Java
Java修仙之路,十万字吐血整理全网最完整Java学习笔记(基础篇)
从Java环境的搭建到实际代码的编写,从基本用法的讲解到底层原理的剖析,深度解析Java基础知识。本文是《Java学习路线》专栏的起始文章,旨在提供一套完整的Java学习路线,覆盖Java基础知识、数据库、SSM/SpringBoot等框架、Redis/MQ等中间件、设计模式、架构设计、性能调优、源码解读、核心面试题等全面的知识点,并在未来不断更新和完善,帮助Java从业者在更短的时间内成长为高级开发。
Java修仙之路,十万字吐血整理全网最完整Java学习笔记(基础篇)
|
5月前
|
存储 安全 Java
Java修仙之路,十万字吐血整理全网最完整Java学习笔记(进阶篇)
本文是Java基础的进阶篇,对异常、集合、泛型、Java8新特性、I/O流等知识进行深入浅出的介绍,并附有对应的代码示例,重要的地方带有对性能、底层原理、源码的剖析。适合Java初学者。
Java修仙之路,十万字吐血整理全网最完整Java学习笔记(进阶篇)
|
5月前
|
Java
Java 正则表达式高级用法
Java 中的正则表达式是强大的文本处理工具,用于搜索、匹配、替换和分割字符串。`java.util.regex` 包提供了 `Pattern` 和 `Matcher` 类来高效处理正则表达式。本文介绍了高级用法,包括使用 `Pattern` 和 `Matcher` 进行匹配、断言(如正向和负向前瞻/后顾)、捕获组与命名组、替换操作、分割字符串、修饰符(如忽略大小写和多行模式)及 Unicode 支持。通过这些功能,可以高效地处理复杂文本数据。
104 10
|
5月前
|
存储 Java 数据处理
Java 数组的高级用法
在 Java 中,数组不仅可以存储同类型的数据,还支持多种高级用法,如多维数组(常用于矩阵)、动态创建数组、克隆数组、使用 `java.util.Arrays` 进行排序和搜索、与集合相互转换、增强 for 循环遍历、匿名数组传递以及利用 `Arrays.equals()` 比较数组内容。这些技巧能提升代码的灵活性和可读性,适用于更复杂的数据处理场景。
52 10
|
4月前
|
Java 数据安全/隐私保护
java学习笔记(基础习题)
java学习笔记(基础习题)
59 0

热门文章

最新文章