类成员与实例成员
什么是类成员
- 使用static修饰的成员方法和成员变量称为类成员
- 使用static修饰的成员变量叫做类变量
- 使用static修饰的成员方法叫做类方法
什么是实例变量
- 未使用static修饰的成员方法和成员变量称为实例成员
- 未使用static修饰的成员变量叫做实例变量
- 未使用static修饰的成员方法叫做实例方法
代码示例
public class StaticTest { String name;//实例变量 static int num; //类变量 //实例方法 public void say(){ System.out.println("你好啊!!!"); } //类方法 public static void eat(){ System.out.println("你是一个吃货!!!"); } }
实例变量和类变量的区别
- 所有该类的对象共享同一个类变量,但是每个对象都会有自己独特的实例变量
- 所有该类的对象都能改变类变量的值,但是每个对象只能改变自己的实例变量值
- 实例变量在使用前必须创建一个对象,根据对象名.变量名使用,但是类变量不需要创建对象
代码示例
public class TestDemo { public static void main(String[] args) { //创建一个实例对象test1 StaticTest test1=new StaticTest(); //创建一个实例对象test2 StaticTest test2=new StaticTest(); //给test1对象的实例变量赋值 test1.name="张三"; //给test2对象的实例变量赋值 test2.name="李四"; //每个对象都有一个自己的实例变量值 System.out.println(test1.name); //输出 实例变量值 张三 System.out.println(test2.name); //输出 实例变量值 李四 //给类变量赋值 //方式1 test1.num=20; System.out.println(test1.num); System.out.println(test2.num); System.out.println(StaticTest.num); //类变量被所有该类的实例对象共同拥有 //方式2 //类变量也可以用类名.变量名直接调用 StaticTest.num=20; System.out.println(test1.num); System.out.println(test2.num); System.out.println(StaticTest.num); } }
类方法和实例方法的区别
- 所有该类对象共享类方法
- 类方法使用类名.方法名([参数])调用
- 实例方法使用对象名.方法名([参数])调用
public class TestMethodDemo { public static void main(String[] args) { StaticTest test1=new StaticTest(); test1.say(); StaticTest.eat(); } }
类成员和实成员的区别
- 实例成员和类成员的相互访问限制
- 实例方法可以直接访问实例变量和实例方法。
- 实例方法可以直接访问类变量和类方法。
- 类方法可以直接访问类变量和类方法。
- 类方法不能直接访问实例变量或实例方法,要访问它们必须使用对象引用。还有,类方法不能使用this关键字,因为没有this的实例可供使用。
static 关键字的其他使用
- 静态代码块是一个以static为前导的代码块,一般用于为类的工作做一些初始化工作,如初始化一些静态变量。
- 一个类中可以有许多静态初始化块,并且它们可以出现在类体的任何地方。运行时系统会保证静态初始化块会按照它们在源代码中出现的顺序被调用
包的使用
什么是包
包是Java用于提供访问保护和命名空间管理的方式,包就是用来将Java中类和接口等进行分类管理的工具,类似于操作系统中的目录
包的声明
- package 包名;
- 包名的前半部分一般使用倒置的域名,后半部分一般采用该包下类分类名(或者功能名),如:package com.sina.util;
- 包的声明必须是整个类文件可执行的第一行语句
代码示例
//声明包,声明包的语句必须在第一行 package com.tarzan.reptile.java; //导入Scanner类(同包下的类不需要导入,不同包下的类需要导入) import java.util.Scanner; public class UsePackageDemo { public static void main(String[] args) { Scanner scanner=new Scanner(System.in); } }
类的导入
- 一旦需要使用另外一个包中的类时,需要将该类导入到当前类中,如需要在程序中使用java.util包下的Scanner类,需要将给类先导入到使用的类中
- 类导入的语法
- import 包名.类名;
- 或者 import 包名.*;
访问修饰符
访问修饰符对成员变量和成员方法的访问限定
编辑