Java学习Day2:方法、数组与面向对象入门实战

发布时间:2026/9/28 7:54:49
Java学习Day2:方法、数组与面向对象入门实战 1. 第二天的学习规划先把路线定清楚再动手敲代码很多自学者卡在Java入门阶段不是因为智商不够而是因为第一天学完变量、数据类型和if/else之后第二天不知道往哪儿走。“JAVA学习Day2”这个阶段正是承上启下的关键节点语法基础刚有了点感觉离面向对象还差一步离写出像样的程序还差得远。如果第二天只是继续刷语法题第三天大概率就会忘掉一半如果直接去啃Spring、MySQL这种框架和生态的东西那纯粹是自己给自己挖坑。我的建议是Day2应该集中火力搞定三块方法、数组、面向对象入门。这三块是Java语法向后端开发过渡的地基。方法解决的是“代码怎么组织”数组解决的是“多数据怎么存”面向对象解决的是“真实业务怎么抽象”。热搜词里反复出现的“java基础”、“java入门”、“java数据类型”其实本质都在这个范围内打转。你去看任何一套java基础面试题前二十道里有一半以上都在问“方法重载”、“数组内存”、“封装继承多态”这就是Day2必须吃透的方向。这里要先破除一个误区Day2并不需要面面俱到。网上那些“Java学习路线图超全超详细”动不动就列几十个模块从基础语法到框架到微服务一条龙看着热血沸腾真正执行起来完全不是那么回事。第二天最合理的状态是能独立写出包含自定义方法、数组遍历和简单对象操作的代码能把“类、对象、构造器、封装”这四个词讲明白能手写一遍冒泡排序并说出它的时间复杂度。做到这些Day2就算超额完成任务了。提示学习路线不是看一遍就完事的。把路线图当成地图每天只走一小段。Day2走完“方法→数组→面向对象→常用类”这一小段比囫囵吞枣扫完整个地图有价值得多。2. 方法与重载先理解栈帧和参数传递再写代码方法Method在Java里就是一段命名的代码块用来完成一个独立功能。Day2学方法不是光知道怎么定义和调用就结束了而是要弄明白一个核心问题方法在被调用时Java虚拟机底层到底做了什么。2.1 方法的定义、调用和形参实参先看最基础的写法。定义一个方法的完整语法是修饰符 返回类型 方法名 参数列表 方法体。比如public static int add(int a, int b) { return a b; }这段代码里的a和b叫形参在方法调用时传入的3和5叫实参。形参是方法内部使用的局部变量实参是调用方提供的数据。这个区分看着简单但很多人在后面学框架的时候会栽跟头——他们不理解为什么方法里改了参数的值外面的变量却纹丝不动。方法调用时JVM会在栈内存中为每个方法分配一块空间叫栈帧。栈帧里放着形参、局部变量和方法返回地址。方法执行完栈帧被弹出回收。所以方法内的变量都是临时的方法结束就没了。这个机制解释了为什么方法内部能随意使用局部变量也解释了为什么需要返回值——方法对外界的输出只能通过返回值传递。2.2 方法重载为什么编译器知道该调用哪一个方法重载是Day2必须掌握的概念也是面试题“java基础面试题”中的高频点。重载的定义是在同一个类中多个方法有相同的方法名但参数列表不同参数类型、参数个数、参数顺序不同与返回值无关。public static int add(int a, int b) { return a b; } public static double add(double a, double b) { return a b; } public static int add(int a, int b, int c) { return a b c; }这里有两个add(int a, int b)和add(double a, double b)调用add(1.5, 2.5)时编译器会根据实参类型自动选择第二个方法。重载的意义在于降低使用者的记忆成本——同一个行为相加只是参数形态不同没必要起三个方法名。我平时带新人最常提醒的一点是重载只是同名不同参别把重载和重写Override混在一起。重写是子类对父类方法的重新实现发生在继承关系中本质是面向对象多态的表现而重载是编译期的行为编译器在编译阶段就确定了到底调用哪个方法。这个区别在“java面试八股文”里几乎必问Day2先留个印象学完继承再回头对比理解会更深。2.3 值传递和引用传递一个最容易混淆的核心概念Java中的参数传递只有一种——值传递。但很多人看完String、数组、对象就能说得模棱两可。到底怎么回事基本类型int、double、boolean等作为参数时传递的是值的副本方法内修改参数不会影响外面的变量。引用类型数组、对象作为参数时传递的是引用的副本也就是把对象的地址值复制一份传给形参。方法内通过形参去操作对象能够改变对象的属性因为形参和实参指向的是同一个堆内存对象。public static void change(int num, int[] arr) { num 100; // 这个修改不影响外面 arr[0] 100; // 这个修改会影响外面的数组 }这段代码里num是基本类型的副本改了就改了arr虽然传的是副本但副本指向的地址和外面数组是同一个所以通过副本修改数组内容外面能看到。这个概念是理解Java数据处理的核心也是“java怎么保证数据一致性”这类进阶问题的底层基础。Day2不把这个想明白后面学集合、学事务、学并发每一步都会带着隐患。2.4 Day2学不学递归我的建议是只做了解递归是方法调用自身的一种编程技巧比如计算n的阶乘、遍历树形结构。不少教程Day2就讲递归但我个人的看法是第二天不要花太多时间在递归上能看懂入门案例就行。原因是递归非常考验抽象思维和调用栈的理解初学者很容易陷入“自己调用自己”的死循环出不来。与其在Day2消耗大量精力去画递归调用图不如先把线性结构的方法调用弄清楚。等后面学完二叉树、文件目录遍历等实际场景再回头深入递归效果会好得多。实操建议写一个用方法实现“成绩等级判断”的小程序输入分数输出A/B/C/D/E等级。这个练习能把方法定义、if分支、返回值三条线串起来十分钟写完收益比啃三小时理论高。3. 数组与基础算法内存分布要先于语法掌握数组是Java中存储同类型多个数据最基本的容器。Day2学数组重点不是声明语法那个五分钟就记住了而是理解它的内存分配机制和操作边界。热搜词“java容器”实际上包含了数组和集合两大类数组是容器的起点集合ArrayList、HashMap等是后续的进阶内容。Day2只要把数组吃透后面学集合就是降维打击。3.1 数组的声明、初始化和内存分配数组有两种声明方式int[] arr;和int arr[];。这里必须养成习惯一律使用int[] arr这种写法因为类型和变量名分得清楚更符合“这是一个int数组类型”的语义。int arr[]是C语言遗留下来的风格Java里虽然兼容但可读性差。数组的创建分两步声明在栈内存定义引用变量和new分配在堆内存开辟空间。以int[] arr new int[5];为例JVM会在堆内存划分一块连续的空间分为5个int大小的格子每个格子默认值为0。arr变量本身只是栈内存中的一个引用存放的是堆内存这块空间的地址。数组一旦创建长度不可变。这个限制是新手踩坑的重灾区很多人想在数组里加一个元素发现越界然后开始怀疑人生。数组的长度固定特性决定了它适合“数量确定”的场景而动态增删的场景应该交给ArrayList。Day2灌入这个认知后面学集合时自然理解为什么要有集合框架。3.2 数组的三种初始化方式数组初始化有三种写法每种都有各自的适用场景int[] arr1 new int[5]; // 动态初始化先给长度后赋值 int[] arr2 new int[]{1, 2, 3, 4, 5}; // 静态初始化完整写法 int[] arr3 {1, 2, 3, 4, 5}; // 静态初始化简写只能在声明时用第一种适合先占位置后填充数据的场景比如从键盘读取用户输入后存入数组第二种和第三种适合数据内容已知的场景。这里有个细节new int[]{1,2,3}可以单独作为匿名数组在方法调用中传参但{1,2,3}简写不行它只能出现在声明语句里。这个坑在写代码时经常遇到记一下能少踩一次错。数组遍历是最基础的操作两种方式都要熟for (int i 0; i arr.length; i) { System.out.println(arr[i]); } for (int num : arr) { System.out.println(num); }第一种是普通for循环能拿到索引适合需要知道元素位置的场景第二种是增强forforeach适合只读遍历拿不到索引。很多初学者一上来就习惯用增强for等到需要找到“数组里第几个元素满足条件”时就傻眼了——增强for里没有计数器位置信息。我的建议是刚开始写数组遍历老老实实用普通for循环把索引逻辑练熟增强for可以作为后边的语法糖补充。注意访问数组时索引从0开始最大有效索引是length-1。访问arr[length]会抛出ArrayIndexOutOfBoundsException数组越界异常。这道题在“java基础题目的网站”上出现的频率极高属于基础中的基础。3.3 手写冒泡排序第一道必会的算法题热搜词里“冒泡排序java”高频率出现不是没有原因的——它是绝大多数Java初学者接触的第一个算法也是面试时手写算法题的入门门槛。Day2就把冒泡排序搞定后面学选择排序、插入排序、二分查找会顺畅很多。冒泡排序的核心思想重复地走访要排序的元素列依次比较两个相邻元素如果顺序错误就交换。每一轮下来最大的元素会像气泡一样“浮”到末尾。public static void bubbleSort(int[] arr) { int temp 0; for (int i 0; i arr.length - 1; i) { for (int j 0; j arr.length - 1 - i; j) { if (arr[j] arr[j 1]) { temp arr[j]; arr[j] arr[j 1]; arr[j 1] temp; } } } }这段代码里外层循环控制总共需要比较多少轮n-1轮内层循环控制每轮比较多少次n-1-i次因为每轮结束都有一个最大值被固定到末尾下一轮不需要再和它比较。两个关键点为什么内层条件是arr[j] arr[j 1]这是升序排列。如果改成就是降序。为什么每次比较都要考虑两个相邻元素的交换因为比较和交换是冒泡排序的基本动作。冒泡排序的时间复杂度是O(n²)空间复杂度是O(1)。在最坏情况数组完全逆序下每一轮都要执行最多n-1次比较总共约n²/2次。在最好情况数组已经有序下用优化版加一个flag可以在第一轮结束时提前退出时间复杂度降为O(n)。优化版的冒泡排序是面试加分项Day2能写出来就很不错了。手动跑一遍例子数组[5, 1, 4, 2, 8]第一轮结束后变成[1, 4, 2, 5, 8]最大元素8被交换到最后第二轮结束后变成[1, 2, 4, 5, 8]第三轮比较[1,2,4]已经有序但程序还会跑完所有轮次不加flag的话。这就是为什么推荐加优化flag的原因。3.4 数组的复制、排序API和main方法参数除了自己写算法Java标准库也提供了现成的数组工具类java.util.Arrays比如Arrays.sort(arr)对数组进行升序排序底层是双轴快速排序效率高于手写冒泡、Arrays.toString(arr)输出数组内容、Arrays.copyOf(arr, len)复制数组。Day2可以用API做辅助但建议还是先把底层逻辑手写一遍因为面试问“排序算法”往往是让手写而不是让你答API名。main方法签名public static void main(String[] args)其中的String[] args就是用来接收命令行参数的数组。很多初学者只把这个签名当作固定模板背下来其实它的作用可以在控制台运行时传入参数java MyClass arg1 arg2 version在类中使用args[0]、args[1]即可取值。这个知识点在开发中不常用现代应用大多用框架或配置中心但它是理解“程序和外部环境如何交互”的第一课Day2知道即可不用深入研究。4. 面向对象把生活逻辑映射成代码面向对象编程OOP是Java的核心也是“java基础面试题”和“面向对象编程java”两个热门搜索词背后的根本原因。Day2进入面向对象不是要求你立刻写出漂亮的设计模式而是要把“类、对象、封装、构造器”这四个最基础的概念刻进脑子里。4.1 类与对象图纸和实物的区别类的本质是一张图纸描述一类事物的属性和行为。对象的本质是根据图纸创建的具体实例。用学生举例Student类描述学生应该有学号、姓名、成绩这些属性以及学习、考试这些方法而new Student(张三, 1001, 88)则创建了一个具体的张三对象。public class Student { String name; int id; int score; public void study() { System.out.println(name 正在学习); } }这里有个细节需要注意类中定义的属性如果不加访问修饰符默认是包私有package-private同一包内的类可以访问。Day2阶段先了解这个概念真正规范的做法是在属性上加private通过公共方法暴露访问入口——这就是封装。创建对象的语法是new Student()执行过程分两步在堆内存中开辟对象空间然后调用构造器完成初始化。对象变量持有的并不是对象本身而是指向堆内存空间的引用地址值。两个对象变量指向同一个地址时通过任何一个变量修改对象属性另一个变量读取到的都是修改后的值。4.2 构造器初始化对象的关键入口构造器是创建对象时调用的特殊方法方法名必须与类名完全一致没有返回值类型。它的作用是在对象创建时执行必要的初始化逻辑比如给属性赋初值。public class Student { private String name; // 无参构造器 public Student() { name 未知; } // 带参构造器 public Student(String name) { this.name name; } }如果一个类没有显式定义任何构造器编译器会自动添加一个无参构造器。只要你手动定义了任何一个构造器无论有参无参默认的无参构造器就不会自动生成了。这个坑在以后写代码时经常遇到你定义了一个带参构造器然后在别处用new ClassName()创建对象结果编译报错——因为没有无参构造器。这个细节要记住。4.3 封装为什么要用private修饰属性封装是指将对象的属性和实现细节隐藏起来对外只暴露必要的公共方法。简单说外部不能直接操作对象的内部数据必须通过方法进行读写。这样做的好处是可以在读写方法中加入校验逻辑。public class Student { private int score; public int getScore() { return score; } public void setScore(int score) { if (score 0 || score 100) { System.out.println(成绩必须在0到100之间); return; } this.score score; } }如果没有封装student.score 9999;这条语句就能直接把成绩改成一个不合理值。有了setScore方法做范围校验就能拦住这种非法操作。现实中成绩、工资、年龄等数据都有业务规则封装就是把这些规则固化到代码里的手段。这就是为什么java基础面试题里总有“什么是封装封装有什么好处”的原因。4.4 this关键字和对象数组入门最常见的两个卡点this在Java中代表当前对象。在构造器和方法中使用this.name name可以解决成员变量和参数重名的问题。这个逻辑在Day2不难理解但很多新手写代码时容易漏写this导致赋值失败。漏写的结果很隐蔽参数name把自己赋给自己成员变量name还是默认值null。排查半天才能发现。对象数组是数组和面向对象的结合数组元素不是一个基本类型数值而是一个对象引用。创建对象数组时出问题的概率非常高Student[] students new Student[3]; students[0] new Student(张三, 1, 88);很多新手写Student[] students new Student[3];之后立刻去访问students[0].name结果抛NullPointerException。原因在于这句话只是创建了数组容器三个格子都是空的null必须逐个new出对象填进去才能访问属性。这个陷阱几乎每个人都会踩一次Day2踩了并搞清楚原理后面就再也不怕了。注意对象数组的元素初始值是null访问null的任何属性都会报空指针异常。先new对象赋值再访问属性这是正确处理顺序。4.5 再谈构造器中的访问权限和默认值问题创建对象的时候JVM会先给所有成员变量分配默认值——基本类型int默认0、boolean默认false引用类型默认null。构造器的作用是在这个基础上做自定义初始化。很多时候你不需要把所有属性都在构造器里赋完可以留到setter方法里设置。但要注意已经初始化过的引用类型属性如果后续通过setter修改为null代码会留下空指针隐患这个需要在写业务逻辑时做好非空校验。5. String与StringBuilder两个高频API练熟字符串问题不再发怵到了Day2你已经能用方法、数组和类做不少事字符串处理是绕不开的。不管是写日志、发HTTP请求还是做数据处理字符串都是最常见的操作对象。热搜词“java stringbuilder”的出现说明大家都在这个知识点上产生过困惑今天把String和StringBuilder一起理清楚。5.1 String的不可变性为什么s x很低效String对象一旦创建内容就不会改变。String s hello; s s world;这段代码并没有修改原来的字符串对象而是创建了一个新的字符串对象“hello world”并把s的引用指向新对象。原来的“hello”对象仍然存在只是失去了引用等待被垃圾回收。这个设计是出于安全性和性能的考虑——字符串在很多场景下被当作常量使用比如哈希表的key如果它可变哈希值就会变化数据就找不到位置了。但不可变性带来的问题就是频繁拼接字符串会不断创建新对象消耗内存和时间。在循环里拼接几千次字符串性能就会明显下降因为每次都创建新对象并拷贝字符数组。5.2 String常用方法这些是实际开发中使用率最高的String类的API几十个Day2只需要掌握最高频的一组length()返回字符串长度charAt(int index)获取指定位置的字符substring(int beginIndex, int endIndex)截取子串indexOf(String str)查找子串第一次出现的位置找不到返回-1equals(String other)比较内容是否相等split(String regex)按分隔符拆分成数组contains(CharSequence s)判断是否包含子串replace(char oldChar, char newChar)替换字符特别注意字符串比较不能用因为比较的是引用地址不是内容。abc abc有时候返回true常量池中的同一个对象但new String(abc).equals(abc)一定返回true。day2记牢“字符串比较一律用equals”后面就不会被坑。空串和null的区别也要清楚是长度为0的字符串对象null表示引用为空。5.3 StringBuilder和StringBuffer拼接字符串的正确姿势当需要频繁拼接字符串时应该使用StringBuilder。它是一个可变的字符序列内部维护一个字符数组拼接操作直接修改这个数组避免了反复创建新对象。StringBuilder sb new StringBuilder(); for (int i 0; i 10000; i) { sb.append(i); } String result sb.toString();StringBuilder的常用方法包括append()在末尾追加内容insert(int offset, String str)在指定位置插入replace(int start, int end, String str)用新内容替换指定范围reverse()反转字符串toString()转换为不可变的String还有StringBuffer它和StringBuilder用法几乎相同但StringBuffer的关键方法加了synchronized关键字是线程安全的。因此单线程环境下用StringBuilder速度更快多线程共享同一个字符串构建器时才需要考虑StringBuffer。初学者Day2用StringBuilder就够了但面试题可能会拿“StringBuilder和StringBuffer的区别”来考能说出“前者非线程安全但效率高后者线程安全但略慢”这个关键点就算合格。小技巧String str a b c;编译器在编译期会直接优化为String str abc;并不会多次创建对象。但如果是循环内动态拼接编译器无法优化此时必须用StringBuilder。5.4 字符串常量池理解new String(abc)和abc的区别Java为了节省内存在方法区Java 7之后移到堆中设置了一个字符串常量池。直接用双引号创建字符串时JVM会先在常量池中查找是否已存在内容相同的字符串如果不存在则创建并放入常量池如果存在则直接复用池中的引用。所以String a abc; String b abc;中a和b指向同一个对象。而new String(abc)则不同它先在常量池中确保存在“abc”如果没有则创建然后在堆内存中创建一个新的字符串对象所以new String(abc) abc结果是false。要比较内容还是用equals。这个知识点在“java面试八股文”中反复出现Day2只要记住结论、理解对象引用区别到后面学完JVM再看会更有收获。6. Day2实战把方法、数组和面向对象串起来写一个学生成绩管理小工具理论说再多不落地就是零。第二天最值得做的练习就是写一个结合方法、数组和面向对象的完整小程序。建议上午学完概念后下午花两三个小时完成下面这个任务。这个任务的综合设计能帮你在Day2把所有知识点融会贯通。6.1 案例需求设计设计一个“学生成绩管理工具”控制台程序功能要求定义一个Student类属性包括姓名和成绩私有化并生成getter/setter。在main方法或工具类中定义一个方法通过键盘输入创建学生对象。定义一个方法接收Student数组作为参数打印所有学生信息。定义一个方法接收Student数组返回成绩最高的学生对象。定义一个方法按成绩从高到低对Student数组进行冒泡排序。main方法中实现整体流程创建多个学生打印信息查找最高分排序后再打印。第一步定义Student类public class Student { private String name; private int score; public Student() { } public Student(String name, int score) { this.name name; this.score score; } public String getName() { return name; } public void setName(String name) { this.name name; } public int getScore() { return score; } public void setScore(int score) { this.score score; } Override public String toString() { return Student{name name , score score }; } }这里有两个细节无参构造器必须显式写出否则后面在main方法里直接用无参构造器创建对象会编译失败toString()方法重写后打印对象时输出的才是内容而不是引用地址不重写的话输出类似Student2f0e140b的乱码。第二步写业务逻辑类import java.util.Scanner; public class StudentManager { public static void main(String[] args) { Student[] students new Student[3]; Scanner scanner new Scanner(System.in); for (int i 0; i students.length; i) { System.out.print(请输入第 (i 1) 个学生的姓名); String name scanner.nextLine(); System.out.print(请输入第 (i 1) 个学生的成绩); int score Integer.parseInt(scanner.nextLine()); students[i] new Student(name, score); } System.out.println(所有学生信息); printStudents(students); Student topStudent findTopStudent(students); System.out.println(最高分学生 topStudent.getName() 成绩 topStudent.getScore()); System.out.println(按成绩排序后); sortStudentsByScore(students); printStudents(students); scanner.close(); } }第三步补充工具方法。这些方法可以放在同一个类中也可以单独写一个StudentUtil工具类。Day2建议直接都放在StudentManager类中等学到static与非static的区别后再拆分。public static void printStudents(Student[] students) { if (students null || students.length 0) { System.out.println(学生列表为空); return; } for (Student stu : students) { System.out.println(stu); } } public static Student findTopStudent(Student[] students) { if (students null || students.length 0) { return null; } Student top students[0]; for (int i 1; i students.length; i) { if (students[i].getScore() top.getScore()) { top students[i]; } } return top; } public static void sortStudentsByScore(Student[] students) { for (int i 0; i students.length - 1; i) { for (int j 0; j students.length - 1 - i; j) { if (students[j].getScore() students[j 1].getScore()) { Student temp students[j]; students[j] students[j 1]; students[j 1] temp; } } } }注意这个排序是降序students[j].getScore() students[j 1].getScore()时交换把小的往后挪。分数相等时不交换所以冒泡排序是稳定的排序算法相等元素不会交换位置顺序保持原状。整个程序跑完你会发现自己已经完成了Day2的四大目标掌握方法定义和重载、熟练数组创建和遍历、理解类与对象、会用String类处理输入输出。这个小工具是后面学习继承、接口、集合、异常处理的最佳演练场地——后续完全可以给Student增加更多字段、把数组换成ArrayList、把控制台输入换成文件读取一步一步升级。6.2 环境配置和编译常见问题Day2最容易卡壳的几个点学习Day2期间环境问题是拦路虎。很多问题看起来是代码错误实际上是JDK配置问题。搜到最多的“java环境变量配置”相关搜索词背后往往就是JAVA_HOME、PATH、CLASSPATH调不对或者版本不匹配。最常见的报错信息是java: 警告: 源发行版 17 需要目标发行版 17这个警告意味着你的代码是用Java 17的语法级别编译的但IDE或构建工具中的目标发行版配置与之不匹配。解决办法有两种在IDEA中打开“File → Project Structure → Project Settings → Project”把SDK和Language Level都设置成同一个版本或者在pom.xmlMaven项目中配置maven.compiler.source和maven.compiler.target为相同值。类名和文件名不一致会报“类不匹配”错误数组越界、空指针、Scanner资源未关闭也都是Day2高频问题。这里罗列一下Day2实战中最常见的几个报错及排查方向报错信息原因排查方向ClassNotFoundException编译后类文件丢失或包结构错误检查classpath是否包含编译输出目录ArrayIndexOutOfBoundsException访问数组索引超出0到length-1范围检查for循环起始和结束条件NullPointerException对象或数组元素为null就访问成员打印变量确认是否为nullcannot find symbol: Scanner没有import java.util.Scanner补上import语句incompatible types类型不匹配比如返回值类型写错核对方法返回类型与return语句Intellij IDEA 编译不生效构建缓存或SDK版本不对清理缓存或重新配置Project SDK提示遇到编译错误不要慌不要盯着代码发呆。先看报错信息和行号定位到具体那一行再依据上面的表格对照排查。自己排查出来的错误印象远比问别人深刻。6.3 Day2学完后该达到什么水平学完Day2你应该能独立完成这些事情正确写出带参数、带返回值、带重载的方法并讲清楚方法的执行流程创建数组并遍历理解数组的内存分布和长度固定特性手写冒泡排序含优化版并能说出每一轮交换的逻辑定义类、创建对象、使用构造器、理解this、掌握封装的基本写法熟练使用String的常用方法和StringBuilder完成字符串拼接独立完成“学生成绩管理工具”这个小项目如果上面这些还达不到不需要焦虑再花一天时间巩固就好。学习方法上没有捷径最好的路径就是动手写一个案例写三遍也比看三遍教程有用。写的过程里遇到报错记下来等整个流程跑通了回顾那些报错会特别有价值——它们就是你真正的学习收获。6.4 扩展思考Day2之后怎么往深处走Day2把这些基础内容敲扎实之后Day3就可以自然过渡到学习继承extends、多态dynamic binding、抽象类和接口——这些是“面向对象编程java”的核心进阶题。到那时你会发现Day2学的方法重载、this用法、构造器设计全部都是理解继承和多态的垫脚石。建议接下来按这样的节奏推进Day3继承、访问修饰符、方法重写、super关键字Day4抽象类与接口、多态应用Day5异常处理、包装类这个节奏不激进也不拖沓正好能把面向对象的剩余部分全部覆盖。另外Day2的实战案例本身就是绝佳的扩展素材Student类加字段模拟更复杂的业务、打印数组改用foreach、冒泡排序改造成工具类、把输入输出往里优化这些都能作为Day3练习的前置。保持“边学边写小工具”的节奏一个月后你完全可以看懂“java课程设计案例源码”这类资源再往后能自己动手做课程设计了。从Day2开始每次学完一个知识点就问自己三个问题这个知识点解决了什么问题不用它的话会出现什么后果这个知识点和学过的哪些内容有联系这三个问题想清楚你的Java基础就打牢了。后续不管学框架、刷面试题还是看源码都能走得更稳。

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询