本文基于已有js前端基础,从0学习java进行的笔记归纳,所以有部分知识点会略过!
Java学习路线可以分为以下几个阶段:(copilot回答)
-
Java基础:学习Java的基本语法,包括变量、数据类型、运算符、控制流程、数组等。
-
面向对象编程:理解类和对象的概念,学习封装、继承、多态等面向对象的特性。
-
Java核心类库:学习Java提供的核心类库,如集合框架、IO流、多线程、网络编程等。
-
数据库操作:学习JDBC,理解数据库的基本操作,如增删改查。
-
Java Web开发:学习Servlet、JSP、以及MVC设计模式,理解Web开发的基本流程。
-
框架学习:学习如Spring、MyBatis、SpringMVC等流行的Java框架,理解框架的作用和使用方式。
-
高级话题:学习Java的高级特性,如JVM、Java内存模型、垃圾回收等。
-
实战项目:通过实战项目,将所学知识融会贯通,提升编程能力。
java主要用于后端服务器开发(javaee),不常用pc个人计算机设备(javase)应用和微小型设备(javame)
java环境分为虚拟机(jvm),运行时(jre),编译器(jdk),后者包含前者
java编译 *.java文件成 *.class文件,再通过解释器进行执行
变量名大小写敏感,一个文件可以有多个class类,但只能有一个public类,其由;分号作为语句结束标志
不同于js,java声明的静态成员变量不赋值的话会自动初始化默认值
变量类型: 局部变量(方法或语句块之内),成员变量(方法之外,类之内),静态变量(使用static定义)
数据类型:
基本类型: 整数数值(byte.short.int.long) 浮点数值(float.double) 字符型(char) 布尔型(boolean)
引用类型: 类(class) 接口(interface) 数组
常量声明: 常规变量声明之前加final, 按规范常量应使用大写(final int NAME = 'xzz')
final补充: 修饰class时表示此类不能被继承,修饰方法时此方法不可被重写
数据类型详解
运算符(算术运算符 关系运算符 逻辑运算符 位运算符 其他运算符)
运算符总结
类型转换中,会自动将内存占位低的变量进行补位,强制转换的话会丢失数据精度
控制语句同js,或者说所有编程语言本质都是使用同样的逻辑控制: if while for switch break continue
// 语法规则
// for(初始化1;条件表达式2; 步进器4{
// 代码逻辑3
// }
public class BreakTest{
public static void main(String [] args){
int count = 0;
while(true) {
int i = (int) (Math.random() * 101);
if(i == 77){
break;
}
System.out.println(i);
}
}
}
// 有多层循环时, break只能跳出内层循环
方法的重载: 与js不同,java内函数可以同名,区分核心在于: 形参类型 形参个数 形参顺序 , 这三者不同可以构成同名函数的重载,与返回值无关.
运行机制: 编译器转译源代码成.class文件,jvm虚拟机进行解析执行.堆解析存储创建好的对象和数组,每个方法被调用时,都会在栈中生成一个栈帧,用于存储此方法内部的局部变量和方法;栈的特性是'先进后出,后进先出',类似手枪弹夹里的子弹---以上都是个人理解,可能是错误的,后期更正!
java堆栈的学习与理解
构造器: 方法名必须和类名一致,用于处理接收的形参,不能返回值,因为其默认返回类本身,类似js的constructor
垃圾回收: 类比C++相当于学校食堂,吃完后需要自己把餐具放到统一的回收台,需要自己管理内存, 而Java相当于餐馆,吃完后会有服务员(GC)进行餐具回收.
java垃圾回收机制
this指向: this表示当前对象本身(当前方法所在的作用域),不可用于static方法,特殊用法在构造方法中this(arg)
static修饰的成员从属于类,且只能获取静态成员, 因为他们在类初始化时会存储在单独的方法区,且在构造器之前执行,其他定义的成员分属于各自的对象,存储在堆栈中
代码块: 静态(static) 构造(constructor) 普通 同步(多线程), 从左到右依次执行
包管理: import java..包名
抽象类: abstract-必定包含抽象方法,可以有普通方法,不能被继承, 抽象方法没有功能实现,只有定义
接口: interface-只有抽象方法(默认 public abstarct),属性只能是常量(默认 public static final),实现对子类的规范和约束; 类只能单继承, 接口可以多继承(interface C extends A,B)
String类: 不可变字符序列,初始化后分配确定空间,
面向对象三大特征: 继承(父类子类) 封装(公开或隐藏内部属性与方法) 多态;:面向过程只有封装性,且只有功能的封装
三大特征较复杂, 后期单开一篇概述
java成员封装权限: public protected default private
方法重写(override): 子类重写父类继承过来的方法
数组: 相同类型数据的有序集合;其长度大小固定,不可改变,和js不同,java数组不允许混合类型数据
public class ArrayTest{
public static void main(String[] args) {
int[] arr;
arr = new int[5]; //必须指定长度
arr[3] = 3; //赋值操作
int[] arr2 = new int[5]; // 声明并申请创建空间
int[] arr3 = new int[]{1,2,3,4}; // 声明数组并赋值
int[] arr4 = {3, 6, 8}; // 直接初始化
}
}
所有类的父类都是Object,(类似js的object原型prototype?)
成员内部类: 匿名内部类, 静态内部类,非静态内部类
内部类可以直接访问外部类属性,普通类(非静态)内不可以有静态属性和方法
静态内部类可以通过外部类直接访问到
匿名内部类适合只使用一次的方法
异常捕获:
try{
// Exception 是所有异常类型的父类
}catch(Exception e){ // 此处需指定需获取的错误类型
}
// 不同类型
try{
}catch(InputMismatchException e){ // 此处需指定需获取的错误类型
}catch(ArithmeticException e) {
}
包装类: 自动装箱和自动拆箱, 本质是基本数据类型 和 包装类 的相互转换
较复杂, 后期单开一篇概述
55555555555