Java基础
Java基础
小林coding
Java特点:
- 平台无关性:Java编写一次到处运行,主要就是依靠JVM。Java编译器将源码编译为字节码.class文件,该字节码文件可以在任何装了虚拟机的系统上运行。
- 面向对象:Java是一门严格的面向对象语言,几乎一切都是对象,易于重用和维护。
- 内存管理:Java有自己的内存回收机制(GC),开发者不需要手动进行内存管理,减少内存泄露和其他内存相关问题。
- 安全机制:内置沙箱机制,将不可信代码控制在受控环境中运行,防止其访问本地的文件系统、网络等敏感资源
优势和劣势
- 优势:见特点
- 劣势:性能不好,虽然JVM优化了很多,但是相较于C++、Rust等原生语言,还是有一定开销,特别是启动时间;语法繁琐,样板代码很多,之前没有Lambda更麻烦,面向对象过于严格,有时写简单程序反而麻烦;JVM本身占内存,对资源有限的环境并不太友好。
JVM、JRE、JDK的区别和联系?
编译型语言和解释型语言的区别?
基本数据类型
- 整型:Byte、Short、Int、Long
- 浮点型:Float、Double
- 字符:Char;布尔:Boolean
各是多少字节?
————————————————————————————————————————————————————————————————————————————————————————————
最近做了几个java后端开发的笔试题,发现自己还是太蠢了,其实很多JavaSE的内容都不会,赶快来记录学习一下。
修饰符:
private一般修饰成员变量、成员方法、构造方法,只能本类内部访问
default(或者不写权限修饰符默认的),一般修饰成员变量、成员方法、构造方法,本类以及同包下类能够访问
protected一般修饰成员变量、成员方法、构造方法,本类、同一包中的类、子类能够访问
public一般修饰类、成员变量、成员方法、构造方法,以上所有情况以及不同包下的类都能够访问
PreparedStatement与Statement
这俩东西我更是之前听都没听过,现在应用开发大多都是SSM架构,Mybatis框架真的让一些数据库操作变得无比简单,老旧的JDBC都很少见了,这两个就是关于JDBC的两个接口
项目 | Statement | PreparedStatement | CallableStatement | Wrapper |
---|---|---|---|---|
基础接口 | Statement | PreparedStatement 继承 Statement | CallableStatement 继承 PreparedStatement | 所有 JDBC 接口都实现了 Wrapper |
SQL 类型 | 静态 SQL | 参数化 SQL | 存储过程 | 不执行 SQL,仅用于包装查询 |
性能 | 最低 | 高 | 高 | N/A |
安全性(防注入) | 差 | 好 | 好 | N/A |
使用难度 | 简单 | 中等 | 稍高 | 主要用于驱动开发或高级场景 |
类方法和this
类方法(static修饰的方法)的主要特点是属于类本身而不是对象实例,因此:
- 不能使用this关键字
- 可以直接调用同类其他类方法
- 可以访问类变量
- 可以通过对象实例调用实例方法
类中调用实例方法是否要用 this?
只有在实例方法中才能使用 this 来调用另一个实例方法或变量。
this 表示当前对象的引用,只能在非静态(实例)方法中使用。
在一个实例方法中调用另一个实例方法或访问实例变量时,可以用 this(可省略)。
在类方法(static 方法)中是不能使用 this 的,因为没有具体的对象实例供它引用。
总结
this 只能在实例方法中使用;
实例方法调用另一个实例方法可以使用 this(但不是必须);
静态方法不能访问非静态成员,除非通过对象引用;
静态方法不能使用 this。
Java中方法的书写
public abstract class MyClass {
public int constInt = 5;
//add code here
public void method() {
}
}
"public abstract void method(int a);"是正确的,因为:
- 在抽象类中可以定义抽象方法
- 抽象方法的语法格式正确:使用abstract修饰符,没有方法体,以分号结束
- 参数列表和返回值类型的定义也符合Java语法规则
"constInt = constInt + 5;"错误:
- 这是一个语句而不是成员定义
- 类体中只能包含成员定义,不能直接写执行语句
"public int method();"错误:
- 这个方法声明与已有的method()方法冲突
- Java不支持仅通过返回值类型来区分重载方法,但是入参和返回类型一起修改是可以的
"public abstract void anotherMethod() {}"错误:
- 抽象方法不能有方法体
- 这里错误地为抽象方法添加了空的方法体{}
- 正确的抽象方法声明应该以分号结束而不是大括号
文件处理相关
在Java中,所有文件在底层都是以字节形式存储的,因此无论是文本文件还是二进制文件,都可以当作二进制文件来处理。这也是为什么Java提供了统一的字节流类(如FileInputStream和FileOutputStream)来处理所有类型的文件。
File类是用于表示文件和目录路径名的类,它只能用于获取文件信息、创建或删除文件,而不能直接进行文件的读写操作。文件的读写需要使用IO流相关的类。
重载和重写
重载
方法重载(Overloading) 是在同一个类中定义多个方法名相同、参数列表不同的方法。仅改变返回类型而参数完全相同是不能构成重载的。
重写
重写要求方法名、参数列表完全相同,但返回类型可以是父类方法返回类型的子类(协变返回类型)。例如:
class Animal { Animal get() { ... } }
class Dog extends Animal { Dog get() { ... } } // 合法重写
private方法是类私有,子类不可见,因此无法重写。子类中定义的同名方法仅是独立的新方法,与父类无关。
接口和类
在 Java 中,接口(interface)确实可以使用 extends 关键字继承一个或多个其他接口。这与类只能继承一个父类不同,接口之间是支持多继承的。这种机制允许将多个接口的契约(方法声明)组合到一个新的接口中。
若要实现一个接口为普通类则必须实现接口的所有抽象方法。
其他
GUI
Java基本的GUI(图形用户界面)设计主要依赖java.awt包,该包提供了创建用户界面和绘制图形图像的所有基本组件。java.awt(Abstract Window Toolkit)是Java最基础的GUI工具包,包含了基本的GUI组件如Button、Label、TextField等。
Java 标识符(变量名)
Java标识符的命名规则:
- 可以由字母、数字、下划线(_)和美元符号($)组成
- 不能以数字开头
- 不能是Java关键字和保留字
- 区分大小写
- 不能包含空格和其他特殊字符
Java和C++一样具有继承封装多态的特性