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 ...
随机推荐
- 8.Java的特性和优势
简单性:可以说Java是C++语法的纯净版,没有头文件,没有指针运算,也不用分配内存. 面向对象:是一种程序设计技术,它将重点放在对象以及对象的接口上,模拟人的思维写程序,所以人去学习非常快.因此,J ...
- Java语法进阶16-Lambda-Stream-Optional
Lambda 大年初二,大门不出二门不迈.继续学习! 函数式接口 Lambda表达式其实就是实现SAM接口的语法糖,所谓SAM接口就是Single Abstract Method,即该接口中只有一个抽 ...
- Jenkins配置安装
一.安装 [root@localhost ~]# wget -O /etc/yum.repos.d/jenkins.repo http://pkg.jenkins.io/redhat-stable/j ...
- GP工作室—系统设计
团队作业第二次作业--系统设计 问题 答案 这个作业属于哪个课程 软件工程 这个作业要求在哪里 作业要求 团队名称 GP工作室 这个作业的目标 对项目软件进行更为详细的系统性设计 按照本游戏的设计要求 ...
- THU的告诫
究其原因,还是自己只会OI了.要成为一个合格的选手,是方方面面各个地方都要看的,同时也要自己去实现.快速实现.清晰实现.运行成功. 尤其是各种平时用的东西,不要只会技,还要研其道. 再次警醒,各位同我 ...
- ios--->instrument的leaks来检查内存泄漏
instrument来检查内存泄漏 1.第一步打开 或者: 然后选择leaks 2.若此时编译出现如下问题,可能是非debug版本造成的,切换成debug版本即可 打开工程的Edit Scheme选项 ...
- obj2gltf安装详细教程
在线转换地址:http://52.4.31.236/convertmodel.html 在使用cesium的过程中需要使用到gltf模型,官方推荐使用obj2gltf插件将obj模型转换成gltf格式 ...
- nmap详解之基础概述
概述 nmap是一个网络探测和安全扫描程序,系统管理者和个人可以使用这个软件扫描大型的网络,获取那台主机正在运行以及提供什么服务等信息.nmap支持很多扫描技术,例如:UDP.TCP connect( ...
- acwing 243. 一个简单的整数问题2 树状数组 线段树
地址 https://www.acwing.com/problem/content/description/244/ 给定一个长度为N的数列A,以及M条指令,每条指令可能是以下两种之一: 1.“C l ...
- CodeBlocks 断点调试
启动调试器 1. 一般,调试器的按钮可以在工具栏找到 如果没有,可以从view菜单项中调出 2. 设置断点 使用调试器时需要让程序在需要的位置中断,在启动调试器前设置断点如下,鼠标点击编辑器的左边即可 ...