黑马程序员:Java之main函数、static关键字介绍
来源:互联网 发布:oltp是数据挖掘吗 编辑:程序博客网 时间:2024/06/06 20:51
---------------------- ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ----------------------
---------------------- ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ----------------------详细请查看:http://edu.csdn.net
main函数
主函数是一个特殊的函数,作为程序的入口,可以被jvm调用
主函数的定义
public static void main(String[] args)
- public:代表着该函数访问权限是最大的。
- static:代表主函数随着类的加载就已经存在了
- void:主函数没有具体返回值
- main:不是关键字,但是是一个特殊的单词,可以被jvm识别
- (String[] args):函数的参数,参数类型是一个数组,该数组中的元素是字符串。即字符串类型的数组。
主函数的重载写法
- public static void main(int x) //这种写法JVM不认为是程序入口
- public static void main(String[] args) //这是JVM识别的程序入口,只有args可以改成其他的,其他的都不改
题外话:args完整写法:arguments(元素)
JVM调用的默认String[] args到底为何值呢?
1
2
3
4
5
6
7
8
9
10
11
12
class
MainDemo
{
public
static
void
main(String[] args)
{
//结果为[Ljava.lang.String;@1a4eb98b,说明是一个new String[]
System.out.println(args);
//结果为0,说明main函数默认调用的是new String[0];
System.out.println(args.length);
//结果是超出角标的错误。因为args[0]调用的是第一个值,而默认调用的String长度为0
System.out.println(args[
0
]);
}
}
题外话:java命令可以直接给String[] args传入值
如 java MainDemo haha heihei
则System.out.println(args[0]);//结果为haha
static(静态)关键字
用于修饰成员,包括成员变量及成员函数
被static修饰的成员有以下特点:
- 随着类的加载而加载,随着类的消失而消失,说明它的生命周期最长,所以不建议太多的static变量
- 优先于对象存在,静态先存在,对象后存在
- 被所有对象所共享 //当多个对象中的变量存在想同值时,可通过static String country = "CN";来定义,可以节省内存空间。不会导致每个对象中存在重复的country变量。
- 可以直接被类名调用 写法:类名.静态成员 如:Person.country
使用注意事项:
- 静态方法只能访问静态成员。非静态方法即可以访问静态也可以访问非静态。
- 静态方法中不可以写this,super关键字
- 主函数是静态的
- 静态函数只能被静态函数覆盖(重写),静态函数只能覆盖静态函数
关于特有数据和共享数据的内存存放空间
特有数据随着对象存储在堆内存中。共性内容(共享)存在方法区(也叫共享区、数据区)
1
2
3
4
5
6
7
8
9
class
Person
{
String name;
//成员变量,实例变量。随对象的存在而存在,对象的消失而消失。
static
String country =
"CN"
;
//静态的成员变量,类变量
public
void
show()
{
System.out.println(name+
":"
+country);
}
}
实例变量和类变量的区别:
- 存放位置:
类变量随着类的加载而存在于方法区中。
实例变量随着对象的加载而存在于堆内存中。 - 生命周期:
类变量生命周期最长,随类的消失而消失
实例变量的生命周期,随着对象的消失而消失
静态的利与弊
- 利:对对象的共享数据进行单独空间的存储,节省内存空间,没必要每个对象中都存储一份,且可以直接被类名调用。
- 弊:生命周期过长,访问有局限性(只能访问静态)
什么时候使用静态:
- 当对象中出现共享数据时,该数据被静态(static)所修饰
- 当函数内部没有访问到非静态数据时,可以定义为静态函数
静态代码块
格式:
1
2
3
4
static
{
静态代码块中的执行语句;
}
特点:随着类的加载而执行,只执行一次(静态代码块只要加载过,就算再执行也不会执行),并优先于主函数
用于给类进行初始化。
题外话:
静态代码块、构造代码块、构造函数之间的执行顺序问题
静态代码块>构造代码块>构造函数
原因:
静态代码块:给类初始化,随类的加载而加载
构造代码块:给对象初始化,对象一建立就加载,优先于构造函数
构造函数:给指定对象初始化,指定对象一建立就加载
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
class
BlockDemo
{
public
static
void
main(String[] args)
{
Block b =
new
Block(
3
);
//结果输出:d c b 3
}
}
class
Block
{
Block()
{
System.out.println(
"a"
);
}
static
{
System.out.println(
"d"
);
}
Block(
int
a)
{
System.out.println(a);
}
{
System.out.println(
"b"
);
}
static
{
System.out.println(
"c"
);
}
}
- 黑马程序员:Java之main函数、static关键字介绍
- 黑马程序员 Java基础 面向对象:static关键字 main函数 单例设计模式
- 黑马程序员——JAVA基础之主函数main和静态static,静态代码块
- 黑马程序员-----java面向对象之封装、构造函数、this关键字、static静态总结*
- 奋斗黑马程序员----Java之static关键字详解
- 黑马程序员笔记:Java基础知识之static关键字
- 黑马程序员--03.Java面向对象--02.【static关键字】【main方法】【静态成员】
- 黑马程序员----构造函数,static关键字
- Java关键字介绍之static
- Java关键字介绍之static
- Java关键字介绍之static
- Java关键字介绍之static
- Java关键字介绍之static
- 黑马程序员:Java之介绍对象、封装、构造函数、构造代码块及this关键字
- 黑马程序员---java中的final static 关键字
- 黑马程序员--Java学习09--static关键字
- 黑马程序员-java关键字static详解
- 黑马程序员---java基础---this、static关键字
- 工作中的纠结
- BIG5码转换为GB2312码的方法
- Ubuntu 13.10 has no way to modify the keyboard layout
- ubuntu开机出现grub rescue> normal.mod找不到的解决办法
- Jfreechart生成报表
- 黑马程序员:Java之main函数、static关键字介绍
- acm——贪心算法(背包问题)
- java 判断输入分数等级
- 黑马程序员_Java I/O 技术
- 好用的 FTP 软件之 FileZilla 技巧教程
- Android下自定义的jar库文件编译和调用
- cocos2d 之1 - cocos2d 概论
- ADF 入门帮助
- springmvc定制REST风格 以及 与JSR303 Bean校验整合