浅谈this和static
一.this关键字
一个比较经典的使用:

输出的结果是:12
1.this关键字只能在方法的内部使用,表示对“调用方法的那个对象”的引用,this的用法和其他对象引用并无不同。注意一点:在方法的内部调用同一个类的其他方法,不必使用this,直接调用即可。
2.当需要返回当前对象的引用的时候,可以借助this。
3.当方法的形参与成员变量重名的时候,可以用this区分。

从两次显示的结果不同可以知道,当形参和成员变量重名的时候,如果不用this加以区分,虚拟机也无法区分方法中的i到底是指向成员变量还是形参,不过这里有一个原则,当无法确定的时候,取离参数最近的声明,即就近声明原则。
4.使用this,在构造器中调用构造器

注意:除构造器之外,编译器禁止在任何其他方法中调用构造器。
二.static关键字
在java中并不存在全局变量的概念,static修饰的变量可以看做是一个伪全局的概念,static表示“全局”或者“静态”的意思,常用用法有如下三种:
1.修饰变量
static修饰的变量,通常我们称之为静态变量,未用static修饰的变量称为实例变量,两者的区别是:静态变量是类的公用变量,在类加载的是时候初始化,并且仅初始化一次,对类的所有对象来说,static成员变量只有一份,对象之间借助静态变量可进行数据共享。实例变量则伴随着对象的实例化,每创建一个对象就会产生一个实例变量,同一个类的不同对象的实例变量的值可能不同。static成员变量的初始化顺序按照定义的顺序进行初始化。
2.修饰方法
static修饰的方法,一般称为静态方法,静态方法不依赖于任何对象就能进行访问,通过类名可以直接访问静态方法和静态变量。静态方法中不能使用thi关键字,同样静态方法中不能访问非静态成员变量和非静态成员方法,但是在非静态成员方法中可以访问静态变量和静态方法。因此,如果说想在不创建对象的情况下调用某个方法,就可以将这个方法设置为static。我们最常见的static方法就是main方法,至于为什么main方法必须是static的,现在就很清楚了。因为程序在执行main方法的时候没有创建任何对象,因此只有通过类名来访问。
3.修饰代码块
static关键字还能修饰代码块,用来形成静态块以优化程序的性能。static块可以出现在类中的任何地方(除了方法内部,任何方法),类中可以有多个静态块,在类加载的时候,会按照static块的顺序来执行每个static块,并且只执行一次。
static关键字常见误区:
static关键能改变类中成员变量的访问权限?答案是不能,Java中的static关键字不会影响到变量或者方法的作用域,在Java中能够影响到访问权限的只有private、public、protected(包括包访问权限)这几个关键字

static能修饰局部变量?不能,java语法规定,static是不允许用来修饰局部变量。

static方法中能使用this?不能,很明显,在静态方法中不能使用this关键字,静态方法可以通过类访问,当通过类访问的时候,this指向的对象也许还未产生。

this能访问静态变量?是可以的,静态成员变量虽然独立于对象,但是不代表不可以通过对象去访问,所有的静态方法和静态变量都可以通过对象访问(只要访问权限足够)。

静态块可以出现在类的任何地方?答案是不能,在方法内部,在任何方法内部都不行。

