一.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的更多相关文章

  1. 浅谈游标选项 Static|Keyset|DYNAMIC|FAST_FORWARD

    接好久之前太监的一篇Blog.现在补充几个选项的介绍 所用的语句都是这个 IF OBJECT_ID('T1') IS NOT NULL DROP TABLE T1 GO CREATE TABLE T1 ...

  2. 浅谈Java中static关键字、权限修饰符

    1.实例变量:也称非静态成员变量,实例变量前没有static关键字,用来描述同一类事物的公共属性.访问方式:对象名.变量名.实例变量存储在堆区,对象有n个,数据就有n个.实例变量随着对象的创建而创建, ...

  3. 浅谈Java中static作用--转

    static表示“全局”或者“静态”的意思,用来修饰成员变量和成员方法,也可以形成静态static代码块,但是Java语言中没有全局变量的概念. 被static修饰的成员变量和成员方法独立于该类的任何 ...

  4. 转载 浅谈C/C++中的static和extern关键字

    浅谈C/C++中的static和extern关键字 2011-04-21 16:57 海子 博客园 字号:T | T   static是C++中常用的修饰符,它被用来控制变量的存贮方式和可见性.ext ...

  5. 【原创】浅谈指针(十二)关于static(上)

    0.前言 这个系列基本上是一月一更到两月一更 今天写一篇关于static的,内含大量干货,做好准备 1.基础知识的回顾 1.1.内存的种类 一般来说,我们之前已经讲过的变量(或者说是内存)可以大体分为 ...

  6. 浅谈 Fragment 生命周期

    版权声明:本文为博主原创文章,未经博主允许不得转载. 微博:厉圣杰 源码:AndroidDemo/Fragment 文中如有纰漏,欢迎大家留言指出. Fragment 是在 Android 3.0 中 ...

  7. 浅谈 LayoutInflater

    浅谈 LayoutInflater 版权声明:本文为博主原创文章,未经博主允许不得转载. 微博:厉圣杰 源码:AndroidDemo/View 文中如有纰漏,欢迎大家留言指出. 在 Android 的 ...

  8. 浅谈Java的throw与throws

    转载:http://blog.csdn.net/luoweifu/article/details/10721543 我进行了一些加工,不是本人原创但比原博主要更完善~ 浅谈Java异常 以前虽然知道一 ...

  9. 浅谈SQL注入风险 - 一个Login拿下Server

    前两天,带着学生们学习了简单的ASP.NET MVC,通过ADO.NET方式连接数据库,实现增删改查. 可能有一部分学生提前预习过,在我写登录SQL的时候,他们鄙视我说:“老师你这SQL有注入,随便都 ...

随机推荐

  1. Gym 100090M Jumping along the Hummocks

    题意: 从 前往后跳,要么跳一步,跳到相邻的位置,要么跳到下一个数字相同的位置,求跳到最后的最少步数. dp,但是会tle,我用map优化了一下. #include <bits/stdc++.h ...

  2. CORS跨域限制以及预请求验证

    之前我们可以通过“Access-Control-Allow-Origin”,实现跨域请求,那是不是所有跨域请求都可以通过设置Access-Control-Allow-Origin实现跨域请求呢?显然不 ...

  3. centos6.5下编译安装FFmpeg

    以下安装步骤基本来自官网,做个笔记以方便自己以后查看 http://trac.ffmpeg.org/wiki/CompilationGuide 1.安装依赖包 <span style=" ...

  4. 注解@Component,@Controller,@Service,@Repository简单了解

    Spring 自 2.0 版本开始,陆续引入了一些注解用于简化 Spring 的开发.@Repository注解便属于最先引入的一批,它用于将数据访问层 (DAO 层 ) 的类标识为 Spring B ...

  5. phpMyAdmin提示找不到mcrypt和mbstring模块

    yum install php-mcryptyum install php-mbstringphp -m 查看是否安装成功 service httpd restart 重启服务器 注: 这里可能会出现 ...

  6. vue-wechat-title

    html中的title安装:npm install vue-wechat-title --save1.在mian.js中//网页titleimport VueTitle from 'vue-wecha ...

  7. BZOJ3288: Mato矩阵(欧拉函数 高斯消元)

    Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 386  Solved: 296[Submit][Status][Discuss] Descriptio ...

  8. leetcode笔记(二)94. Binary Tree Inorder Traversal

    题目描述 (原题目链接) Given a binary tree, return the inorder traversal of its nodes' values. For example:Giv ...

  9. 【赛时总结】 ◇赛时·IV◇ CODE FESTIVAL 2017 Final

    ◇赛时-IV◇ CODE FESTIVAL 2017 Final □唠叨□ ①--浓浓的 Festival 气氛 ②看到这个比赛比较特别,我就看了一看--看到粉粉的界面突然开心,所以就做了一下 `(* ...

  10. What is EJB

    What is EJB 0.什么是EJB? 答:EJB是用于构建企业应用程序模块托管的.服务器端组件架构.EJB技术加速并简化了开发基于Java技术的分布式.事务性.安全和便携的应用程序. 先看一下E ...