static 关键字
好多文章已经把 static 说的很全面了,其实根据我目前的理解, static 的作用就是告诉系统,静态的东西在加载的时候就创建,存在于方法区的静态区,相应的作用就有:
- 随着类的加载而加载
- 优先于对象存在(对象要实例化)
- 被类的所有对象共享 (避免相同属性占用内存空间)
- 可以通过类名调用(不必先实例化,因为类加载的时候就存在了)
- 静态方法中没有 this 关键字 (没有必要要 this 了)
1、2 是被 static 修饰的类或者变量的基本特性。3、4 是由基本特性扩展来的(或者说 static 的存在就是为了这样的目的)
比如有一个学生类:
class student { public string name; //这里暂不考虑使用 get、set 保证安全问题 public int age; public static string country; //静态类变量 public void speak() { Console.Write(name + age.ToString () + country); } }
然后在 main 方法中使用该类:
static void Main(string[] args) { student.country = "中国"; //通过类名直接就使用了 country 静态变量 //假如学生都是中国学生,就没必要每次都赋值,还占内存 student s1 = new student(); s1.name = "鲁迅"; s1.age = 18; s1.speak(); Console.ReadLine(); }
main 方法
public static void main(string[] args) {}
public :在 JAVA 中,只有用 public 修饰了 main 方法,JVM 才能找到 main 方法。C# 与之同理。
static :在 JAVA 中,JVM 没有创建对象的功能,所以 main 方法一开始就创建好,JVM 直接就用。C# 与之同理。
void : 在 JAVA 中,JVM 调用 main 方法,不需要返回值,有返回值 JVM 也用不上。C# 与之同理。
string[] args :固定格式,但是写成 string[] name 也行,主要是圆括号内要传入字符串。如果写成 public static void main() {} ,这样只会被当成一个普通方法,方法名为 main 而已。main 本身并不是关键字,这是约定俗成。string[] args 以前用于键盘录入,具体用法是在控制台运行相关的程序,运行的时候可以传入字符串,现在已经很少这么用了。
代码块
在 C# 中,代码块如下图所示,可以看到在接下来的代码中,编译器是不认识 “ID” 这个变量的,这个就是代码块的作用。
如果在接下来再次定义 “ID”,编译器仍旧报错。在 C# 中是这样的,但是在 JAVA 中,这样写编译是可以通过的,程序执行完代码块,就将里面的变量释放掉了,不影响后面的代码。
在 JAVA 中,这样写编译通过并且可以运行 。
构造代码块(静态构造函数)
JAVA 中用 {} 括起来,位置在于方法外、类内,被称为构造代码块,如下图所示,构造代码块先于构造函数运行。
C# 中,用 static 类名() {} 标识的部分,功能一样,被称为静态构造函数。如下所示,静态构造函数的消息会第一个弹出来,构造函数的消息第二个弹出来:
final 关键字
final 可以修饰类、方法、变量;
final 修饰的类不可以被继承;
final 修饰的方法不可以被重写;
final 修饰的变量又称之为常量;