java学习之路--static,this,代码块,内存的划分等--java实战经典第五章
来源:互联网 发布:hadoop2.6 windows 编辑:程序博客网 时间:2024/06/14 04:09
7.引用传递:指堆内存空间的使用权交给多个栈内存空间
8.this关键字(重点,必须百分百掌握)
this 的作用有以下三点:
(1):表示类中属性
(2):可以使用this来调用类的构造方法
(3):this可以代表当前对象
代码:
public class SZJDTest4 {
private String name;
private String password;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
这里的this就是代表类中属性
public class SZJDTest4 {
private String name;
private String password;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public SZJDTest4(String password) {
this.password = password;
}
public SZJDTest4(String name, String password) {
this(password);
this.name = name;
}
}
构造方法中的this就是代表可以调用构造方法,这里调用的是哪个只有password的构造方法。
注意:在调用构造方法的时候,this必须放在第一行。 还有就是在调用构造方法的时候一定要留一个出口,不用所有的构造方法都调用this
public class SZJDTest4 {
public String getInfo(){
System.out.println(this);
return null;
}
public static void main(String[] args) {
SZJDTest4 szjdTest4=new SZJDTest4();
System.out.println(szjdTest4);
System.out.println("看看是否一样");
szjdTest4.getInfo();
}
结果:
test.SZJDTest4@128f6ee
看看是否一样
test.SZJDTest4@128f6ee
9.比较两个对象是否相等,首先要比较地址是否一样,如果一样,这一定相等,如果不一样就要一个一个属性的比较。
10. static关键字
属性别创建就是在栈内存和堆内存开辟空间,而堆内存用来存储属性。如果现在有些属性需要被所有人共享,就必须声明为static属性。方法也一样。
static声明的属性也叫全局属性(静态属性)
看下代码,就知道了
public class SZJDTest4 {
int age;
String name;
String country="成都";
public SZJDTest4(int age, String name) {//构造方法用来赋值
this.age = age;//this属性用来指定是类属性
this.name = name;
}
public void info(){
System.out.println("姓名:"+this.name+" 年龄:"+this.age+" 城市:"+country);
}
public static void main(String[] args) {
SZJDTest4 szjdTest4=new SZJDTest4(50, "张三");
SZJDTest4 szjdTest=new SZJDTest4(55, "王五");
SZJDTest4 szjdTest1=new SZJDTest4(58, "李四");
szjdTest4.info();
szjdTest1.info();
szjdTest.info();
}
}
结果:
姓名:张三 年龄:50 城市:成都
姓名:李四 年龄:58 城市:成都
姓名:王五 年龄:55 城市:成都
上面的代码为了简单没有进行封装,也没用三个属性的构造方法,这里就是为了说明如果是三个属性的构造方法,我修改一个城市属性,是不是要把每个实例都要修改,这显然是不行的,所以这里就要用static属性
public class SZJDTest4 {
int age;
String name;
static String country="成都";
public SZJDTest4(int age, String name) {//构造方法用来赋值
this.age = age;//this属性用来指定是类属性
this.name = name;
}
public void info(){
System.out.println("姓名:"+this.name+" 年龄:"+this.age+" 城市:"+country);
}
public static void main(String[] args) {
SZJDTest4 szjdTest4=new SZJDTest4(50, "张三");
SZJDTest4 szjdTest=new SZJDTest4(55, "王五");
SZJDTest4 szjdTest1=new SZJDTest4(58, "李四");
SZJDTest4.country="上海";
szjdTest4.info();
szjdTest1.info();
szjdTest.info();
}
}
结果:
姓名:张三 年龄:50 城市:上海
姓名:李四 年龄:58 城市:上海
姓名:王五 年龄:55 城市:上海
这里只需要用类来修改一下就OK了,最好不要用属性来调用
这里补充一点知识:内存区域的划分:
内存区域一般可以划分为四个区域:
(1)栈内存空间:保存所有对象的名称(更形象的说是保存了引用堆内存的空间地址)
(2)堆内存空间:保存没个对象属性的具体内容
(3)全局数据区:保存static类型的数据
(4)全局代码区:保存所有的方法定义
补充说明:非static的方法可以去调用static的方法或者属性,但是static声明的发放不能去调用非static的方法或者属性,你想一下就是,不是全局属性的可以去调用全局属性,这个很好理解三,但是全局属性能掉不是全局属性的属性吗?不能。还可以这样理解,所有的属性,方法,必须在对象在堆内存中开辟了空间才能调用(除了static的属性和方法),然而static的方法可以不实例化,直接被类调用
11.代码块:
代码块可以分为四类:普通代码块,静态代码块,同步代码块,构造块
public class SZJDTest4 {
//定义构造块
{
System.out.println("构造块");
}
static{
System.out.println("定义静态块");
}
public SZJDTest4(){
System.out.println("定义构造方法");
}
public static void main(String[] args) {
new SZJDTest4();
new SZJDTest4();
new SZJDTest4();
}
}
结果:
定义静态块
构造块
定义构造方法
构造块
定义构造方法
构造块
定义构造方法
说明:最先加载的是静态代码块,再是构造块,再是构造方法。而且静态代码块指在程序运行的时候加载一次
8.this关键字(重点,必须百分百掌握)
this 的作用有以下三点:
(1):表示类中属性
(2):可以使用this来调用类的构造方法
(3):this可以代表当前对象
代码:
public class SZJDTest4 {
private String name;
private String password;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
这里的this就是代表类中属性
public class SZJDTest4 {
private String name;
private String password;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public SZJDTest4(String password) {
this.password = password;
}
public SZJDTest4(String name, String password) {
this(password);
this.name = name;
}
}
构造方法中的this就是代表可以调用构造方法,这里调用的是哪个只有password的构造方法。
注意:在调用构造方法的时候,this必须放在第一行。 还有就是在调用构造方法的时候一定要留一个出口,不用所有的构造方法都调用this
public class SZJDTest4 {
public String getInfo(){
System.out.println(this);
return null;
}
public static void main(String[] args) {
SZJDTest4 szjdTest4=new SZJDTest4();
System.out.println(szjdTest4);
System.out.println("看看是否一样");
szjdTest4.getInfo();
}
结果:
test.SZJDTest4@128f6ee
看看是否一样
test.SZJDTest4@128f6ee
9.比较两个对象是否相等,首先要比较地址是否一样,如果一样,这一定相等,如果不一样就要一个一个属性的比较。
10. static关键字
属性别创建就是在栈内存和堆内存开辟空间,而堆内存用来存储属性。如果现在有些属性需要被所有人共享,就必须声明为static属性。方法也一样。
static声明的属性也叫全局属性(静态属性)
看下代码,就知道了
public class SZJDTest4 {
int age;
String name;
String country="成都";
public SZJDTest4(int age, String name) {//构造方法用来赋值
this.age = age;//this属性用来指定是类属性
this.name = name;
}
public void info(){
System.out.println("姓名:"+this.name+" 年龄:"+this.age+" 城市:"+country);
}
public static void main(String[] args) {
SZJDTest4 szjdTest4=new SZJDTest4(50, "张三");
SZJDTest4 szjdTest=new SZJDTest4(55, "王五");
SZJDTest4 szjdTest1=new SZJDTest4(58, "李四");
szjdTest4.info();
szjdTest1.info();
szjdTest.info();
}
}
结果:
姓名:张三 年龄:50 城市:成都
姓名:李四 年龄:58 城市:成都
姓名:王五 年龄:55 城市:成都
上面的代码为了简单没有进行封装,也没用三个属性的构造方法,这里就是为了说明如果是三个属性的构造方法,我修改一个城市属性,是不是要把每个实例都要修改,这显然是不行的,所以这里就要用static属性
public class SZJDTest4 {
int age;
String name;
static String country="成都";
public SZJDTest4(int age, String name) {//构造方法用来赋值
this.age = age;//this属性用来指定是类属性
this.name = name;
}
public void info(){
System.out.println("姓名:"+this.name+" 年龄:"+this.age+" 城市:"+country);
}
public static void main(String[] args) {
SZJDTest4 szjdTest4=new SZJDTest4(50, "张三");
SZJDTest4 szjdTest=new SZJDTest4(55, "王五");
SZJDTest4 szjdTest1=new SZJDTest4(58, "李四");
SZJDTest4.country="上海";
szjdTest4.info();
szjdTest1.info();
szjdTest.info();
}
}
结果:
姓名:张三 年龄:50 城市:上海
姓名:李四 年龄:58 城市:上海
姓名:王五 年龄:55 城市:上海
这里只需要用类来修改一下就OK了,最好不要用属性来调用
这里补充一点知识:内存区域的划分:
内存区域一般可以划分为四个区域:
(1)栈内存空间:保存所有对象的名称(更形象的说是保存了引用堆内存的空间地址)
(2)堆内存空间:保存没个对象属性的具体内容
(3)全局数据区:保存static类型的数据
(4)全局代码区:保存所有的方法定义
补充说明:非static的方法可以去调用static的方法或者属性,但是static声明的发放不能去调用非static的方法或者属性,你想一下就是,不是全局属性的可以去调用全局属性,这个很好理解三,但是全局属性能掉不是全局属性的属性吗?不能。还可以这样理解,所有的属性,方法,必须在对象在堆内存中开辟了空间才能调用(除了static的属性和方法),然而static的方法可以不实例化,直接被类调用
11.代码块:
代码块可以分为四类:普通代码块,静态代码块,同步代码块,构造块
public class SZJDTest4 {
//定义构造块
{
System.out.println("构造块");
}
static{
System.out.println("定义静态块");
}
public SZJDTest4(){
System.out.println("定义构造方法");
}
public static void main(String[] args) {
new SZJDTest4();
new SZJDTest4();
new SZJDTest4();
}
}
结果:
定义静态块
构造块
定义构造方法
构造块
定义构造方法
构造块
定义构造方法
说明:最先加载的是静态代码块,再是构造块,再是构造方法。而且静态代码块指在程序运行的时候加载一次
- java学习之路--static,this,代码块,内存的划分等--java实战经典第五章
- java代码块的划分及作用
- java static代码块
- java Static 代码块
- 1 java类、构造函数、代码块、this、static关键字
- JAVA的类 this static 等功能
- java的static代码块的理解
- 《Java实战开发经典》第五章5.1
- 《Java实战开发经典》第五章5.2
- 《Java实战开发经典》第五章5.3
- 《Java实战开发经典》第五章5.4
- 《Java实战开发经典》第五章5.5
- 《Java实战开发经典》第五章5.6
- 《Java实战开发经典》第五章5.7
- 《Java实战开发经典》第五章5.8
- java static 代码块的应用
- java static 代码块的应用
- java 理解static代码块的作用
- java学习笔记(一)
- Cocos2d-x 让飞机随着触摸移动起来
- 10个不为人知的Linux命令
- 通过 alter system dump logfile语句dump REDO及归档日志信息示例
- sql2008安装完成之后,无法启动
- java学习之路--static,this,代码块,内存的划分等--java实战经典第五章
- 11 个很少人知道但很有用的 Linux 命令
- 严版数据结构 第29页 单链表 C++实现
- 如何快速取得一个二进制状态的所有子状态
- 第十二周 小学生计算能力测试
- cocos2d-x2.2以上版本 安装步骤
- 动态规划,Dijkstra算法,A*算法的比较
- uva 10487 Closest Sums
- 【51】 4x4按键 code