浅谈this和static的更多相关文章
- 浅谈游标选项 Static|Keyset|DYNAMIC|FAST_FORWARD
接好久之前太监的一篇Blog.现在补充几个选项的介绍 所用的语句都是这个 IF OBJECT_ID('T1') IS NOT NULL DROP TABLE T1 GO CREATE TABLE T1 ...
- 浅谈Java中static关键字、权限修饰符
1.实例变量:也称非静态成员变量,实例变量前没有static关键字,用来描述同一类事物的公共属性.访问方式:对象名.变量名.实例变量存储在堆区,对象有n个,数据就有n个.实例变量随着对象的创建而创建, ...
- 浅谈Java中static作用--转
static表示“全局”或者“静态”的意思,用来修饰成员变量和成员方法,也可以形成静态static代码块,但是Java语言中没有全局变量的概念. 被static修饰的成员变量和成员方法独立于该类的任何 ...
- 转载 浅谈C/C++中的static和extern关键字
浅谈C/C++中的static和extern关键字 2011-04-21 16:57 海子 博客园 字号:T | T static是C++中常用的修饰符,它被用来控制变量的存贮方式和可见性.ext ...
- 【原创】浅谈指针(十二)关于static(上)
0.前言 这个系列基本上是一月一更到两月一更 今天写一篇关于static的,内含大量干货,做好准备 1.基础知识的回顾 1.1.内存的种类 一般来说,我们之前已经讲过的变量(或者说是内存)可以大体分为 ...
- 浅谈 Fragment 生命周期
版权声明:本文为博主原创文章,未经博主允许不得转载. 微博:厉圣杰 源码:AndroidDemo/Fragment 文中如有纰漏,欢迎大家留言指出. Fragment 是在 Android 3.0 中 ...
- 浅谈 LayoutInflater
浅谈 LayoutInflater 版权声明:本文为博主原创文章,未经博主允许不得转载. 微博:厉圣杰 源码:AndroidDemo/View 文中如有纰漏,欢迎大家留言指出. 在 Android 的 ...
- 浅谈Java的throw与throws
转载:http://blog.csdn.net/luoweifu/article/details/10721543 我进行了一些加工,不是本人原创但比原博主要更完善~ 浅谈Java异常 以前虽然知道一 ...
- 浅谈SQL注入风险 - 一个Login拿下Server
前两天,带着学生们学习了简单的ASP.NET MVC,通过ADO.NET方式连接数据库,实现增删改查. 可能有一部分学生提前预习过,在我写登录SQL的时候,他们鄙视我说:“老师你这SQL有注入,随便都 ...
随机推荐
- 初尝微信小程序2-基本框架
基本框架: .wxml :页面骨架 .wxss :页面样式 .js :页面逻辑 描述一些行为 .json :页面配置 创建一个小程序之后,app.js,app.json,app.wxss是必须的 ...
- java自定义泛型 面试题:接收任意数组进行反转 泛型通配符
不用泛型只能操作某种类型进行反转 代码如下: package com.swift.fanxing; import org.junit.Test; public class RenyiReverse { ...
- Easyui下的点击回车键跳转到下个控件
在Easyui框架下,JavaScript 中的 onKeyDown事件居然失效了.所以使用了另外的函数去实现点击回车键跳转到下个控件. /** * 点击回车键跳转到下个控件; * @param ol ...
- linux 设置自动关机和重启命令shutdown
1.shutdown使用命令:Shutdown [选项] [时间] r 关机后立即重启 h 关机 2. 立即关机: shutdown -h now
- 批量更新python库
import pip from subprocess import call for dist in pip.get_installed_distributions(): try: call(&quo ...
- js获取url参数方法
function GetQueryString(name) { var reg = new RegExp("(^|&)" + name + "=([^&] ...
- windows系统下用VScode配置远程编辑服务器文件的环境!通过Rmate方法
虽然公司电脑win可以通过Xshell通过SSH远程连接家中内网linux服务器了,但是只能用vim编辑文件有点不爽. 于是上网查询,windows下使用vscode远程编辑服务器文件的办法.参照博文 ...
- 数据结构学习-AVL平衡树
环境:C++ 11 + win10 IDE:Clion 2018.3 AVL平衡树是在BST二叉查找树的基础上添加了平衡机制. 我们把平衡的BST认为是任一节点的左子树和右子树的高度差为-1,0,1中 ...
- OC中block作方法参数时的用法
方式一.在传参时直接声明block回调方法. 1. 定义方法: - (int)doTest:(NSString *)name para1:(int)temp1 para2:(int)temp2 suc ...
- 【异常】The server time zone value 'Öйú±ê׼ʱ¼ä' is unrecognized or represents more than one time zone.
异常错误:The server time zone value 'Öйú±ê׼ʱ¼ä' is unrecognized or represents more than one time zone ...