在最近看书的过程中,常常遇到static、final、this这三个关键字,不是很明白它们的使用,查阅资料结合实例做了如下总结:

一、static——无需创建对象就可以调用(方法、属性)。

1.静态变量:static修饰的属性,称为类属性,即全局变量。前面已经有提及。

(1).静态变量可以使用类名直接访问,也可以使用对象名进行访问。

 class Number
{
int a;
static int b;
}
public class T01
{
public static void main(String[] args)
{
Number.a=5;//错误的
Number.b=6;//正确的,b是static修饰的静态变量可以直接用类名调用
}
}

(2).static不允许修饰局部变量:

 public static void max(int a,int b)
{
static int result;//Java中不被允许
}

(3).非静态和静态方法中均可以访问static变量。

2.静态方法:static修饰的方法,称为类方法。

(1).静态方法中可以调用类中的静态变量,但不能调用非静态变量。

 class Number
{
int a;
static int b;
public static void max(int c,int d)
{
int result;
result=a+b;//a是非静态变量不能被静态方法直接调用 }
}

那么如何在静态方法中调用非静态变量呢?

 class Number
{
int a;
static int b;
public static void max()
{
int result;
Number num = new Number();
num.a=5;
result=num.a+b;//借助对象调用非静态变量a
System.out.println(result);
}
} public class T01
{
public static void main(String[] args)
{
Number.b=6;
Number.max();
}
}

(2).static方法没有this—不依附于任何对象。

 class Person
{
static String name;
static int age;
public static void print(String n,int a)
{
this.name=n;//错误的,静态方法中无法使用this
age=a;
}
}

3.静态初始化块—类加载时执行,且只会执行一次,只能给静态变量赋值,不能接受任何参数。

 class Number
{
static int a;
static int b;
public static void print()
{
int result;
result=a+b;
System.out.println(result);
}
static//static语句块用于初始化static变量,是最先运行的语句块
12 {
13 a=5;
14 b=8;
15 }
}
public class T01
{
public static void main(String[] args)
{
Number.print();
}
}

因为static语句块只会在类加载时执行一次的特性,经常用来优化程序性能。

二、final关键字——“只读”修饰符
1.final和static一起使用,声明一个常量。
public static final int Age=10;//常量名大写
final成员变量必须在声明的时候初始化或在构造方法中初始化,不能再次赋值。
final局部变量必须在声明时赋值。
2.final方法,这个方法不可以被子类方法重写。

 class Person
{
public final String getName
{
return name;
}
}

3.final类,这种类无法被继承。

final class Person
{
}

4.final类不可能是abstract的。
5.final和static一样,合理的使用都可以提高程序性能。

三、this关键字——代表当前对象,封装对象属性

1.使用this调用本类中的成员变量。

public void setName(String name)
{
this.name=name;//类似于指针的作用
}

2.当成员变量和方法中的局部变量名字相同时,使用this调用成员变量。

3.this在方法内部调用本类中的其他方法。

 class Person
{
int age;
public void setAge(int age)
{
this.age=age;
this.print();//调用本类中的print()方法
}
public int getAge()
{
return age;
}
public void print()
{
System.out.println("我今年是:"+age+"岁");
}
}
public class T01
{
public static void main(String[] args)
{
Person p = new Person();
p.setAge(12);
}
}

4.this在方法中调用类的构造函数,必须位于第一行。

this(12,"Mary");//位于第一行

5.System.out.println(this);//输出对象的地址

以上的内容简单的概括了static、final、this这三个关键字的大概使用,在今后的学习中会再次进行补充。

至于super关键字将会在接下来的继承中介绍。

简单总结static、final、this关键字的使用的更多相关文章

  1. 【Java关键字-Interface】为什么Interface中的变量只能是 public static final

    三个关键字在接口中的存在原因:public:接口可以被其他接口继承,也可以被类实现,类与接口.接口与接口可能会形成多层级关系,采用public可以满足变量的访问范围: static:如果变量不是sta ...

  2. final,static,this,super 关键字总结

    一.final 关键字 final关键字主要用在三个地方:变量.方法.类. 1.对于一个final变量,如果是基本数据类型的变量,则其数值一旦在初始化之后便不能更改:如果是引用类型的变量,则在对其初始 ...

  3. Java 关键字static final使用总结

