java类的组成结构详解 目录 成员变量 方法 构造器 代码块 成员变量 成员变量便是在类中定义的变量. 例如这样: public class POP { int a = 1; } 而成员变量又分为两种,一种是被static所修饰的类变量,他归类所有,一种是没有被static修饰的实例变量,他归对象
目录
- 成员变量
- 方法
- 构造器
- 代码块
成员变量
成员变量便是在类中定义的变量。
例如这样:
public class POP {
int a = 1;
}
而成员变量又分为两种,一种是被static所修饰的类变量,他归类所有,一种是没有被static修饰的实例变量,他归对象所有。
如下:
public class POP {
int a = 1;
static int b = 1;
}
正如字面上的意思,归类所有的变量b,他能在类的外部,直接通过POP.b的形式进行操作。
如下程序:
public static void main(String[] args) {
POP.b++;
System.out.println(POP.b);
}
但是,在实际使用中,我们也可以通过对象.b的形式来调用他。
如下:
public static void main(String[] args) {
POP.b++;
System.out.println(POP.b);
System.out.println(new POP().b);
}
这是java很不好的一个缺陷,因为这个变量b,实际上是属于类的,虽然能用对象来调用,但不建议。
再理解一下这个变量b只有一份,如下程序:
public static void main(String[] args) {
POP.b++;
System.out.println(POP.b);
System.out.println(new POP().b++);
System.out.println(new POP().b++);
}
你会发现,尽管我使用不同的对象去对b进行操作,但是他们的操作却共同作用在了同一个b上,这也是我为什么不建议使用对象来调用类变量。
成员变量可以被四种权限修饰符修饰,以适应各种适用情形。
成员变量可以被final修饰,作为常量。
成员变量也可以被我上面提到的static修饰。
附上总代码:
public class POP {
public static void main(String[] args) {
POP.b++;
System.out.println(POP.b);
System.out.println(new POP().b++);
System.out.println(new POP().b++);
}
int a = 1;
static int b = 1;
}
方法
方法按照被static修饰分为实例方法以及类方法。
public void get(){
}
public static void did(){
}
需要注意的是,实例方法可以调用类变量,而类方法不可以调用实例变量,为什么呢?
我们可以思考一下,类方法是为类所有的,实例方法是由对象所有的。
类存在的时候,对象不一定被创建了,如果这时候通过类方法来调用实例变量,此实例变量不存在,因此,这是不可取的。
方法可以被四种权限修饰符修饰。
方法可以被static修饰。
方法可以被final修饰,表示不能被子类重写。
方法可以被abstract修饰,表示这为一个抽象方法,而只要有一个抽象方法,那该类就是一个抽象类。
关于抽象类的内容以后再谈。
构造器
构造器,用于创建对象。
可以被四种权限修饰符修饰。
protected POP(){
}
POP(int a){
}
我们可以通过this.POP(形参列表)的形式,来在构造器里面调用其他构造器,注意,这种方式,必须写在方法体的最上部分,并且,如果没有写this,那么java会默认用super来调用父类的空参构造器,这也是为什么我们建议设计程序的时候
总是留一个空参构造器。
那么,我们为什么要在一个构造器里面通过this调用另一个构造器呢?
因为这样能减少代码的重复,方便我们迭代升级。
另外注意,构造器是没有返回值的,当然你也可以说他的返回值就是他所创建的对象,不过我们不能显示的指明。
代码块
代码块分为实例代码块和类代码块。
{
System.out.println("实例代码块");
}
static{
System.out.println("类代码块");
}
类代码块属于类,在类的加载的时候就会执行,而实例代码块在对象的创建的时候会执行。
到此这篇关于java类的组成结构详解的文章就介绍到这了,更多相关java类组成结构内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!
本文标题为:java类的组成结构详解
基础教程推荐
- Java实现线程插队的示例代码 2022-09-03
- Java实现查找文件和替换文件内容 2023-04-06
- ConditionalOnProperty配置swagger不生效问题及解决 2023-01-02
- java基础知识之FileInputStream流的使用 2023-08-11
- Java并发编程进阶之线程控制篇 2023-03-07
- JDK数组阻塞队列源码深入分析总结 2023-04-18
- Java文件管理操作的知识点整理 2023-05-19
- Java数据结构之对象比较详解 2023-03-07
- java实现多人聊天系统 2023-05-19
- springboot自定义starter方法及注解实例 2023-03-31