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

简介: JavaSE学习之常见易错点总结--第一期

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

作者:Mylvzi

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

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

 先来看如下代码:

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

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

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

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

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

判断如下代码能否进行:

public class Test { 
    public int aMethod(){
        static int i = 0;
        i++; 
        return i;
    } 
public static void main(String args[]){
    Test test = new Test(); 
    test.aMethod(); 
    int j = test.aMethod();
    System.out.println(j);
    } 
}// 编译失败

 分析:

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

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

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

 

再来看一个代码(易错)

package NowCoder;
class Test {
  public static void hello() {
      System.out.println("hello");
  }
}
public class MyApplication {
  public static void main(String[] args) {
    // TODO Auto-generated method stub
    Test test=null;
    test.hello();// 编译成功  打印hello
  }
}

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

总结:

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

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

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

5.toString方法的改写

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

源码:

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

题目:

class Test{ 
  public String toString() {
    System.out.print("aaa");
    return "bbb";
  }
}
public static void main(String[] args) {
    Test test = new Test();
  System.out.println(test);
    // 输出aaabbb
    // 会调用上面你自己写的toString方法
}

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

目录
相关文章
|
6月前
|
Java 编译器
JavaSE基础精选-1基础语法
JavaSE基础精选-1基础语法
35 0
|
6月前
|
分布式计算 Oracle Java
第一篇CSDN博客——Java入门指南:学习Java编程的第一步
第一篇CSDN博客——Java入门指南:学习Java编程的第一步
【JavaSE】Java基础语法(十九):接口新特性
1. 接口组成更新概述 常量:接口可以定义全局常量,使用关键字public static final修饰。 抽象方法:接口中可以定义抽象方法,使用关键字public abstract修饰。实现类必须实现接口的所有抽象方法。
|
11月前
|
安全 Java 数据中心
惊讶!阿里大佬总结的图解Java小册火了,完整版笔记开放下载
Java是Sun Microsystems于1995年首次发布的一种编程语言和计算平台。 Java是快速,安全和可靠的。从笔记本电脑到数据中心,从游戏机到科学超级计算机,从手机到互联网,Java无处不在!
|
消息中间件 缓存 Java
经过阿里四面而形成的10万字java面试题及答案文档到底有多牛?
首先,给大家介绍一波小伙伴的阿里java岗四面问到的面试题问题分享,大家可以仔细来看看! 一面,问了数据结构、jvm、锁等~
|
SQL 缓存 分布式计算
GitHub上超屌的Java进阶教程,Java核心技术及大公司架构案例汇总
汇总Java生态圈常用技术框架、开源中间件,系统架构、数据库、大公司架构案例、常用三方类库、项目管理、线上问题排查、个人成长、思考等知识
|
算法 Java
【JavaSE成神之路】数组思考题讲解
哈喽,我是兔哥呀,今天就让我们继续这个JavaSE成神之路! 这一节啊,咱们要学习的内容是数组的思考题讲解,也就是上一节我留下的两个小作业。
106 0
|
算法 Java Android开发
|
Java
java学习第八天笔记-方法164-文字版格斗游戏
java学习第八天笔记-方法164-文字版格斗游戏
154 0
java学习第八天笔记-方法164-文字版格斗游戏
|
Java
java学习第八天笔记-方法165-文字版格斗游戏
java学习第八天笔记-方法165-文字版格斗游戏
87 0
java学习第八天笔记-方法165-文字版格斗游戏