Java 中函数内的变量不能用static修饰,修饰的话只能用final,所以没有不可重入问题?

Java 中函数内的变量不能用static修饰,修饰的话只能用final,所以没有不可重入问题?

0

7个回答

可重入的意思是线程可以重复获得它已经持有的锁?不知你是否是这个意思。

0

静态方法中就可以定义静态变量

0

static只能修饰类的成员变量,而函数内的变量可以用final修饰,是考虑到闭包的问题,即这个final修饰的变量存在的时间可能比创建它的环境要长久。
例如下列代码,匿名函数创建的线程访问了外界函数的final变量,而匿名函数线程存在的生命周期可能要比fianl修饰的变量创建环境要长。

 public static void main(String[] args){
final int count = 5;
new Thread(new Runnable(){
public void run(){System.out.println("running"+count);}
}).start();
}
0

这里的可重入是指线程中后再回来执行吗?感觉这跟static,final无关,中断的话变量这些还是会保存起来的~

0

这里的可重入是指线程中后再回来执行吗?感觉这跟static,final无关,中断的话变量这些还是会保存起来的~

0
u010738033
草莓小王子 回复Hungryhao: 恩,那如果存在多线程访问临界资源的话还是有可重入问题的吧
接近 4 年之前 回复
hungryhao
Hungryhao http://blog.csdn.net/acs713/article/details/20034511
接近 4 年之前 回复

静态变量 只能在静态方法中定义

0

同问这里的“可重入”是指的是?

