非静态类怎么调用静态方法 static定义的函数,怎么使用?
static定义的函数,怎么使用?
静态定义了变量的使用:
一、静态局部变量:
1.静态类的内部变量和auto自动变量一样是特定函数的局部变量(即没有静态声明的局部变量),即变量只能在定义它的函数中使用,两个变量的作用域是一样的;两者的区别在于,auto自动变量会随着函数被调用和退出而存在和消失,而静态局部变量不会,无论其所在的函数是否被调用,它都会一直存在;然而,虽然变量仍然存在,但它不能被使用。如果再次调用定义它的函数,它可以继续使用,并且保存上次调用后留下的值。换句话说,静态类型的内部变量是一个只能在特定函数中使用,但总是占用存储空间的变量。
2.如果在定义静态变量的时候初始化了函数体,那么以后程序就不会初始化了(函数中出现的静态变量基本类型的初始化语句只会在第一次调用时执行)。但是,将初始值赋给自动变量是在调用函数时完成的,每次调用函数时再次赋予初始值相当于执行一个赋值语句。
3.静态局部变量的初始化表达式必须是常量或常量表达式。即使局部静态变量定义时没有初始值,系统也会自动赋初值0(对于数值型变量)或空字符(对于字符型变量);静态变量的初始值是0。对于自动变量auto,如果没有赋值初始值,它的值将是一个不确定的值。
4.当一个函数被多次调用,并且需要在调用之间保留一些变量的值时,可以考虑静态局部变量。虽然全局变量也可以达到上述目的,但是全局变量有时会引起意想不到的副作用,所以使用局部静态变量还是合适的。
注意:局部静态变量占用内存时间长,可读性差,除非必要,尽量避免使用局部静态变量。
第二,静态全局变量
全局变量(外部变量)的描述以static开头,形成静态全局变量。
全局变量本身就是静态存储方法,静态全局变量也是静态存储方法。
两者在存储上没有区别。
虽然两者的区别在于:
1.非静态全局变量的范围是整个源程序。当一个源程序包含多个源文件时,非静态全局变量在所有源文件中都有效。
2.静态全局变量限制了它的作用域,即它只在定义该变量的源文件中有效,不能在同一源程序的其他源文件中使用。
由于静态全局变量的作用域仅限于一个源文件,并且只能由源文件中的函数共享,因此可以避免在其他源文件中引起错误。
从上面的分析可以看出
把局部变量改成静态变量就改变了它的存储,也就是改变了它的生存期。
保持当一个全局变量被改为静态变量时,它的作用域也随之改变,这就限制了它的使用范围。
所以静电在不同地方的作用是不一样的。应该引起重视。
静态定义了变量的使用:
一、静态局部变量:
1.静态类的内部变量和auto自动变量一样是特定函数的局部变量(即没有静态声明的局部变量),即变量只能在定义它的函数中使用,两个变量的作用域是一样的;两者的区别在于,auto自动变量会随着函数被调用和退出而存在和消失,而静态局部变量不会,无论其所在的函数是否被调用,它都会一直存在;然而,虽然变量仍然存在,但它不能被使用。如果再次调用定义它的函数,它可以继续使用,并且保存上次调用后留下的值。换句话说,静态类型的内部变量是一个只能在特定函数中使用,但总是占用存储空间的变量。
2.如果在定义静态变量的时候初始化了函数体,那么以后程序就不会初始化了(函数中出现的静态变量基本类型的初始化语句只会在第一次调用时执行)。但是,将初始值赋给自动变量是在调用函数时完成的,每次调用函数时再次赋予初始值相当于执行一个赋值语句。
3.静态局部变量的初始化表达式必须是常量或常量表达式。即使局部静态变量定义时没有初始值,系统也会自动赋初值0(对于数值型变量)或空字符(对于字符型变量);静态变量的初始值是0。对于自动变量auto,如果没有赋值初始值,它的值将是一个不确定的值。
4.当一个函数被多次调用,并且需要在调用之间保留一些变量的值时,可以考虑静态局部变量。虽然全局变量也可以达到上述目的,但是全局变量有时会引起意想不到的副作用,所以使用局部静态变量还是合适的。
注意:局部静态变量占用内存时间长,可读性差,除非必要,尽量避免使用局部静态变量。
第二,静态全局变量
全局变量(外部变量)的描述以static开头,形成静态全局变量。
全局变量本身就是静态存储方法,静态全局变量也是静态存储方法。
两者在存储上没有区别。
虽然两者的区别在于:
1.非静态全局变量的范围是整个源程序。当一个源程序包含多个源文件时,非静态全局变量在所有源文件中都有效。
2.静态全局变量限制了它的作用域,即它只在定义该变量的源文件中有效,不能在同一源程序的其他源文件中使用。
因为静态全局变量的作用域仅限于一个源文件,并且只能由源文件中的函数共享,所以可以避免在其他源文件中使用。文件中出现错误。
把局部变量改成静态变量就改变了它的存储,也就是改变了它的生存期。
将全局变量更改为静态变量会改变其范围并限制其使用。
所以静电在不同地方的作用是不一样的。应该引起重视。
多线程系统中如何使用静态变量?
总体结论:java是线程安全的,即任何方法(包括静态方法)都可以忽略线程,但有一个前提,不能有全局变量。如果有全局变量,就需要使用同步机制。
通过如下一组对比示例从头开始解释:
在多线程中使用静态方发生什么?也就是说,多线程访问同一个类的static静态方怎么样?会有线程安全问题吗?
公共类测试{
公共静态void操作(){
// ...做某事
}
}
事实证明,只要不在静态函数中处理多线程的共享数据,多线程访问同一个静态方法就不存在资源的问题。让 让我们看一个例子:
公共类StaticThread实现Runnable {
@覆盖
公共无效运行(){
// TODO自动生成的方法存根
()
}
公共静态void main(String[] args) {
for (int i 0 i lt 100 i ) {
新线程(新StaticThread())。开始()
}
}
}
公共类StaticAction {
公共静态int i 0
公共静态void print() {
int sum 0
for (int i 0 i lt 10 i ) {
(
版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。