面向对象中的“小知识点”

static 关键字

好多文章已经把 static 说的很全面了,其实根据我目前的理解, static 的作用就是告诉系统,静态的东西在加载的时候就创建,存在于方法区的静态区,相应的作用就有:

  1. 随着类的加载而加载
  2. 优先于对象存在(对象要实例化)
  3. 被类的所有对象共享 (避免相同属性占用内存空间)
  4. 可以通过类名调用(不必先实例化,因为类加载的时候就存在了)
  5. 静态方法中没有 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 修饰的变量又称之为常量;

 

 

 

发表评论

Powered by WordPress | Theme Revised from Doo

苏ICP备18047621号

Copyright © 2017-2024 追光者博客