0
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
关于成员内部类不能有static修饰的变量和方法问题
看了几篇博客关于一般内部类不能有static修饰的变量,在这里记录一下。问题几种解释如下:1.“if you're going to have a static method, the whole inner class has to be static. Without doing that, you couldn't guarantee that the inner class existed...
关于Java内部类字段和方法不能使用static修饰的原因
昨天的文章中,遗留了一个问题就是,为什么Java内部类字段和方法不能使用static修饰。先下下面一段代码:class OuterClass { public int age=20; class InnerClass { static int i = 100; // compile error static void f() { } // compile error } } ...
Java中static的用法,static、public为什么不能修饰局部变量?
人为规定的,记住就好。其实这些变量都之所以叫局部变量,其作用域也只限于声明它的方法体内。在方法被调用时,这些局部变量获得内存空间,到方法执行结束时,他们所占据的内存空间就被释放。用完就释放。而static,public是用来声明全局变量或是被其他对象引用的变量。关于static的用法:1.static变量 static表示“全局”或者“静态”的意思,用来修饰成员变量和成员方法,也可以形成静态st
java中的方法和实例变量被static修饰后的不同
//static修饰后的类中的实例变量也叫做类变量在加载类的时候就对其进行加载,所有对象共有的变量。调用时可以直接通过类名调用,被static修饰的方法同样如此,因此调用的多的公共实例变量和方法可以用static修饰package java_static_s; public class java_static_s { private String name; static String s...
Java static修饰的方法中不能使用this、super关键字
首先,Java中可以使用static声明属性或方法,如果现在希望一个属性被所有对象所共同拥有,则可以将其声明为static类型,    声明static类型的属性或方法之后此属性或方法也称为类方法,可以有类名称直接调用。而其中,static修饰方法后,该方法    也就随着类的加载而加载,也就是说该方法属于类调用了,不能用于对象调用。而在方法中定义的this关键字,用于代替当前    对象的
abstract为何不能与final,private,static同时出现
abstract 修饰的类,必须被继承;abstract 修饰的方法,应被重写。 final 修饰的类、属性、方法不可被更改,所以final 修饰的方法不可以被重写。 private 修饰的类只能是内部类,private 修饰的属性、方法只能在本类中调用,重写的方法无法访问这些方法和属性。 static 修饰的方法是静态的,可以直接被类所调用,但是abstract 修饰的方法抽象方法,没有方...
为什么不能用静态修饰符(static)与访问控制符来修饰局部方法中的内部类?
1、这个主要是由作用范围决定的。在方法内部定义的内部类,只能在方法的内部,也就是定义该类的区域内使用。这样的结果就是,在方法之外,并不能访问到该内部类,也即不需要private等访问控制符修饰,因为他本身就是在内部使用的,外部不能访问2、一个类中,一个static变量只会有一个内存空间,虽然有多个类实例,但这些类实例中的这个static变量会共享同一个内存空间。所以声明为static的变量实质上就...
Abstract方法不能用final,static修饰非abstract方法在abstract类中可以用fina
抽象类中的抽象方法不能是final,但是非抽象方法前加final可以编译通过因为abstract和final相互排斥,前者专用于继承,后者禁止继承抽象类中的抽象方法不能为static 非抽象方法可以为static包裹类Integer、 String 、Float、 Double等都是final类,不能被继承!Integer i=new Integer(“6”);如果字符串不是数字,会产生运行异常(
Java中static为什么不能修饰局部变量?
Java中static为什么不能修饰局部变量? 问这样问题的人显然是学过c/c++的,因为在c/c++中static是可以修饰局部变量的 如果你对这个问题百思不得其解,怎么都想不明白,你还是不要想了,因为没有什么为什么。 不能就是不能,人为规定的规则罢了。 如果你非要知道个为什么? 我不介意在这误人子弟一下,,,,,,   首先让我们来看一下c语言中static的作用 1.
为什么java接口中的成员变量必须被static关键字和final关键字修饰
对待这个问题,我建议用辩证的角度去看待!首先我们来看只有final没有static的情况,也就是说每个实现类里面都会有一个名字和值都一样的变量(final强调不准改变引用地址),那么在初始化相关实现类的时候,都会单独为这个属性开辟一个存储空间,这个时候问题就来了--》不觉得很浪费内存吗?如果我用static关键字修饰了,不管你创建多少个实现类实例,他们都共享这个成员属性并且内存中也只会开销紧够存储
java 类加载过程中static final 的特殊
编程过程中经常用的static,final关键字,也经常听到同事谈起这些词,到底他们怎么样呢,jvm中class类文件结构可以找到答案。 ConstantValue属性 ConstantValue属性的作用是通知虚拟机自动为静态变量赋值,只有被static修饰的变量才可以使用这项属性。非static类型的变量的赋值是在实例构造器方法中进行的;tatic类型变量赋值分两种,在类构造其中赋值,或使...
抽象类中不能有static,final,private修饰的方法--姥姥家的程序员
抽象类中不能有static,final,private修饰的方法 1. 抽象类中不能有static修饰的方法。 打个比方: 被static修饰的方法在和没有static修饰的方法在内存中的位置不一样。。 被static修饰的方法属于类,是类自己的东西,不是给子类来继承的。就好像类是个房子,它的静态方法是里面的一面墙,每个人都可已在墙上画画,你画的东西别人也能看到,属于大家共同使用。你想通过继承来...
Logger为什么用static final修饰
springboot中logger采用static final进行修饰: @Controller public class JspController { private static final Logger logger = LoggerFactory.getLogger(JspController.class); @RequestMapping("/jspIndex") ...
final修饰的常量和非final修饰的区别,同时,还有static修饰
final修饰的常量不能修改:当调用f1(final修饰的)方法的时候,将i重新赋值这样会报错(例i=i+1),当调用f2(非final修饰),将i重新定值就不会把报错,结论:final修饰的是常量。static修饰和final的修饰public: 使接口的实现类可以使用这个常量static:static修饰就表示它属于类的,随的类的加载而存在的,如果是非static的话,    就表示属于对象的...
【java】关于为什么局部内部类/匿名内部类只能访问final修饰的局部变量
public class AAa{     public void fun(){         int i =123;         Object obj = new Object();         // i++;                class LocalClass{             public void localFun() {                 Sy
java -final修饰作用
final修饰的类有什么特点Java关键字final有“这是无法改变的”或者“终态的”含义,它可以修饰非抽象类、非抽象类成员方法和变量。final类不能被继承,没有子类,final类中的方法默认是final的。 final方法不能被子类的方法覆盖,但可以被继承。 final成员变量表示常量,只能被赋值一次,赋值后值不再改变。 final不能用于修饰构造方法。 注意:父类的private成员方法是不...
Java——static修饰符、final修饰符、abstract修饰符、接口
一、static修饰符 static修饰符可以修饰变量、方法或代码块 用static修饰的变量叫静态变量。 静态变量有如下注意事项: 类中的静态变量属于类,而不属于某个特定的对象。类的静态成员可以与类的名称一起使用,而无须创建类的对象。(可以直接通过类名来访问静态变量,建议使用类名来调用静态变量)静态变量或方法也称为类的变量或方法。不管创建了类的多少实例,整个类中静态变量的副本只有
为什么接口中变量要用final修饰
今天碰到这个问题时候,还真不好理解,只知道interface中的变量默认是被public static final 修饰的,接口中的方法是被public和abstrct修饰的。查阅了很多资料,做了些例子,得出以下结论,不足的地方希望大家指出。  Java代码           /*        * 关于抽象类和接口        *         * 1
java中的修饰符final和static
1.final 修饰类时表明该类不能被继承,自然类中的方法默认是final型的。 2.final 修饰方法时不允许被子类覆盖,也就是可以被继承。一个final类中,一个final方法只能被实现一次。 public class Test1 { public final void show(){ System.out.println("this is super cl
spring拾遗(一)——@Value注入static属性
一、xml通过bean注入:没有尝试,理论上可行 二、给参数注入,执行set方法 public static String zhifuUrl; @Value("${zhifu.url}") public void setZhifuUrl(String url) { CrmUtil.zhifuUrl = url; } 三、通过中间变量赋值 public static String
static和final能否修饰类,方法,属性
先描述static 不能修饰普通类,可以修饰内部类。 可以修饰方法。 可以修饰属性。 1-1:修饰内部类后内部类有什么特点? 答:可以直接创建对象,创建方式如下 1-2:如果内部类没有被继承如果创建对象? 答:必须先new一个外部类对象,然后在对象.new 外部类创建 代码如下: 2-1:被static修饰的方法被继承后还能被重写吗? 答:可以被重写,有一个要求,重写的方法修饰符的范围 需...
Java中final变量为什么在使用前必须要进行初始化
final关键字我们并不陌生,但是final修饰的属性变量为什么必须在定义的时候或者构造函数中被初始化呢? static final修饰的变量又为什么必须在定义的时候进行初始化呢? 首先要明白一点: final修饰的变量表示赋值之后不能再进行更改,系统赋默认值也算赋值,因此系统也不会赋默认值。 如果不在定义的时候或者构造函数中对final变量进行赋值的话,则生成的对象中final变量的值是
static和final可以修饰的对象和其特征
1、final可以修饰:类变量、成员变量、局部变量、方法、类。 1.1、被final修饰的变量:必须直接赋值,并且不再允许在其他地方改值。 1.2、被final修饰的方法:不能被复写。 1.3、被final修饰的类:不能被继承。 2、static可以修饰:成员变量、方法。 2.1、被static修饰的成员变量:成员变量变为类变量,可以在所有的方法中访问。 2.2、被static
Static 静态变量 不能直接使用 @autowired标签的问题
1、问题原因 在类的加载顺序中static方法的加载先于自动注入方法的加载,导致static想使用自动注入的bean 获取不到,获得的bean类都为初始设定Null 2.解决方案 ①在静态方法中使自定义的工具类,该工具类实现ApplicationContextAware ,在该工具类中通过applicationContext.getBean 来湖区想要的bean类。 public class S...
final关键字可以用来修饰类、方法、变量、参数,不能修饰抽象类和接口
面试题  以下关于final关键字说法错误的是(A,C)(两项) A) final是java中的修饰符,可以修饰类、接口、抽象类、方法和属性 B) final修饰的类肯定不能被继承 C) final修饰的方法不能被重载 D) final修饰的变量不允许被再次赋值 一、final关键字可以用来修饰类、方法、变量。各有不同。 A、修饰类(class)。       1、
【小家java】final修饰的变量真的不可变吗?
1、概述 这可能是大家的一个共识:如果我们希望这个变量不可变,我们可以用final进行修饰。但本篇将带你深入了解不变的含义,我相信可以让你更深的了解final的原理,也能记得更牢靠 2、栗子 被final修饰过的变量,只是说栈存储的地址不能再改变,但是却没有说地址指向的内容不能改变。所以用final修饰,但内容是个对象啥的,然后改变对象属性值,这个不在本文讨论的范围以内。本文想讨论的是,直接...
abstract不能和private,static以及final同时使用的原因
bstract 一定不能和 private, static, final 同时使用.1、抽象方法:只有方法头,没有方法体定义,也就是说抽象方法无需实现,抽象方法的意义在于子类实现,private意义在于其他类直接调用它已实现的方法。这两者搭配毫无意义(private修饰后为私有,子类不能继承,自然不能使用)2、final用于类名前,表示类不可被继承;final用于变量前,表示它是只能一次赋值的变量...
static final 与final修饰变量区别简单介绍
先运行如demo下代码 import java.util.Random; /** * * 举个栗子,来验证static final与final的区别 */ public class StaticAndFinalTest { //26作为随机数种子 private static Random random = new Random(26); //返回一个伪随机
final 函数 变量 常量 命名规则
继承弊端:打破了封装性。 /* final关键字: 1,final是一个修饰符,可以修饰类,方法,变量。 2,final修饰的类不可以被继承。 3,final修饰的方法不可以被覆盖。 4,final修饰的变量是一个常量,只能赋值一次。 为什么要用final修饰变量。其实在程序如果一个数据是固定的, 那么直接使用这个数据就可以了,但是这样阅读性差,所以它该数据起个名称。 而且这个变
Java中static final“常量”的坑
在Java中,其实语言本身并没有“常量”这样的概念。但是我们根据常量的特点(不可修改),经常会使用“static final”关键字,对一个变量进行修饰,以达到不创建类就可直接使用,并且该变量不允许修改的目的,看起来就跟“常量”一样。无论是教科书,还是上网查资料,都会教我们这样写 这样的写法在纯class文件发布的环境,没有问题,因为class文件只要一修改就会被eclipse重新编译。但在Ja...
static与final修饰类属性及初始化问题
static: 1. static修饰一个属性字段,那么这个属性字段将成为类本身的资源,public修饰为共有的,可以在类的外部通过test.a来访问此属性;在类内部任何地方可以使用。如果被修饰为private私有,那么只能在类内部使用。 2. 如果属性被修饰为static静态类资源,那么这个字段永远只有一个,也就是说不管你new test()多少个类的对象,操作的永远都只是属于类的那一块内存
接口中为什么不能含有static修饰方法
关于接口中不能存在static修饰的方法,我们一直都知道接口中不能出现static修饰的方法。但是原因很少提及,大概分析了下: static 代表类修饰,她修饰的成员都是基于类的,不是实例的,对于类实例来说大家都一样; 接口中不能只能出现abstract 修饰的方法,这意味着,该方法实现各不相同(即使你故意做一致实现),则不能称之为类方法。这与stat...
为什么java接口中可以有default或者static修饰的方法?
转自:http://zhidao.baidu.com/link?url=Ai_0Rsueo5r2gqN5w3Q5UvAwWGHRuxqD5CYmRse1Xa10_-e01RneZO_7GnGGk7AqCNX96vedQ21j8jk2tLhbefQ2iZe4jLrpFjs6Z9GD06W 为什么java接口中可以有default或者static修饰的方法? java接口中的defau
java中使用final关键字修饰一个变量时,是引用不能变,还是引用的对象不能变?
java中使用final关键字修饰一个变量时,是引用不能变,还是引用的对象不能变?   是引用对象的地址值不能变,引用变量所指向的对象的内容是可以改变。   final变量永远指向这个对象,是一个常量指针,而不是指向常量的指针。 例如:final StringBuffer sbu = new StringBuffer(“abc”);     在对其进行重新赋值    
关于static和可重入函数
1、概述   static 声明的变量在C语言中有两方面的特征:   1)、变量会被放在程序的全局存储区中,这样可以在下一次调用的时候还可以保持原来的赋值。这一点是它与堆栈变量和堆变量的区别。       2)、变量用static告知编译器,自己仅仅在变量的作用范围内可见。这一点是它与全局变量的区别。   2、问题:Static的理解   关于st
static final的初始化与赋值问题
1.Class 文件的生成阶段 Sun javac编译器对于静态field字段的初始化赋值策略 目前的Sun javac编译器的选择是: 1.如果使用final和static同时修饰一个field字段,并且这个字段是基本类型或者String类型的,那么编译器在编译这个字段的时候,会在对应的field_info结构体中增加一个ConstantValue类型的结构体,在赋值的时候使用这个Cons...
面向对象_final修饰变量的初始化时机
/* final修饰变量初始化时机 A:被final修饰的值只能赋值一次 B:在构造方法完毕前。(非静态的常量) */ class Demo{ //int num = 10; //final int num2 = 20; int num; final int num2; { //num2 = 10; } public Demo(){ num = 100;
java中局部变量可以使用访问控制修饰符吗?
局部变量前是不可使用访问控制修饰符的 首先我们先来看一段源代码 public void A(){ private int a = 4; } 如果在eclipse工具开发中,编译时期会提醒我们有错,错误提示是删除a的修饰符private,那为什么局部变量前不能用pirvate等修饰符呢? 我们知道局部变量本身就是一种有限制的变量,只可以局部调用,即
类中final static常量,静态变量以及静态代码块相关问题
作者在学习过程中,遇到了有关静态代码块的现象,故写此博客记录下来。首先先介绍下static概念当在定义类的时候,类中都会有相应的属性和方法。而属性和方法都是通过创建本类对象调用的。当在调用对象的某个方法时,这个方法没有访问到对象的特有数据时,方法创建这个对象有些多余。可是不创建对象,方法又调用不了,这时我们可以通过static关键字来实现。static它是静态修饰符,一般用来修饰类中的成员。sta
static,final,static final修饰变量到底有什么区别?
平时我们在项目中可能经常会用到一些常量,我们一般都定义成static final的,有时候可能会突然想到,到底staitc,final,static final定义的变量到底有什么关系呢?呵呵,这你就不知道了,他们是远方表亲(开个玩笑)。 下面我们就通过以下例子一起看一下: /** * @Description: 变量定义类 * @Author: yuhua * @Date: 2018...
文章热词 统计学稳健估计opencv函数 机器学习教程 Objective-C培训 交互设计视频教程 颜色模型
相关热词 mysql关联查询两次本表 native底部 react extjs glyph 图标 深度学习能用java 学习java能用mac么