Java封装——this、static关键字

简介: Java封装——this、static关键字

一、this关键字作用

第3和最后一个用的最多

在类的方法中,使用this代表的是调用此方法的对象的引用
//类中使用this,就调用了对象的name变量
void testThis(){

System.out.println(this.name);

}

Student stu3 = new Student(18,"xiaowei",99.9);
//stu3.introduce();
stu3.testThis();
/*
xiaowei
*/

this可以看做是一个变量,它的值是当前对象的引用
void testThis(){

Student stutmp = null;  //没有指向的变量
stutmp = this;            //把当前对象的变量赋给stutmp
System.out.println(stutmp.name);//直接使用
System.out.println(this.name);

}

Student stu3 = new Student(18,"xiaowei",99.9);
//stu3.introduce();
stu3.testThis();
/*
xiaowei
xiaowei
*/

使用this可以处理方法中的成员变量和形参同名问题
Student(int age, String name, double score){

System.out.println("构造方法三");
this.age = age;        //成员变量和形参同名age = age;
this.name = name;
this.score = score;

}

Student stu3 = new Student(18,"xiaowei",99.9);
stu3.introduce();
/*
age=18,name=xiaowei,score=99.9
*/

当在方法内需要用到调用到该方法的对象时,就可以this
和第一个一样
在类的构造方法中可以调用this(参数列表)来调用该类的指定构造方法
Student(){

System.out.println("构造方法一");

}
Student(int newage){

System.out.println("构造方法二");
age = newage;

}
Student(int age, String name, double score){

this();//只能调用一个,使用这个就不能使用shis(18);
System.out.println("构造方法三");
this.age = age;
this.name = name;
this.score = score;

}

Student stu3 = new Student(18,"xiaowei",99.9);

/*
构造方法一
构造方法三
*/

二、static关键字

static关键字,注意事项
1、静态方法中只能访问外部的静态成员
2、静态方法中不能出现this关键字(先于对象之前,this是对象的引用)

static void test(){
    System.err.println(name);        //静态方法只能访问静态成员
    System.out.println(this.age); //静态方法中不能出现this关键字
}

用来修饰类成员,修饰成员变量称为类变量(静态变量)
int age;
String name;
double score;
static int data; //类变量

Student stu3 = new Student(18,"xiaowei",99.9);
//Student.score = 10;
Student.data = 10; //类变量,可以通过类.变量名 访问变量
stu3.data = 10; //当然也可以使用对象.变量名 访问

修饰方法叫,类方法(静态方法)
public class Test {

//不加static的访问
public static void main(String[] args) {
    Test s1 = new Test();
    System.out.println("ret = " + s1.add(1,3));
}
//加static 的访问方法
public static void main(String[] args) {
    System.out.println("ret = " + add(1,3));
}
//加上static  main就可以直接访问
static int add(int a, int b){
    return a+b;
}

}

/*
ret = 4
*/

当类被加载的时候就会被加载,优先于对象的存在
可以不依赖于对象进行访问(类变量,类方法)
用来修饰语句块——称为静态代码块,先于构造方法执行,只会执行一次,用来对静态成员做初始化
//静态代码块,与构造方法类似,都是初始化变量,只是这个是初始化静态变量
static{

System.out.println("静态代码块");
data = 110;

}

调用的时候可以直接通过类名.成员来访问
类名.成员

三、代码演示

this完整代码

class Student{//class 相当于c语言的struct

int age;
String name;
double score;

void testThis(){
    Student stutmp = null;
    stutmp = this;
    System.out.println(stutmp.name);
    System.out.println(this.name);
}

Student(){
    System.out.println("构造方法一");
}
Student(int newage){
    System.out.println("构造方法二");
    age = newage;
}
Student(int age, String name, double score){
    this();
    System.out.println("构造方法三");
    this.age = age;
    this.name = name;
    this.score = score;
}


void introduce(){
    System.out.println("age="+ age +",name=" + name + ",score=" + score);
}

}
public class Test {

public static void main(String[] args) {
    Student stu3 = new Student(18,"xiaowei",99.9);
    stu3.introduce();
    stu3.testThis();
}

}

