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

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

作者:Mylvzi

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

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

先来看如下代码:

java 复制代码
public static void main(String[] args){

  String s;

  System.out.println("s="+s);// 会输出结果吗?

}

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

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

java 复制代码
public class Test {
    // s作成员变量,会被赋默认值
    public static String s;

    public static void main(String[] args) {
        System.out.println(Test.s);// 打印:null
    }
}
java 复制代码
    public static boolean a;

    public static void main(String[] args) {
        System.out.println(a);// 输出false
    }

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

判断如下代码能否进行:

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中可以通过对象名访问类变量(但是不建议)

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
	}
}

再来看一个代码(易错)

java 复制代码
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方法

源码:

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

题目:

java 复制代码
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是导入指定包的类!

相关推荐
zhangrelay7 分钟前
如何使用AI快速编程实现标注ROS2中sensor_msgs/msg/Image图像色彩webots2025a
人工智能·笔记·opencv·学习·计算机视觉·机器人视觉
j_xxx404_12 分钟前
C++ STL:list|了解list|相关接口|相关操作
开发语言·c++
czhc114007566316 分钟前
Java114 LeeCode 翻转二叉树
java
一 乐17 分钟前
个人理财系统|基于java+小程序+APP的个人理财系统设计与实现(源码+数据库+文档)
java·前端·数据库·vue.js·后端·小程序
盖世英雄酱5813634 分钟前
java深度调试技术【第四五章:多线程和幽灵代码】
java·后端
脏脏a36 分钟前
类与对象(上):面向过程到面向对象的跨越,类的定义、封装与 this 指针等核心概念深度剖析
开发语言·c++
universe_011 小时前
前端学习css
前端·css·学习
稚辉君.MCA_P8_Java1 小时前
深入理解 TCP;场景复现,掌握鲜为人知的细节
java·linux·网络·tcp/ip·kubernetes
熊猫比分站1 小时前
[特殊字符] Java/Vue 实现体育比分直播系统,支持多端实时更新
java·开发语言·vue.js
lang201509281 小时前
深入掌握 Maven Settings:从配置到实战
java·maven