• Java学习之常见易错点总结--第一期


     💕"不要同情自己,那是卑劣懦夫干的勾当。"💕

    作者:Mylvzi 

     文章主要内容:Java学习之常见易错点总结--第一期 

    1.什么时候变量不用初始化?

      先来看如下代码:

    1. public static void main(String[] args){
    2. String s;
    3. System.out.println("s="+s);// 会输出结果吗?
    4. }

      显然这段代码无法通过编译,原因在于s是写在方法(函数)之内的,是局部变量,而局部变量必须进行初始化才能够使用!

      但是,有同学可能模模糊糊有印象说:好像有时候变量不初始化也能通过编译,会自动给变量赋默认值啊。是的,有这种情况,这种变量只能是“成员变量”

    1. public class Test {
    2. // s作成员变量,会被赋默认值
    3. public static String s;
    4. public static void main(String[] args) {
    5. System.out.println(Test.s);// 打印:null
    6. }
    7. }
    1. public static boolean a;
    2. public static void main(String[] args) {
    3. System.out.println(a);// 输出false
    4. }

    2. Java中不存在静态的局部变量,只有静态成员变量!

    判断如下代码能否进行:

    1. public class Test {
    2. public int aMethod(){
    3. static int i = 0;
    4. i++;
    5. return i;
    6. }
    7. public static void main(String args[]){
    8. Test test = new Test();
    9. test.aMethod();
    10. int j = test.aMethod();
    11. System.out.println(j);
    12. }
    13. }// 编译失败

      分析:

    3. 再次强调Java是一种强类型语言,对类型有着严格的区分

     4.Java中可以通过对象名访问类变量(但是不建议)

    1. public class HasStatic {// 1
    2. private static int x = 100;// 2
    3. public static void main(String args[]) {// 3
    4. HasStatic hsl = new HasStatic();// 4
    5. hsl.x++;// 5
    6. HasStatic hs2 = new HasStatic();// 6
    7. hs2.x++;// 7
    8. hsl = new HasStatic();// 8
    9. hsl.x++;// 9
    10. HasStatic.x--;// 10
    11. System.out.println(" x=" + x);// 11
    12. }
    13. }

     

    再来看一个代码(易错)

    1. package NowCoder;
    2. class Test {
    3. public static void hello() {
    4. System.out.println("hello");
    5. }
    6. }
    7. public class MyApplication {
    8. public static void main(String[] args) {
    9. // TODO Auto-generated method stub
    10. Test test=null;
    11. test.hello();// 编译成功 打印hello
    12. }
    13. }

      test引用被赋值为null,表示不指向任何对象,所以可以使用对象名来访问静态方法 

    总结:

      1.可以通过对象名来访问静态变量(但是不建议)

      2.类变量是所有对象共享的,存在于方法区。只有一份!无论是通过类访问还是对象名访问,都是对同一份变量进行操作!

    3.牢记一句话:“静态的就是类的”

    5.toString方法的改写

      在Java中println方法执行的过程中会自动调用一个方法-->toString,这个方法属于对象!也就是在执行println方法的过程中,编译器会从成员方法中寻找toString方法(平常只是隐藏了起来),如果你在成员方法中重写了一个toString方法,则println会执行你写的toString方法

    源码:

    1. public void println(Object x) {
    2. StringBuffer sb = new StringBuffer();
    3. sb.append(x);
    4. System.out.print(sb.toString());// 调用toString方法
    5. System.out.flush();
    6. }

    题目:

    1. class Test{
    2. public String toString() {
    3. System.out.print("aaa");
    4. return "bbb";
    5. }
    6. }
    7. public static void main(String[] args) {
    8. Test test = new Test();
    9. System.out.println(test);
    10. // 输出aaabbb
    11. // 会调用上面你自己写的toString方法
    12. }

    6. Import是导入指定包的类!

  • 相关阅读:
    ai实景直播矩阵式引流---技术开发搭建(剪辑、矩阵、直播)
    Java练习 day1(LeetCode简单题15道)
    SpringCloud--Nacos解析
    自动生成代码器推荐-code-gen
    Session认证机制与JWT认证机制
    java创建jar包并被项目引用——详细步骤
    Redis哨兵和集群模式
    matplotlib数据可视化
    分享一款Linux环境下常用的debug工具--GDB调试工具
    akshare量化是什么?有什么用?
  • 原文地址:https://blog.csdn.net/Mylvzi/article/details/132927637