码迷,mamicode.com
首页 > 其他好文 > 详细

问题汇总(一) ----------2019/2/22

时间:2019-02-22 12:17:50      阅读:184      评论:0      收藏:0      [点我收藏+]

标签:类加载   rgs   可变   局部变量   main   字符   需要   serial   hid   

第一次写,就先不弄样式了 ^_^
以后攒五个或以上就发一版

问题概括:
1、为何main(主)函数中不能直接调用成员变量:
  1)成员函数内部为何不可以定义静态变量:
2、控制访问权限修饰符、static都不能修饰局部变量、局部函数、局部内部类
 1)内部类访问局部变量的时候,为什么变量必须加上final修饰(转,转2)
3、@SuppressWarnings(unused) 、serial与rawtypes
4、String为什么不可变
5、形参的可变参数的定义(如String... args)(转)

问题回答:
1、为何main(主)函数中不能直接调用成员变量:
 因为主函数是static函数,不可以直接调用非静态变量和非静态方法。(在JAVA中静态函数和变量不依赖对象,独立存在,而非静态函数和变量需要依赖对象才能建立)

  解决方法:
    a、将变量变成静态变量,再在调用时用实例名调用或类名调用(推荐使用类名调用,可以直观知道是静态方法或变量)
    b、实例化该类,用实例名调用
    c、将方法改成非静态方法(主函数中不推荐)

引申问题:
1)成员函数内部为何不可以定义静态变量:
    有两种想法:
        a、static只能修饰成员变量或成员方法。不能修饰局部变量。在Java 中,用static 修饰的成员 被视为共享的。定义在方法中,被视为局部的。显然是不能共享的。
                                                                                                                                                                      ——引自https://zhidao.baidu.com/question/281363843.html
        b、静态变量和方法在JAVA运行就产生,而成员函数依赖对象建立,不一定存在,在一个不一定存在的方法里定义一个跟定会产生的变量,前后矛盾。
        

2、控制访问权限修饰符、static都不能修饰局部变量、局部函数、局部内部类
 因为不管是局部变量,还是局部函数,或是局部内部类都是在成员函数内定义的,本身就只能在成员函数内被调用,外部不可以调用,已经有了限制,所以不能用控制访问权限修饰符修饰,而成员函数是依赖对象存在的,随着对象的回收而销毁;static修饰的变量和函数在类加载的时候被创建,随着类的回收而销毁。

引申问题:
1)内部类访问局部变量的时候,为什么变量必须加上final修饰                                                                  ——引自https://feiyeguohai.iteye.com/blog/1500108
    final从语法上约束了实际上两个不同变量的一致性(表现为同一变量)

3、@SuppressWarnings(unused) 、serial与rawtypes

 @SuppressWarnings 标示下面的{ }或者一句代码忽略
 unused 用于我们有时拿出来的变量过多,却有些多余或者没有当前用到,则可以用它;
 serial 主要用于我们的实体类,序列化后没有加serialVersionUID,可以加上;
 rawtypes 压制警告,常用与压制泛型的警告。
 @SuppressWarnings("all") 抑制所有类型的警告

4、String为什么不可变
 String类本质都是对字符数组的封装(而且value也只是一个引用,它指向一个真正的数组对象)。该数组value被声明为私有,外部便无法直接访问该成员,并且加以final修饰 , 源码中也没有提供value的set方法,因此只能对value赋值一次,所以String类一旦初始化,外部便无法修改,因为value被修饰为 private final,在String类内部也无法改变。所以String对象是不可变的。

5、形参的可变参数的定义(如String... args) ——引自https://www.cnblogs.com/imqsl/p/6872390.html
 String[] args 和 String... args 本质上不没有什么区别,String... args 最后还是转化成String[] args 来做的,只是String... args这种形式在应用上更加的灵活和简便。

备注:1、成员变量叫实例变量,静态变量叫类变量。

问题汇总(一) ----------2019/2/22

标签:类加载   rgs   可变   局部变量   main   字符   需要   serial   hid   

原文地址:https://www.cnblogs.com/violet-enter/p/10417123.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!