精华内容
下载资源
问答
  • java怎么调用局部变量
    千次阅读
    2021-02-28 18:09:33

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

    for(int j=0;j

    {

    k[j]=new student();

    System.out.println("输入学生姓名:");

    k[j].setSname();

    System.out.println("输入学生号:");

    k[j].setSno();

    System.out.println("输入该生选课信息:");

    course[] xk;

    xk=k[j].setxk();

    for(int y=0;y

    {

    a[y]=new course();

    a[y]=xk;

    }

    System.out.println("由教师输入选课成绩:");

    for(int i=0;i

    {

    w.setgrade();

    xk[i].score=w.getgrade();

    }

    for(int i=0;i

    {

    sum+=xk[i].score;

    }

    }

    System.out.println("输出学生选课信息:");

    for(int j=0;j

    {

    System.out.println("输出第"+(j+1)+"个学生选课信息:");

    for(int i=0;i

    {

    xk[i].getcname();

    xk[i].getcno();

    xk[i].getscore();

    }

    System.out.println("输出学生总成绩:"+sum);

    System.out.println("输出学生平均成绩:"+(float)sum/xk.length);

    xk是第一个for循环中的局部变量

    如何在第二个for循环中使用

    我是新手,请大家多多指教

    }

    更多相关内容
  • 我正在学习Java 8,我遇到了一些我觉得有点奇怪的事情 .请考虑以下代码段:private MyDaoClass myDao;public void storeRelationships(Set> relationships){RelationshipTransformer transformer = new ...

    我正在学习Java 8,我遇到了一些我觉得有点奇怪的事情 .

    请考虑以下代码段:

    private MyDaoClass myDao;

    public void storeRelationships(Set> relationships)

    {

    RelationshipTransformer transformer = new RelationshipTransformerImpl();

    myDao.createRelationships(

    relationships.stream()

    .map((input) -> transformer.transformRelationship(input))

    .collect(Collectors.toSet())

    );

    }

    基本上,我需要将名为 relationships 的输入集映射到不同的类型,以符合我正在使用的DAO的API . 对于转换,我想使用我实例化为局部变量的现有 RelationshipTransformerImpl 类 .

    现在,这是我的问题:

    如果我要修改上面的代码如下:

    public void storeRelationships(Set> relationships)

    {

    RelationshipTransformer transformer = new RelationshipTransformerImpl();

    myDao.createRelationships(

    relationships.stream()

    .map((input) -> transformer.transformRelationship(input))

    .collect(Collectors.toSet())

    );

    transformer = null; //setting the value of an effectively final variable

    }

    我显然会得到一个编译错误,因为局部变量 transformer 不再是"effectively final" . 但是,如果用方法引用替换lambda:

    public void storeRelationships(Set> relationships)

    {

    RelationshipTransformer transformer = new RelationshipTransformerImpl();

    myDao.createRelationships(

    relationships.stream()

    .map(transformer::transformRelationship)

    .collect(Collectors.toSet())

    );

    transformer = null; //setting the value of an effectively final variable

    }

    然后我不再收到编译错误!为什么会这样?我认为编写lambda表达式的两种方法应该是等价的,但显然还有更多的事情要发生 .

    展开全文
  • 主要涉及了java中的局部变量和全局变量,就二者的含义、生存时间和创建位置作了介绍,需要的朋友可以参考下。
  • Java线程局部变量的使用

    知识点介绍

    来源:《Java核心卷一》12.4.12 线程局部变量

    前面几节中,我们讨论了在线程间共享变量的风险。有时可能要避免共享变量,使用ThreadLocal中文文档|英文文档)辅助类为各个线程提供各自的实例。例如, SimpleDateFormat(中文文档)类不是线程安全的。假设有一个静态变量:

    public static final SimpleDateFormat dateFormat 
        = new SimpleDateFormat("yyy-MM-dd");
    

    如果两个线程都执行以下操作:

    String dateStamp = dateFormat.format(new Date());
    

    结果可能很混乱,因为dateFormat使用的内部数据结构可能会被并发的访问所破坏。当然可以使用同步,但开销很大;或者也可以在需要时构造一个局部 SimpleDateFormat对象,不过这也太浪费了。要为每个线程构造一个实例,可以使用以下代码:

    private static final ThreadLocal<SimpleDateFormat> dataFormat
        = ThreadLocal.withInitial(() -> new SimpleDateFormat("yyy-MM-dd"))
    

    要访问具体的格式化方法,可以调用:

    String dataStamp = dataFormat.get().format(new Date());
    

    在一个给定线程中首次调用get时,会调用构造器中的 lambda表达式。在此之后,get方法会返回属于当前线程的那个实例。


    代码实现

    上面的内容,第一次看没看明白,跳过了。在看完《Java并发之美》1.11 ThreadLocal,大体明白了ThreadLocal是怎么回事。

    所以,我实现了下,上一节的完整代码,然后分析下整个流程。

    public class ThreadLocalTest {
        
        // (2.1)创建ThreadLocal变量
        private static final ThreadLocal<SimpleDateFormat> dataFormat = new ThreadLocal<SimpleDateFormat>(){
            @Override
            protected SimpleDateFormat initialValue(){
                return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            }
        };
        
        public static void main(String args[]){
            Thread threadOne = new Thread(new Runnable() {
                public void run(){
                    String dataStamp = dataFormat.get().format(new Date());
                    System.out.println(dataStamp);
                }
            });
    
            Thread threadTwo = new Thread(new Runnable() {
                public void run(){
                    // (2.2) 使用局部变量
                    String dataStamp = dataFormat.get().format(new Date());
                    System.out.println(dataStamp);
                }
            });
    
            threadOne.start();
            threadTwo.start();
        }
    }
    

    (2.1)创建ThreadLocal变量

    首先,ThreadLocal类的参数类型为SimpleDateFormat。接着,使用ThreadLocal<SimpleDateFormat>类创建了一个名为dataFormat的对象。其中类的initialValue方法被重写。

    initialValue

    返回此线程局部变量的当前线程的“初始值”。线程第一次使用 get() 方法访问变量时将调用此方法,但如果线程之前调用了 set(T) 方法,则不会对该线程再调用 initialValue 方法。通常,此方法对每个线程最多调用一次,但如果在调用 get() 后又调用了 remove(),则可能再次调用此方法。

    该实现返回 null;如果程序员希望线程局部变量具有 null 以外的值,则必须为 ThreadLocal 创建子类,并重写此方法。通常将使用匿名内部类完成此操作。

    (2.2) 使用局部变量

    要明白get方法,需要去阅读源码。简单来说(复杂的我也不知道,哈哈),第一次调用get方法,会调用initialValue方法。由我们的实现可知,会返回一个new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")对象。这个对象被放入当前线程的threadLocals中,每个线程有自己的threadLocals,所以每个线程有自己的ThreadLocal变量副本并可以加以改变。

        public T get() {
            Thread t = Thread.currentThread();
            ThreadLocalMap map = getMap(t);
            if (map != null) {
                ThreadLocalMap.Entry e = map.getEntry(this);
                if (e != null) {
                    @SuppressWarnings("unchecked")
                    T result = (T)e.value;
                    return result;
                }
            }
            return setInitialValue(); // 源码在下方
        }
    
        private T setInitialValue() {
            T value = initialValue();
            Thread t = Thread.currentThread();
            ThreadLocalMap map = getMap(t);
            if (map != null) {
                map.set(this, value);
            } else {
                createMap(t, value); // 源码在下方
            }
            if (this instanceof TerminatingThreadLocal) {
                TerminatingThreadLocal.register((TerminatingThreadLocal<?>) this);
            }
            return value;
        }
    
        void createMap(Thread t, T firstValue) {
            t.threadLocals = new ThreadLocalMap(this, firstValue);
        }
    

    书上的UML图可以挺好的反应ThreadLocalThreadThreadLocalMap三者之间的关系。

    图片表示的是类之间的关联关系,UML的使用,可以参考:UML的使用

    在这里插入图片描述

    拓展阅读

    我还没读:SimpleDateFormat 的线程安全问题与 ThreadLocal

    展开全文
  • 大家知道Java中的局部变量吗?今天我们要了解的Java局部变量及它和成员变量的区别,一起来看看吧。什么是局部变量?局部变量时就是只有一部分可见的变量,例如定义在方法中的变量,只有这百个方法才能使用,同一个类...

    大家知道Java中的局部变量吗?今天我们要了解的Java的局部变量及它和成员变量的区别,一起来看看吧。

    什么是局部变量?

    局部变量时就是只有一部分可见的变量,例如定义在方法中的变量,只有这百个方法才能使用,同一个类的其他方法或者其他的类都不可见度。多态是面向对象编程的巨大优势,多态其实就是多种形态或者多种状态的意思,比如我们人来,我们都会说话,能思考,会打豆豆,但是人类具体概念概念太广泛了,例如:人类也分黄种人、黑人、白种人,不同的人种之间又有不同的属性,最明显的就如头发颜色,但是就算是同一种人也不会完全相同,它们的年龄、学历、性格。这就是java及所有面向对象语言最具特点的抽象与多态。从所有人类到某个人类,这是抽象,从某个人类到所有人类,这是多态,虽然都是人类,但是形态却是不可能完全一样的。

    Java中局部变量与成员变量区别在哪里?

    1. 定义的位置不一样

    局部变量:写在方法内部

    成员变量:写在方法外部,直接写在类当中

    2.作用范围不一样

    局部变量:只有方法当中才可以使用,出了方法就不能再用

    成员变量:整个类全都可以通用。

    3.默认值不一样

    局部变量:没有默认值,如果想要使用,必须手动进行赋值

    成员变量:如果没有赋值,会有默认值,规则和数组一样

    4.内存的位置不一样

    局部变量:位于栈内存

    成员变量,位于堆内存。

    5.生命周期不一样

    局部变量:随着方法进栈而诞生,随着方法出栈而死亡。

    成员变量:随着对象创建而诞生,随着对象被垃圾回收而消失。

    例:public calss Demo01variableDifference

    {

    String name; //成员变量

    public void methodA()

    {

    int num = 20; //局部变量 默认值为NULL

    System.out.println(num);

    System.out.println(name);

    }

    public void methodB(int param)

    {

    //方法的参数就是局部变量

    System.out.println(param); //参数也是局部变量,为什么不赋值就可以输出?

    //因为参数在方法调用的时候,必然会被赋值的。不传参数就会报错。

    int age;

    //System.out.println(age);//错误写法 未赋值不能使用,必须赋值

    // System.out.println(num);//错误写法

    System.out.println(name);

    /

    }

    }

    以上就是Java局部变量的所有内容,更多Java入门知识请关注我们了解吧。

    展开全文
  • 主要介绍了简单了解java局部变量与成员变量的区别,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
  • 局部变量:在方法的内部 成员变量:在方法的外部、直接写在类当中 静态变量:在方法的外部、直接写在类当中 2、作用范围不一样(作用域) 局部变量:只有方法当中可用,出了方法就不可用 成员变量:整个类都...
  • 成员变量和局部变量 根据定义变量位置的不同,可以将变量分为成员变量和局部变量 成员变量是在类范围内定义的变量 局部变量是在一个方法内定义的变量 成员变量可以分为: 实例属性 (不用static修饰) ...
  • 局部变量:作用域在方法内部,只能在方法内部使用。 类变量:作用域在整个类中,可以在类内部使用,在数据类型前加static 实例变量:实例变量定义时与类变量的区别在于类变量前加static,实例变量从属于类的对象,...
  • 成员变量和局部变量区别 在类中的位置不同 重点 成员变量:类中,方法外 局部变量:方法中或者方法声明上(形式参数) 作用范围不一样 重点 成员变量:类中 局部变量:方法中 初始化值的不同 重点 成员变量:有...
  • Java | 局部变量(Local Variable)

    千次阅读 2021-03-31 21:23:02
    局部变量(Local Variable),是 Java 编程语言中位于代码块内的一种变量。如同对象将其状态存储在字段中那样,代码块将其临时状态存储在局部变量中。局部变量始终被归类为“变量”(而不是“字段”)。
  • 一、内部类 1️⃣作为其外部类成员的内部类,称为成员内部类。除另有说明外,“内部类”通常是指成员内部类。 2️⃣局部类和匿名类是内部类的两个特殊的...局部变量的生存期是从函数被调用的时刻算起到函数返回调用处的
  • 主要介绍了Java成员变量与局部变量的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下
  • java的成员变量和局部变量
  • Java局部变量和成员变量的区别

    千次阅读 2020-07-20 09:48:46
    局部变量和成员变量区别 1、位置不一样 局部变量:在方法的内部 成员变量:在方法的外部、直接写在类当中 2、作用范围不一样(作用域) 局部变量:只有方法当中可用,出了方法就不可用 成员变量:整个类都可用...
  • 此前给大家带来了javaLambda表达式访问成员变量详细介绍,下面就要继续给大家介绍javaLambda表达式访问局部变量的内容,一起通过简单的文章来进行了解吧。对于成员变量的访问Lambda表达式和普通方法没有什么区别,...
  • java中成员变量和局部变量的区别

    千次阅读 2022-04-19 14:30:51
    成员变量的主体是类,类中定义的不是静态变量的都是成员变量。成员变量对类中所有成员可见,对外是否可见要看关键词有没有private,public,protected这些;... 局部变量:随着方法的调用而存在,随着方法的
  • java局部变量和全局变量 jvm原理(图形表示)static 的作用 常量:final
  • java中的变量可分为三类:局部变量、静态变量、实例变量。 首先,变量根据声明的位置不同可以分为:局部变量和成员变量。在方法体当中声明的变量以及方法的每一个参数都是局部变量。在方法体外,类体内声明的变量...
  • 全局变量是编程术语中的一种,源自于变量之分。...所有局部变量都是在方法被调用时在栈中分配空间,系统不会自动对他们进行赋值,所以必须先给局部变量赋初值之后才能使用。全局变量和局部变量的区别:1、作用域不...
  • 1.2 局部变量 位置:定义在方法里或者局部代码块中 注意:必须手动初始化来分配内存.如:int i = 5 或者int i; i=5; 作用域:也就是方法里或者局部代码块中,方法运行完内存就释放了 1.3.成员变量 位置:定义在类里...
  • for=pc1.java中成员变量,局部变量,静态变量的辨析Java中的变量大致分为 成员变量 和 局部变量 两大类。成员变量:在类体里面定义的变量称为成员变量;如果该成员变量有 static 关键字修饰,则该成员变量称为静态...
  • 直接上下载地址jclasslib是一个独立的工具,不是包含在JDK中的工具,需要自己进行下载,下载地址如下:什么是局部变量表在《java中的栈》中我们说到了一个栈帧至少需要包含局部变量表、操作数栈、帧数据区这三个部分...
  • int n = 8因为是局部变量所以也是在栈内,通过test.calc1方法进入栈内调用了将n的值赋给了num,所以此时的计算都是在栈内,num = num+1。 Student stu = new Student(); 下面是创建了一个stu,里面存的也是地址...
  • 成员变量和局部变量在每种编程语言中都有涉及,如果之前了解过其他语言的成员变量或者局部变量,那么在学习java中的成员变量和局部变量时可以看看有那些联系和不同,这一块的东西也不能说难,如果第一次接触可能会...
  • 一、下面先大致介绍java中static关键字的作用1:为某特定数据类型或对象分配单一的存储空间,而与创建对象的个数无关。2:静态变量被所有的对象所共享,在内存中只有一个副本,它当且仅当在类初次加载时会被初始化。...
  • 主要介绍了Java局部变量线程安全原理分析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
  • 局部变量的生命周期取决于方法,当方法被调用时,Java虚拟机为方法中的局部变量分配内存空间,当方法的调用结束后,该方法中局部变量占用的内存空间将被释放并被销毁掉。可以声明一个与成员变量同名称的局部变量,此...
  • Java 中,类变量,实例变量可以不经过主动赋值就直接使用,而局部变量在不主动赋值的情况下,是无法使用的。在下面分析一下这个原因:1. 类变量类变量的赋值有两次,两次都在类加载的过程中,类加载可以简单的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 300,841
精华内容 120,336
关键字:

java怎么调用局部变量

友情链接: wnsxtqdcx.zip