Java入门快速通关笔记
双非大二冲 Java 后端实习|Java 基础入门笔记
作为一名双非大二软件工程专业的学生,现阶段正朝着 Java 后端实习的目标发力。回顾 Java 入门阶段的学习,从环境搭建到基础语法,再到流程控制,看似简单的知识点里藏着不少容易踩的坑。结合之前学习中遇到的疑问和踩过的雷,我将 Java 基础核心概念、流程控制关键要点 以及入门阶段的高频疑问,整理成这篇入门笔记。既作为自己的知识复盘,也希望能给和我一样的初学者提供一些参考。
一、开篇说明:入门笔记的定位
本篇笔记聚焦Java 入门核心模块,涵盖「Java 基础语法」「Java 方法」「Java 流程控制」三大板块。前期学习时节奏较快,由于并未一开始使用该博客记录Java的日常学习,对部分基础概念并未做出实时的总结的层面,缺乏系统梳理;从数组章节开始,我会进行精细化学习并实时记录。因此,本篇笔记主要对前期核心知识点进行重点提炼和误区总结,搭配简洁的代码示例和易懂的解析,帮自己夯实基础,为后续数组、面向对象等核心内容的学习铺路。
(同理,在数组之前的基础Java代码我在idea上有过大量的基层代码编写,但在这里为了学习进度的关系我就不附加代码解释了,但在数组之后的学习还有之前的重要代码我会做些许的整理)
二、Java 基础语法:入门必避的“基础坑”
Java 基础语法是构建所有程序的基石,看似简单的关键字、数据类型、输入输出,实则藏着很多初学者容易忽略的细节。结合之前的学习疑问,我将核心知识点和易错点以及目录整理如下:
目录:
1.数据基础认知
2.流程控制使用
3.流程控制题+解
4.方法的运用
===============================================================
1.数据基础认知
1.1数据类型:别混淆基本类型与引用类型
这是入门阶段最容易模糊的概念,尤其是在后续学习方法传参时,这个知识点会直接影响对代码逻辑的理解。
1.2 基本数据类型(8种):直接存储数据值,占用固定内存空间,包括 byte 、 short 、 int 、 long 、 float 、 double 、 char 、 boolean 。
- 易错点: long 类型赋值时,必须在数字后加 L (如 long num = 10000000000L; ),否则会被默认当作 int 处理,导致数值溢出; float 类型同理,需加 F ,这是一些简单的代码规范,平时需要注意。
1.3引用数据类型:存储的是数据的内存地址,占用内存空间不固定,如字符串 String 、数组、类对象等。
- 易错点: String 是引用类型,而非基本类型,很多初学者会将其归为 8 种基本类型之一,这是核心误区。
- String在使用过程中需要注意首字母大小写的问题,这是第一步;然后还要对它的类型有了解,对于字符串的应用上多使用String,其实对于计算机底层的逻辑上讲,所有的字符(汉字等)都是另一种形式的编码代替,就像是在诺大的一本字典里寻找各自的代表文字等字符;
1.4自增自减运算符(新手容易踩坑)
- 第一是前置自增++a和后置自增a++的底层运行逻辑,这里要记清“先加后用”和“先用后加”的区别;第二是自增运算符在循环条件中的陷阱,比如for(int i=0;i<5;i++)和for(int i=0;i<5;++i)在单变量循环里效果一致,但在多变量嵌套循环里会有性能差异;第三是自增和赋值运算符的结合优先级问题,重点记住“赋值运算优先级低于自增运算”这个规则,避免a = b++这类表达式的计算错误。
1.5Java 包(package)与导入(import)核心笔记 包(package的作用:像“文件夹”一样,对类和接口进行分门别类,避免类名冲突,方便代码管理和维护。
- 多层包之间用英文句点 . 间隔。
- 命名形式通常为“公司域名倒序 + 项目名 + 模块名”,例如: com.amazon.data.entity (亚马逊数据实体包)。
- package 语句必须放在类文件的第一行,用来声明当前类属于哪个包。
- 示例: package com.example.demo; 导入(import)的作用:用来声明当前类中使用的其他类来自哪个包,让编译器能够找到并加载这些类。
- java.lang 包下的类(如 String 、 System 、 Math )是 Java 语言的核心类,JVM 会自动导入,因此使用时可以不写 import 语句。
- 语法示例:
- 导入单个类: import java.util.Scanner;
- 导入整个包: import java.util.*; (不推荐,会降低编译效率) 常见面试/实战拓展
- 静态导入(static import):可以直接导入类的静态方法和静态变量,使用时无需写类名。
- 示例: import static java.lang.Math.PI; 之后可直接写 PI 而非 Math.PI 。
- 包访问权限:如果一个类或成员没有访问修饰符(如 public 、 private ),则它具有“包访问权限”,即只能被同一个包内的其他类访问。
- 全类名使用:当两个不同包中有同名类时(如 java.util.Date 和 java.sql.Date ),必须使用全类名来区分,例如: java.util.Date now = new java.util.Date(); 。
2.流程控制使用
2.1 输入输出:Scanner 类的“换行符陷阱”
2.1.1 Scanner的输入代码格式为:Scanner sc = new Scanner(System.in);
<凡是io流的类如果不关闭将会一直占用资源,要养成好的代码习惯,用完就关闭>
sc.close();这就是调用位于Scanner类的一个close方法来达到释放资源的效果,前面的sc是创建出来的对象,调用对象的方法等同于调用大类的方法,这会在面向基础和方法中有所提及。
2.2在练习流程控制、算法题时, Scanner 类是最常用的输入工具,但它的 next() 和 nextLine() 方法极易混用出错,这也是我之前调试代码时遇到的高频问题,这两个方式属于Scanner类里面的两个方法,类其中还会有很多判断方法,提一嘴hasNextInt()和hasNextFloat(),他们都是判断条件,若下一个数位int或float类型就结束循环,通常是在if等判断或while等循环语句中的条件中出现。
以下代码是类似情况,对double类型的一个判断:
2.2.1 核心区别
- next() :只读取到空格为止,不会读取换行符,光标停留在当前行。
- nextLine() :读取整行内容,包括换行符,读取后光标移至下一行。 2.2.2 陷阱场景:当 next() 和 nextLine() 连续使用时, nextLine() 会读取到 next() 遗留的换行符,导致直接跳过输入。 解决方案:在 next() 后额外调用一次 nextLine() 吸收换行符
2.3 多种结构构建Java语法
【作者说:关于这个选择结构视频讲解内容比较简单,个人感觉也很好理解,代码上只用了三个简单代码实验,但是后面会有一个简单的小系统用到了if语句,switch语句,while循环还包括:方法调用,重载等手段,项目比较简单。纯手搓加上AI修正,后续会展现出来。当然这里的流程结构我会展现Switch选择结构和简单的for循环讲解,结构上也会有适当省略。】
主要内容及课题包括:顺序结构,if选择结构,Switch选择结构,while循环结构,dowhile循环结构,for循环结构以及break,continue等用法
2.3.1 Switch选择结构:
switch 语句常见陷阱
1. switch 只能判断:byte、short、int、char、String、枚举 不能判断 long、float、double、boolean,一用就报错。
2. case 后面必须是常量,不能是变量 例如 case a: 是错的,必须写固定值 case 1: 。
3. case 穿透问题(容易忘)
每个 case 结束必须写 break,否则会继续执行下面所有 case,这是最大漏洞。
4. default 可以写在任意位置,但建议放最后 如果 default 放前面又没 break,一样会穿透。
5. switch 不能写 > < >= <= 这种范围判断 switch 只能判断等值,不能判断区间,区间必须用 if。
6.基本语法:
case "c":
System.out.println("你学习的语言是c" );
break;
case "Python":
System.out.println("你学习的语言是Python" );
break;
case "go":
System.out.println("你学习的语言是go" );
break;
case "Java":
System.out.println("你学习的语言是Java");
break;
default:
System.out.println("Unknown");
System.exit(0);//若输出错误语言格式,这个用法将会在输出Unknown后结束,不会继续生成期末成绩
break;
<这是我做的关于编程语言与成绩分析的小系统上的代码内容,系统内运行基本完善,也有许多可以补充的内容,
但我打算后面学java可视化,javaweb和数据库系统原理的时候将这个系统做成网页版>
3.流程控制作业
【作者说:我在这里给了两道适合新手做的小题目,这两道题都运用了for循环plus版本,对新手理解for循环有极大的帮助,我在这里也深刻地认识并学习到for循环的基础嵌套。】
Problem 1:
P1.打印九九乘法表:
代码展示:
public static void main(String[] args) {
for (int i = 1; i <=9; i++) {
for (int x = 1; x <=i; x++) {
System.out.print(i + "*" + x + "=" + (x*i) + "\t" );
}
System.out.println();
}
}
运行结果展示:
Problem 2:
P2.打印三角形:(化简思想,大化小思想)
代码展示:
public static void main(String[] args) {
//打印三角形
for (int i = 1; i <= 5; i++) {
for (int j = 5; j >= i; j--) {
System.out.print(" ");
}
for (int j = 1; j <= i; j++) {
System.out.print("*");
}
for (int j = 1; j < i; j++) {
System.out.print("*");
}
System.out.println();
}
}
运行结果展示:
【作者说;在两个代码里,主要练习代码思维,就拿打印三角形代码中的4到5行代码输入空格来讲,就是三角形左边按一部分的倒直角三角形,等于说是把梯形左边的一部分挖掉了,这个运行过程有点难理解,就可以使用计算机编译器的断点调试方法来加深理解。在这两个题目代码中也共同涉及换行的大难题,比如说P1中的4,6行与P2中的5,8,11,13行的print与输出空格的输出语句,这是一个值得探讨与学习的地方,建议在循环中多使用多理解多收获。】
3.1 换行问题小总结
//println 输出完会换行
//print 输出完不会换行
/t 相当于“tab键”让控制台空格
4.方法的运用
【作者说;方法这一方面写的就比较少,因为上面很多的代码大多都离不开方法的调用比如代码程序的入口main方法就是一个非常常见且重要的方法,所以我主要说一下一些方法的调用格式和变量名(方法名)的规范,当然方法很多地方都会牵扯到面向对象基础,所以关于对象与方法之间的调用我也会在这里讲一小部分,在数组后面的面向对象章节我又会讲小部分。】
4.1 方法在类中的位置与归属
-
方法是类的重要组成部分,定义在类的内部、类方法之外(与成员变量同级)。
-
一个类可以包含多个方法,用于描述该类对象的行为或功能。
4.2 方法的调用方式
- 基于类创建对象(实例化)后,通过一定格式展现,代码展示;
类名 对象名 = new类名();
对象名.方法();
- 新创建的对象会自动拥有其所属类中定义的所有方法,可直接调用。->回顾2.1的内容中,Scanner中new出的新对象sc可以直接调用close(),Next()等方法。
4.3 方法的命名规范
-类成员/局部变量;首字母小写和驼峰原则 monthSalary(); -常量:大写字母和下划线 MAX_VALUE -类名:首字母大写和驼峰原则 Man,GoodMan -方法名:首字母小写和驼峰原则 run(),runRun()
4.4 方法与成员变量、局部变量的区分
- 成员变量(属性):定义在类内、方法外,属于类的属性,整个类内都可访问。
- 局部变量:定义在方法体内部,仅在该方法执行期间有效,方法执行结束后变量失效。