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

第一次写,就弄弄简单样式 😆
以后攒五个或以上就发一版


问题概括: 1. 为何main(主)函数中不能直接调用成员变量: 1). 成员函数内部为何不可以定义静态变量: 2. 控制访问权限修饰符、static都不能修饰局部变量、局部函数、局部内部类 1). 内部类访问局部变量的时候,为什么变量必须加上final修饰(转) 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修饰(         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)():    String[] args 和 String... args 本质上不没有什么区别,String... args 最后还是转化成String[] args 来做的,只是String... args这种形式在应用上更加的灵活和简便。



...未完待续

还有第一次弄Markdown格式好累啊

:tea: :tea:
posted @ 2019-02-22 11:04  起名难233  阅读(223)  评论(0)    收藏  举报