这篇文章转载自我的个人博客
正文之前
在刚开始学Java的时候,相信大多数的同学都有遇到过一些容易直接跳过的知识,比如:
—— main 函数的参数String[] args
—— static 究竟是什么意思
—— Error 和 Exception的区别
正文
1. String args[]
在我刚开始学Java的时候,也直接忽略了这个参数,只知道它是运行Java必要的,后来想起来还是要去弄明白,就去查了查资料学了一下
其实,这个参数是从命令行运行时需要的参数,用数组来存放参数
我们来做个小实验:
首先,我在桌面建立一个 Test.java 文件
然后打开命令行,进入到桌面,先编译java文件
然后得到编译完成的 .class 文件
最后运行 .class 文件,自定义几个参数就行:
得到了我们想要的结果
在平常写小程序的时候用 IDEA 都意识不到这个参数的作用,用命令行运行时才需要用到这个知识点
2. static关键字
当声明一个事物是static时,就意味着这个域或方法不会与包含它的那个类的任何对象实例关联在一起 ——《Java编程思想》
直接翻译 static 就是 “静态的”,这次说一说 static方法,static变量 和 static代码块的概念:
static 方法(静态方法)
- 能够在不创建对象的条件下使用某些方法
如果要使用某个类中的方法,则要先实例化,否则无法使用特定方法:
如果在不创建任何对象的前提下,使用 static 关键字就可以做到:
- 调用方法
静态方法能够通过类名直接来调用,也可以通过实例来引用
- 静态方法和非静态方法之间的调用
接下来,静态方法 play2() 方法尝试调用一个非静态方法,失败了,
非静态方法 sit2() 方法尝试调用一个静态方法,成功了
把这个概念拆分成两方面讲:
- 对于调用,静态方法只能调用的静态方法或静态变量
在此基础上,如果不是同一个类的话,就只能通过实例来调用,看个例子:
静态方法调用静态方法和静态变量:
在Test类中,字符串str是静态的,所以play()方法能调用它,在另一个类的test()方法中,又能够调用静态的play()方法
静态方法调用非静态方法或非静态变量(都报错了):
- 对于被调用,静态方法能够被非静态的方法调用,静态变量能够被非静态变量访问,不在同一个类也是可以的,举个例子:
我把Test2中的test()方法改为非静态方法,结果没有变化:
关于调用的规则,通俗来说,静态变量只能调用静态方法和静态变量,当时却能够被非静态方法或非静态变量调用(当然也可以被静态方法和静态变量调用)
static 变量(静态变量)
- 静态变量与实例变量的区别
在运行程序时,JVM需要给各个变量分配内存
对于静态变量,在程序运行时只分配一次内存,而对于实例变量,每当对象实例化时,就分配一次内存
- 调用方法
可以直接用类名.变量名调用,也可以通过对象实例来调用:
static 代码块(静态代码块)
static 代码块是独立的一块代码,在类中,相对于其他成员是独立的,在JVM加载类时,按照顺序加载,我们来做个实验:
按照顺序打印出了信息
总结
static 翻译为“静态的”,有些人认为可以讲static 形容为“全局的”,其实这么说也没错,static变量为“全局变量”,实例变量为“局部变量”:
静态成员能够被静态成员或非静态成员调用,就相当于“全局”,而实例变量只能通过实例调用,就相当于“局部”
Error(错误) 和 Exception(异常)的区别
直接翻译这两个词,第一个是“错误”,第二个是“例外”,顾名思义,二者的区别就显现了
Error 是程序运行时出现的错误,不可预见的,比如内存不足啊,虚拟机出错之类的
而 Exception 是运行时可能产生的意外状况,能够人为的考虑到,并且采取适当的方式处理
举个 处理 Exception 的例子:
提示可能会产生异常,所以我们用 catch 语句捕获异常:
由于在这个Test类的所属文件夹内没有 “test.txt” 文件,所以在捕获异常之后打印出了语句 “未找到文件”
那么这一次的Java基础讲解就到这了,接下来还有后续
网友评论