    Static表示“全局”或者“静态”的意思,用来修饰成员变量和成员方法,也可以形成静态static代码块,被static修饰的成员变量和成员方法独立于该类的任何对象.也就是说,它不依赖类特定的实例,被 ...

  4. [JAVA关键字] static & final

    JAVA十分常见的关键字static & final 总的来说final表示常量,即不可更改的:而static表示静态,即全局的 1. final 类:不能被继承 2. final 方法:能被 ...

  5. java中 static,final,transient,volatile关键字的作用

    static 和final static  静态修饰关键字,可以修饰 变量,程序块,类的方法: 当你定义一个static的变量的时候jvm会将将其分配在内存堆上,所有程序对它的引用都会指向这一个地址而 ...

  6. java面试官:兄弟简单谈谈Static、final、Static final各种用法吧

    前言 对Static.final.Static final这几个关键词熟悉又陌生?想说却又不知怎么准确说出口?好的,本篇博客文章将简短概要出他们之间的各自的使用,希望各位要是被你的面试官问到了,也能从 ...

  7. 关键字——this,super,static,final

    this 理解为当前对象. //测试 public static void main(String[] args){ Person person = new Person(3, "xiaoM ...

  8. static final 内部类

    1 static关键字 1.1 static关键字概述类中的属性和方法都是通过创建本类对象调用的,当在调用对象的某个方法时,这个方法没有访问到对象的特有数据时,方法创建这个对象有些多余,可是不创建对象 ...

  9. private static final long serialVersionUID = 1L;

    作者:郭无心链接:https://www.zhihu.com/question/24852886/answer/117314768来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注 ...

随机推荐

  1. JavaScript 函数 伪数组 arguments

    一.函数 函数:函数就是将一些语言进行封装,然后通过调用的形式,执行这些语句. 函数的作用: 1.将大量重复的语句写在函数里,以后需要这些语句的时候,可以直接调用函数,避免重复劳动 2.简化编程,让变 ...

  2. JQuery 动态创建表单,并自动提交

    前言:写这个是为了实现使用cookie进行自动登录的功能, 下面的代码是一个元素一个元素进行创建和赋值的, (可以尝试下将所有的html代码(form.input)全部拼好以后放到${ } 中,再进行 ...

  3. 删除git上已经提交的文件

    1.先查看有哪些文件可以删除,但是不真执行删除 git rm -r -n job-executor-common/target/* -r  递归移除目录 -n 加上这个参数,执行命令时,是不会删除任何 ...

  4. kipmi0进程单核CPU100%的解决办法

    top查看服务器进程,发现有个kipmi0的进程竟然CPU的单核占用高达100%,而且居高不下. 于是上网搜了搜大家的说法了给出的链接,大概意思是一个固件问题,可以通过修改文件来解决. 专业的解释地址 ...

  5. BZOJ 1060: [ZJOI2007]时态同步 树上问题 + 贪心

    Description 小Q在电子工艺实习课上学习焊接电路板.一块电路板由若干个元件组成,我们不妨称之为节点,并将其用数 字1,2,3….进行标号.电路板的各个节点由若干不相交的导线相连接,且对于电路 ...

  6. 11.7 【Linq】在查询表达式和点标记之间作出选择

    11.7.1 需要使用点标记的操作 最明显的必须使用点标记的情形是调用 Reverse . ToDictionary 这类没有相应的查询表达式语法的方法.然而即使查询表达式支持你要使用的查询操作符,也 ...

  7. python之testlink模块

    1.安装:pip install TestLink-API-Python-client >>>>>>待续

  8. 洛谷P1443 马的遍历【BFS】

    题目描述 有一个n*m的棋盘(1<n,m<=400),在某个点上有一个马,要求你计算出马到达棋盘上任意一个点最少要走几步 输入输出格式 输入格式: 一行四个数据,棋盘的大小和马的坐标 输出 ...

  9. [jzoj 5770]【2018提高组模拟A组8.6】可爱精灵宝贝 (区间dp)

    传送门 Description Branimirko是一个对可爱精灵宝贝十分痴迷的玩家.最近,他闲得没事组织了一场捉精灵的游戏.游戏在一条街道上举行,街道上一侧有一排房子,从左到右房子标号由1到n. ...

  10. poj 2763(LCA + dfs序 +树状数组)

    算是模板题了 可以用dfs序维护点到根的距离 注意些LCA的时候遇到MAXM,要-1 #include<cstdio> #include<algorithm> #include ...