this关键字和static关键字
this关键字
普通方法中,this总是指向调用该方法的对象。
构造方法中,this总是指向正要初始化的对象。
this区分成员变量和全局变量的作用,在当前类中可以省略。
this的常用方法:
让类中的一个方法,访问该类的另一个属性或方法。
使用this关键字调用重载构造方法。避免相同的初始化代码,只能在构造方法中使用,并且必须位于构造方法的第一行。
并且this关键字不能与static共同使用。
示例:
public class Test{
int a,b,c;//全局变量
Test(){//无参构造
System.out.println("正要new一个对象");
}
Test(int a,int b){//有参构造
this();//调用无参构造要位于第一行
a=a;//这里指的是局部变量而不是成员变量
this.a=a;//这样就区分了成员变量和局部变量
this.b=b;
}
Test(int a,intb,int c){
this(a,b);//调用无参要位于第一行
this.c=c;
}
void sing(){}//方法
void chifan(){
this.sing//调用本类中的sing方法
System.out.println("回家吃饭");
}
public static void main(String[] args){
Test i=new Test(2,3);//创建对象并调用两个的有参构造方法
i.chifan;
}
}
}
static关键字:
在类中,用static声明的成员变量为静态成员变量(类属性,类变量)从属于类,代表整个类的属性,为该类所有对象共享。
对于该类的所有对象来说,static成员变量只有一份,所以被该类所有对象共享。
可以使用对象.属性调用,不过一般使用,类名的属性名。
用static声明的方法为静态方法
1.不需要对象,就可以调用(类名.方法名)
2.静态方法中不能使用this关键字(this必须优先创建对象)
3.在静态方法中无法访问非静态成员变量,反之可以。(内存中分配空间时间不一样)
示例:
public class TestP{
int a;//成员变量
static int width;//静态成员变量
static void gg(){//静态成员方法
System.out.println("gg");
}
void tt(){//普通方法
System.out.println("tt");
}
public static void main(Strin [] args){
Test hi=new Test();
Test.width=2;
Test.gg;
h.gg;//通过引用也可以访问static变量或方法,不过一般使用类名。static成员名来访问。
gg();
}
}
静态成员变量(类变量)和成员变量的区别?
1.内存中保存的位置不同,成员变量保存在堆中,静态成员变量在方法区中
2.内存中保存份数不同,成员变量是每个对象一份,类变量是所有对象一份。
3.访问方式不同,成员变量:对象名.属性 stu.name="张三";类变量:类名.属性Test.name="李四";
4.在内存中分配的时间不同:成员变量:在创建对象时。 类变量:在第一次加载类的时将数据保存到方法区中分配空间。
使用static修饰代码块: 创建对象之前会被执行并按先后顺序。
格式: {
//代码
}
类变量代码块:使用static修饰,先于代码块和构造方法执行,并只执行一次
格式:static {
//代码
}
使用场景:在创建对象之前只做一次对象初始化或在创建对象之前执行某段通用代码。
静态代码---->代码块---->构造器---->方法 (先后顺序)
this关键字和static关键字的更多相关文章
- abstract关键字、final关键字、static关键字、访问修饰符详解
abstract关键字.final关键字.static关键字.访问修饰符详解 abstract关键字: final关键字: static关键字: 访问修饰符:
- 094 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 03 # 088 01 Android 零基础入门 02 Java面向对象 02 Java封装 02 static关键字 04 static关键字(续)
094 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 03 # 088 01 Android 零基础入门 02 Java面向对象 02 Java封装 ...
- 093 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 03 # 088 01 Android 零基础入门 02 Java面向对象 02 Java封装 02 static关键字 03 static关键字(下)
093 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 03 # 088 01 Android 零基础入门 02 Java面向对象 02 Java封装 ...
- 092 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 03 # 088 01 Android 零基础入门 02 Java面向对象 02 Java封装 02 static关键字 02 static关键字(中)
092 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 03 # 088 01 Android 零基础入门 02 Java面向对象 02 Java封装 ...
- 091 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 03 # 088 01 Android 零基础入门 02 Java面向对象 02 Java封装 02 static关键字 01 static关键字(上)
091 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 03 # 088 01 Android 零基础入门 02 Java面向对象 02 Java封装 ...
- PHP的final关键字、static关键字、const关键字
在PHP5中新增加了final关键字,它可以加载类或类中方法前.但不能使用final标识成员属性,虽然final有常量的意思,但在php中定义常量是使用define()函数来完成的. final关键字 ...
- java中this关键字和static关键字和super关键字的用法
this关键字 1. this 关键字是类内部当中对自己的一个引用,可以方便类中方法访问自己的属性: 2.可以返回对象的自己这个类的引用,同时还可以在一个构造函数当中调用另一个构造函数(这里面上面有个 ...
- 构造方法,this关键字,static关键字,封装,静态变量
1.构造方法 构造方法是一种特殊的方法,是专门用于创建/实例化对象的方法. 构造方法根据是否有参数分为两类:1.无参构造方法 2.有参构造方法 1.1无参构造方法 无参构造方法就是构造方法中没有参数 ...
- Java基础super关键字、final关键字、static关键字、匿名对象整理
super关键字 10.1子父类中构造方法的调用 public class Test { public static void main(String[] args) { new Zi(); } } ...
- 构造方法,this关键字,static关键字,封装
1.构造方法 定义:构造方法是指实例化对象的方法 语法:[修饰符] 类名(参数){ } 根据有无参数分为有参构造和无参构造 1)有参构造 语法:[修饰符] 类名(type 实例变量,int ...
随机推荐
- Gitlab应用——系统管理
查看linux系统信息 查看日志 创建账号 选择regular,这是一个普通账号,点击“create user”账号创建完成 点击“User”,然后点击“New user”.使 ...
- Linux.vim编辑器显示行号
显示行号 :set number 取消显示行号:set nonumber
- 去除空白字符串trim
let str = ' foo ' //去除开头空格 console.log(str.trimLeft()) console.log(str.trimStart()) //去除尾部空格 console ...
- idea怎么关闭项目
原文地址:https://jingyan.baidu.com/article/a3a3f8112169e78da2eb8a8d.html idea关闭项目可以按File-CloseProject按钮实 ...
- 简单理解设计模式——享元模式-线程池-任务(tesk)
前面在写到多线程的文章的时候,一直想写一篇关于线程池等一系列的文章,做一下记录,本篇博客记录一下设计模式中享元模式的设计思想,以及使用享元模式的实现案例——线程池,以及线程池的简化版——任务(tesk ...
- Python经典算法-快速幂
快速幂 问题描述: 计算a ** n % b 其中a.b和n都是32位的非负整数 即求a的n次方对b的余数 问题示例: 例如:2**31%3=2 --- 代码实现如下 class Solution: ...
- IDEA | 更改idea打开新项目默认配置
背景 使用过idea的童鞋应该都发现,用idea打开一个新项目,总是需要重新配置一遍,它会使用系统默认配置,例如maven.JDK等设置. 解决方案 IDEA其实有个设置是可以更改新项目的默认配置,大 ...
- Python中heapq与优先队列【详细】
本文始发于个人公众号:TechFlow, 原创不易,求个关注 今天的文章来介绍Python当中一个蛮有用的库--heapq. heapq的全写是heap queue,是堆队列的意思.这里的堆和队列都是 ...
- ROS之服务
服务(service)是另一种在节点之间传递数据的方法,服务其实就是同步的跨进程函数调用,它能够让一个节点调用运行在另一个节点中的函数. 我们就像之前消息类型一样定义这个函数的输入/输出.服务端(提供 ...
- OpenCV3入门(五)图像的阈值
1.图像阈值与二值化 阈值是一种简单的图像分割方法,一幅图像包括目标物体(前景).背景还有噪声,要想从数字图像中直接提取出目标物体,可以设定一个像素值即阈值,然后用图像的每一个像素点和阈值做比较,给出 ...