Java:关于Java中的this,这里为啥加不加都一样呢

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java:关于Java中的this,这里为啥加不加都一样呢相关的知识,希望对你有一定的参考价值。

public class Log
public Logger logger; // Logger实例
private static Log log; // 单例模式

private Log()
logger = Logger.getLogger(this.getClass());


public static Log getLoger()
if (log != null)
return log;
else
return new Log();



this.getClass()直接写成getClass()也可以,这是为什么呢?

this指直译是“这个”,在java中指“当前的”。不管在哪里,只要用到this,指的一定就是当前的这个对象。最常见的用法是在写java bean中。比如下面的代码

public class Student
    private String name;
    private int age;
    public Student()
    public Student(String name,int age)
        this();
        this.setName(name);
        this.age = age;
    
    public void setName(String name)
        this.name = name;
    
    public int getAge() 
        return this.age;
    

 上面的代码是一个java bean。所谓的java bean就是一个类,这个类有一些属性,方法只有这些属性的Getter 或者Setter (从Object类继承的方法不算在此列)。
这个bean有两个属性,在构造器中为属性赋值的时候写的this.setName(name).意思是调用当前你创建的这个对象的Setter给这个对象的属性赋值。而setName里面的this.name = name;这一句,等号之前的this.name表示当前对象的name,也就是在类里面定义的private String name这个变量,而等号之后的name表示从外界调用这个方法时候传进来的参数。所以这句话的意思就是将外界传来的字符串变量的值赋给当前对象的name属性。
那么构造器第一行的this()是做什么的呢?这句话是调用当前这个对象的无参构造,就是调用上面的public Student()这个构造器。在这段代码里this()体现不出来什么作用。但是我们知道构造器的作用是在构造对象的时候给属性赋值的。如果上面个无参构造里面写一些赋值语句的话那么这里就可以避免代码的重复了。但是请注意,调用this()的时候一定要写在该方法的第一行,否则会报错。
另外,this关键字不能使用在有static关键字修饰的方法和代码块里面。因为static是这个类的所有对象共用的,而this指的只是当前这个对象的“私人”的一些东西,在属性上面就冲突了。

参考技术A

this是指的对象本身,通过this可以调用本对象拥有的所有方法和属性,当然不加this也可以调用。

一般用this的情况:

    当局部变量与成员变量相同名时,例如 this,x = x;this.x 是个成员变量,而x是个局部变量

    在myeclipse下用this可以提示后面的方法或者成员变量

    在内部类或匿名内部类中使用this来指向内部类本身

    将类本省作为参数传递 

本回答被提问者和网友采纳

Vue -- 关于函数调用时加不加括号的问题

1. 关于函数调用时加不加括号的问题


1.1 函数不传参:


1.1.1 调用时不加()

如果函数不传参,推荐不加括号,示例:

<!DOCTYPE html>
<html>

<head>
	<meta charset="UTF-8" />
	<title>事件的基本使用</title>
	<!-- 引入Vue -->
	<script type="text/javascript" src="../js/vue.js"></script>
</head>

<body>
	<div id="root">
		<h2>欢迎来到{{name}}学习</h2>
		<!-- <button v-on:click="showInfo">点我提示信息</button> -->
		<button @click="showInfo1">点我提示信息1(不传参)</button></button>
	</div>
</body>

<script type="text/javascript">
	Vue.config.productionTip = false //阻止 vue 在启动时生成生产提示。

	const vm = new Vue({
		el: '#root',
		// 只有在data中的数据才会进行数据代理
		data: {
			name: 'CQUT',
		},
		methods: {
			showInfo1(event) {
				// console.log(event.target.innerText)
				// console.log(this) //此处的this是vm
				alert(event)
				alert('同学你好!')
			}
		}
	})
</script>

</html>

运行结果:

结论:

  • 我们发现在调用方法时不加(),则默认也会把event事件对象传递过来
  • 于是我们可以根据事件对象进行一些操作,例如:

现在的运行结果:


1.1.2 调用时加()

运行结果:

结论:

  • 我们发现调用函数时,如果加上(),则默认不会把event对象传递过来。因为这里用到了event对象,所有程序会报错

手动传入event对象

现在的运行结果:


1.1.3 小结

  • 如果函数不需要传参,则推荐不加上(),否则需要手动传入event对象,防止程序报错。
  • @click=“demo” 和 @click=“demo($event)” 效果一致,但后者可以传参;

1.2 函数传参

如果函数传参,则必须加上()

示例代码:

<!DOCTYPE html>
<html>

<head>
	<meta charset="UTF-8" />
	<title>事件的基本使用</title>
	<!-- 引入Vue -->
	<script type="text/javascript" src="../js/vue.js"></script>
</head>

<body>
	<div id="root">
		<h2>欢迎来到{{name}}学习</h2>
		<button @click="showInfo2($event,66)">点我提示信息2(传参)</button>
	</div>
</body>

<script type="text/javascript">
	Vue.config.productionTip = false //阻止 vue 在启动时生成生产提示。

	const vm = new Vue({
		el: '#root',
		data: {
			name: 'CQUT',
		},
		methods: {
			showInfo2(event, number) {
				console.warn('event: ' + event);
				console.warn('number: ' + number);
			}
		}
	})
</script>

</html>

运行结果:

补充:



以上是关于Java:关于Java中的this,这里为啥加不加都一样呢的主要内容,如果未能解决你的问题,请参考以下文章

Java中的自动行刷新,加不加true有啥区别?不加true也照样换行吧?这个true有啥用?

JS问题 为啥我直接在onclick后写window.close不加函数,打开的时候直接闪退了?加不加函数有区别吗

Vue -- 关于函数调用时加不加括号的问题

Java中为啥我写switch语句,在case后加break就错误,不加就正确,很困惑,

关于英语的,一个日期前面加不加on的问题。

js 单引号嵌套双引号报错?