/*
构造方法一
构造方法三
age=18,name=xiaowei,score=99.9
xiaowei
xiaowei
*/

static完整代码

class Student{//class 相当于c语言的struct

int age;
String name;
double score;
static int data;

Student(int age, String name, double score){
    System.out.println("构造方法三");
    this.age = age;
    this.name = name;
    this.score = score;
}

static{
    System.out.println("静态代码块");
    data = 110;
}

// static void test(){
// System.err.println(name); //静态方法只能访问静态成员
// System.out.println(this.age); //静态方法中不能出现this关键字
// }

void introduce(){
    System.out.println("age="+ age +",name=" + name + ",score=" + score);
}

}
public class Test {

public static void main(String[] args) {
    Student stu2 = new Student(18,"xiaowei",99.9);
    Student stu3 = new Student(18,"xiaowei",99.9);
    Student.data = 10;
    
    System.out.println("ret = " + add(1,3));
}

static int add(int a, int b){
    return a+b;
}

}

目录
相关文章
|
16天前
|
Java
Java基础—笔记—static篇
`static`关键字用于声明静态变量和方法,在类加载时初始化,只有一份共享内存。静态变量可通过类名或对象访问,但推荐使用类名。静态方法无`this`,不能访问实例成员,常用于工具类。静态代码块在类加载时执行一次,用于初始化静态成员。
10 0
|
21天前
|
安全 Java 数据安全/隐私保护
|
21天前
|
搜索推荐 Java
Java的面向对象特性主要包括封装、继承和多态
【4月更文挑战第5天】Java的面向对象特性主要包括封装、继承和多态
15 3
|
20天前
|
设计模式 安全 Java
Java并发编程实战:使用synchronized关键字实现线程安全
【4月更文挑战第6天】Java中的`synchronized`关键字用于处理多线程并发,确保共享资源的线程安全。它可以修饰方法或代码块,实现互斥访问。当用于方法时,锁定对象实例或类对象;用于代码块时,锁定指定对象。过度使用可能导致性能问题,应注意避免锁持有时间过长、死锁,并考虑使用`java.util.concurrent`包中的高级工具。正确理解和使用`synchronized`是编写线程安全程序的关键。
|
2天前
|
安全 Java 编译器
是时候来唠一唠synchronized关键字了,Java多线程的必问考点!
本文简要介绍了Java中的`synchronized`关键字,它是用于保证多线程环境下的同步,解决原子性、可见性和顺序性问题。从JDK1.6开始,synchronized进行了优化,性能得到提升,现在仍可在项目中使用。synchronized有三种用法:修饰实例方法、静态方法和代码块。文章还讨论了synchronized修饰代码块的锁对象、静态与非静态方法调用的互斥性,以及构造方法不能被同步修饰。此外,通过反汇编展示了`synchronized`在方法和代码块上的底层实现,涉及ObjectMonitor和monitorenter/monitorexit指令。
15 0
|
2天前
|
Java
两千字讲明白java中instanceof关键字的使用!
两千字讲明白java中instanceof关键字的使用!
11 0
|
3天前
|
Java 开发者
Java基础知识整理,注释、关键字、运算符
在日常的工作中,总会遇到很多大段的代码,逻辑复杂,看得人云山雾绕,这时候若能言简意赅的加上注释,会让阅读者豁然开朗,这就是注释的魅力!
37 11
|
7天前
|
安全 Java 开发者
Java并发编程:深入理解Synchronized关键字
【4月更文挑战第19天】 在Java多线程编程中,为了确保数据的一致性和线程安全,我们经常需要使用到同步机制。其中,`synchronized`关键字是最为常见的一种方式,它能够保证在同一时刻只有一个线程可以访问某个对象的特定代码段。本文将深入探讨`synchronized`关键字的原理、用法以及性能影响,并通过具体示例来展示如何在Java程序中有效地应用这一技术。
|
11天前
|
Java
Java关键字(1)
Java关键字(1)
|
28天前
|
Java
Java常用封装Base对象
Java常用封装Base对象
8 0