方便在没有创建对象的情况下来进行调用(方法/变量)。
很显然,被static关键字修饰的方法或者变量不需要依赖于对象来进行访问,只要类被加载了,就可以通过类名去进行访问。static可以用来修饰类的成员方法、类的成员变量,另外可以编写static代码块来优化程序性能。
- public String name;
-
- public static int age;
- Student s=new Student();
- s.name="张三";
- s.age=12;
-
- Student s1=new Student();
- s1.name="李四";
- s1.age=15;
-
- System.out.println(s.name+"今年"+s.age+"岁了");
- System.out.println(s1.name+"今年"+s1.age+"岁了");

注:当成员变量为静态变量时,那么它的值是存储在内存的静态区中,所以赋值时会变成一个值。
2.static修饰的方法:static的另一个作用,就是修饰成员方法。static修饰成员方法最大的作用,就是可以使用"类名.方法名"的方式操作方法,避免了先要new出对象的繁琐和资源消耗,我们可能会经常在帮助类或工具类中看到它的使用。
- public static void say() {
- System.out.println("我是一名学生");
- }
Student.say();

注:当方法为静态方法时,那么它可以直接使用类名获取方法,main方法是我们常见的静态方法。
在 Java 语言中允许在另外一个类中定义一个类,这样的类被称为嵌套类。包含嵌套类的类称为外部类,也可以叫做封闭类,在本文中统一叫做外部类。
- //学生类
- public class Student {
-
- //优等生类
- class kind{
-
- }
-
- }
嵌套类分为两类:
- //学生类
- public class Student {
-
- public String name;
- public static int age;
- //优等生类
- static class kind{
- String techang;
- }
- //普通生类
- class weak{
- String youdian;
- }
-
- }
- Student.kind k=new Student.kind();
- k.techang="唱歌";
- System.out.println(k.techang);
嵌套类是它的外部类的成员,非静态嵌套类(内部类)可以访问外部类的其他成员,即使该成员是私有的。而静态嵌套类只能访问外部类的静态成员。
嵌套类作为外部类的一个成员,可以被声明为:private,public,protected或者包范围(注意:外部类只能被声明为public或者包范围)。
嵌套类特点:
1、静态嵌套类
静态嵌套类其实就是在顶级类中封装的一个顶级类,它的行为和顶级类一样,它被封装在顶级类中其实就是为了方便打包。
- //学生类
- public class Student {
-
- public String name;
- public static int age=12;
- //优等生类
- static class kind{
- String techang;
- static void say() {
- System.out.println(age);
- }
- }
- //普通生类
- class weak{
- String youdian;
- }
-
- }
Student.kind.say();
2、非静态嵌套类
非静态嵌套类也就是内部类,它有以下几个特点:
成员内部类:
在外部类中并且在外部类的方法外创建的非静态嵌套类,称为成员内部类。说白了成员内部类就是外部类的一个非静态成员而已。
创建成员内部类的实例,你必须先实例化一个外部类,接着,通过外部类的实例来创建成员内部类的实例。因此成员内部类的实例必须存在于一个外部类的实例中。另外,由于内部类的实例与外部类的实例相关联,因此它不能定义任何静态成员。
局部内部类:
局部内部类(Local inner class)通常定义在一个块中。所以通常你会在一个方法块中找到局部内部类。正如局部变量那样,局部内部类的作用域受到方法的限制。它可以访问外部类的所有成员,和它所在的局部方法中所有局部变量。如果你想调用局部内部类中的方法,你必须先在局部方法中实例化局部内部类。
局部内部类限制:
匿名内部类:
匿名内部类,可以理解为不需要声明类的对象,直接使用类的内容。
在使用匿名内部类的过程中,我们需要注意如下几点: