作为一名Java编程初学者,我深知从零基础入门时的迷茫——面对陌生的语法规则、抽象的编程概念,常常会陷入“看懂了视频,合上书就忘”的困境。为了让学习更扎实、更有方向,我决定开启这份《Java基础班学习日志》,记录每天的学习内容、遇到的问题、踩过的坑以及总结的心得。
这份日志不仅是我的学习“成长手册”,也希望能为和我一样的Java新手提供参考:从环境搭建到核心语法,从面向对象到常用类,从集合框架到异常处理,每一步都有具体的学习过程和思考,让你少走弯路,更高效地掌握Java基础。
今天的任务是搭建Java开发环境。跟着教程安装了JDK(Java Development Kit),配置了环境变量(JAVA_HOME、Path、CLASSPATH)。一开始总报错“javac不是内部或外部命令”,检查发现是环境变量没配对,反复核对了好几遍才成功。
下午写了第一个Java程序:public class HelloWorld { public static void main(String[] args) { System.out.println(Hello World!); } }
。当控制台输出“Hello World!”时,真的有被成就感激励到!原来Java程序是这样运行的~
今天学习了Java的基本数据类型:整数(byte、short、int、long)、浮点数(float、double)、字符(char)、布尔(boolean)。最开始总混淆“byte”和“short”的取值范围,后来通过画数轴的方式理解了:byte是8位,范围-128~127;short是16位,范围-32768~32767,这样就清晰多了。
变量定义时踩了个坑:直接给int类型变量赋值10000000000,结果报错“过大的整数”,才想起int的最大值是2^31-1=2147483647,超过了需要用long类型(加L后缀)。看来定义变量时要先明确数据范围,避免“溢出”问题。
今天学习了if-else、switch-case条件判断,以及for、while、do-while循环。之前学过C语言,对循环结构比较熟悉,但Java的语法细节还是有差异,比如for循环的“变量初始化; 条件; 迭代”结构,以及增强for循环(for-each)遍历数组的用法。
最有收获的是“逻辑运算符短路”:&&和||在左边条件不满足时不会执行右边,比如“a>10 && b++”,如果a<=10,b就不会自增。这个细节在写代码时能避免很多隐藏的bug,需要记牢~
今天终于进入了Java的核心——面向对象!之前学过程序员说“面向对象是Java的灵魂”,现在才真正体会到。类是对象的模板,对象是类的具体实例,就像“汽车”是类,“红色的宝马”是对象。
练习写了一个“学生类”:包含属性(name、age)和方法(study()、sleep())。通过“Student s = new Student();”创建对象,用“s.name = 张三;”给属性赋值,用“s.study();”调用方法。这种“创建实例-操作实例”的方式,让代码更贴近现实世界的逻辑。
今天学习了封装、继承、多态,这三大特性是面向对象编程的核心。封装通过private修饰属性,提供public的get/set方法来访问,保证数据安全;继承通过extends实现,子类可以复用父类的属性和方法,还能重写父类方法;多态则是“同一行为,不同表现”,比如父类引用指向子类对象,调用方法时执行子类的重写版本。
多态的难点在于理解“编译时类型”和“运行时类型”的区别。比如“Animal a = new Dog(); a.eat();”,编译时a是Animal类型,所以只能调用Animal中定义的方法;运行时实际执行的是Dog类的eat()方法。通过写“动物-狗-猫”的继承链,终于把多态的逻辑搞明白了~
String类是Java中最常用的类,今天踩了个经典的“==”和equals()的坑:当用“==”比较两个字符串对象时,比较的是地址值;而equals()比较的是内容。比如“String a = abc; String b = new String(abc);”,a和b的地址不同,所以a==b是false,但a.equals(b)是true。
后来通过“字符串常量池”的概念理解了:a是常量池中的对象,b是堆内存中的新对象,地址自然不同。所以比较字符串内容必须用equals(),这是Java基础中的“高频考点”,必须记牢!
学习了try-catch-finally和throw/throws,终于知道怎么处理程序运行时的错误了!比如当用数组时访问越界(ArrayIndexOutOfBoundsException)、除以0(ArithmeticException),这些异常如果不处理,程序会直接崩溃。
通过try-catch捕获异常,用finally释放资源(比如IO流),让程序更“健壮”。比如写了一个“除法运算”的程序,用try-catch捕获ArithmeticException,提示“除数不能为0”,而不是直接报错退出。这让我意识到,优秀的代码不仅要能运行,还要能“友好地处理错误”。
Java集合框架是处理数据的“利器”,今天梳理了List、Set、Map三大接口的特点:List(有序可重复,如ArrayList、LinkedList)、Set(无序不可重复,如HashSet、TreeSet)、Map(键值对,如HashMap、TreeMap)。
最实用的是HashMap:键唯一,值可重复,适合存储“学生ID-学生信息”这样的映射关系。之前用数组存储数据时,查找需要遍历,而HashMap通过哈希表实现,查找效率是O(1),这就是数据结构的魅力!
1. 多动手:编程是“练”出来的,看100遍视频不如自己写10行代码,遇到问题先尝试自己解决,再查资料。
2. 做笔记:记录“概念理解”和“踩坑经验”,比如String的equals()和“==”的区别、多态的实现原理,这些笔记会成为后续复习的重点。
3. 结合场景学:比如学集合时,尝试用ArrayList存储多个学生信息,用HashMap存储“课程名-学分”,让知识和实际应用挂钩。
4. 别怕问题:遇到报错不要慌,学会看错误信息(如“NullPointerException”、“ClassNotFoundException”),通过搜索引擎(Google/Baidu)或Java文档(Oracle Docs)找答案,这是程序员必备的能力。
这份学习日志会持续更新,从Java基础到进阶知识,记录我的每一步成长。如果你也在Java学习的路上,欢迎在评论区分享你的学习进度和心得,我们一起打卡进步,成为更优秀的程序员!