目录
基本介绍
-
Java是一种受欢迎的高级、基于类的面向对象编程语言。
-
Java是一种通用编程语言,旨在让程序员可以“编写一次,随处运行(WORA)”。这意味着编译的Java代码可以在支持Java的所有平台上运行,而无需重新编译。
Java的运用很广泛:
-
多线程 - Java的多线程功能使得编写可以同时执行多个任务的程序成为可能。
-
解释 - Java字节码在运行时动态翻译成本地机器指令,并且不保存在任何地方。开发过程更加快速和分析性,因为链接是一种增量和轻量级的过程。
-
高性能 - 使用及时编译器,Java实现高性能的运行速度。
-
分布式 - Java设计用于互联网的分布式环境。
-
动态 - 与C或C++相比,Java被认为更加动态,因为它设计成适应不断变化的环境。Java程序可以携带大量的运行时信息,用于在运行时验证和解析对对象的访问。
基础语法
基本语法
编写 Java 程序时,应注意以下几点:
-
大小写敏感:注意命名时的大小写。
-
类名:对于所有的类来说,类名的首字母应该大写。命名规范,若由多个字母则单词的首字母大写。
-
方法名:所有的方法名都应该以小写字母开头。如果方法名含有若干单词,则后面的每个单词首字母大写。
-
源文件名:源文件名必须和类名相同。当保存文件的时候,你应该使用类名作为文件名保存(切记 Java 是大小写敏感的),文件名的后缀为 .java。(如果文件名和类名不相同则会导致编译错误)。
-
主方法入口:所有的 Java 程序由 public static void main(String[] args) 方法开始执行。
Java 标识符
-
所有的标识符都应该以字母(A-Z 或者 a-z),美元符($)、或者下划线(_)开始
-
首字符之后可以是字母(A-Z 或者 a-z),美元符($)、下划线(_)或数字的任何字符组合
-
关键字不能用作标识符
-
标识符是大小写敏感的
合法标识符举例:age、$salary、_value、__1_value
非法标识符举例:123abc、-salary
Java 变量
-
局部变量
-
类变量(静态变量)
-
成员变量(非静态变量)
Java 关键字
- 访问控制
- 类、方法、变量修饰符
- 程序控制语句
- 错误处理
- 包相关
- 基本类型
- 变量引用
- 保留关键字
继承
在Java中如果一个类已经有了你所需要的方法和属性,那么你可以新创建一个类来继承该类。
利用继承的方法可以复用已有类的属性和方法,这样可以提升代码的效率。
- 被继承的类叫做超类(super class)
- 派生的类叫做子类(sub class)
接口
接口可以理解为对象间相互连接的一种协议。
接口只定义派生类的方法,但是方法的具体实现只取决于派生类。
Java源程序与编译型源程序的区别
特性 | Java 源程序 | 传统的编译型源程序(如 C、C++) |
---|---|---|
编译方式 | 编译为字节码,由 JVM 运行 | 直接编译为机器码 |
运行环境 | 依赖 JVM | 直接运行在操作系统上 |
跨平台性 | 强(字节码跨平台) | 弱(需要重新编译) |
性能 | 较低(JVM 开销) | 高(直接运行机器码) |
内存管理 | 自动垃圾回收 | 手动管理 |
安全性 | 高(JVM 沙箱机制) | 低(直接访问硬件) |
开发效率 | 高(丰富的库和工具) | 低(需要处理底层细节) |
适用场景 | 企业应用、Web 开发 | 系统级开发、高性能计算 |
注释
- 单行注释
- 多行注释
- 文档注释
/**
* 这是一个文档注释示例
* 它通常包含有关类、方法或字段的详细信息
*/
public class MyClass {
// 类的成员和方法
}
Java 对象和类
1、类(Class):
-
定义对象的蓝图,包括属性和方法。
-
示例:
public class Car { ... }
2、对象(Object):
-
类的实例,具有状态和行为。
-
示例:
Car myCar = new Car();
3、继承(Inheritance):
-
一个类可以继承另一个类的属性和方法。
-
示例:
public class Dog extends Animal { ... }
4、封装(Encapsulation):
-
将对象的状态(字段)私有化,通过公共方法访问。
-
示例:
private String name; public String getName() { return name; }
5、多态(Polymorphism):
-
对象可以表现为多种形态,主要通过方法重载和方法重写实现。
-
示例:
-
方法重载:
public int add(int a, int b) { ... }
和public double add(double a, double b) { ... }
-
方法重写:
@Override public void makeSound() { System.out.println("Meow"); }
-
6、抽象(Abstraction):
-
使用抽象类和接口来定义必须实现的方法,不提供具体实现。
-
示例:
-
抽象类:
public abstract class Shape { abstract void draw(); }
-
接口:
public interface Animal { void eat(); }
-
7、接口(Interface):
-
定义类必须实现的方法,支持多重继承。
-
示例:
public interface Drivable { void drive(); }
8、方法(Method):
-
定义类的行为,包含在类中的函数。
-
示例:
public void displayInfo() { System.out.println("Info"); }
9、方法重载(Method Overloading):
-
同一个类中可以有多个同名的方法,但参数不同。
-
示例:
public class MathUtils {
public int add(int a, int b) {
return a + b;
}
public double add(double a, double b) {
return a + b;
}
}
下面我们详细介绍一下,对象和类:
-
对象:对象是类的一个实例,有状态和行为。例如,一条狗是一个对象,它的状态有:颜色、名字、品种;行为有:摇尾巴、叫、吃等。
-
类:类是一个模板,它描述一类对象的行为和状态。
Java中的对象
下图中,车是一个类(class) ,具体的每一辆车是类的一个对象(object),对象有多个属性(颜色、品牌、型号)
而这样的对象与类的关系与软件中的对象极其相似。
Java中的类
类就是创建Java的模版。
举例:
建立一个狗的类
public class Dog {
String breed;
int size;
String colour;
int age;
void eat() {
}
void run() {
}
void sleep(){
}
void name(){
}
}
一个类中可以有的变量:
-
局部变量:在方法、构造方法或者语句块中定义的变量被称为局部变量。变量声明和初始化都是在方法中,方法结束后,变量就会自动销毁。
-
成员变量:成员变量是定义在类中,方法体之外的变量。这种变量在创建对象的时候实例化。成员变量可以被类中方法、构造方法和特定类的语句块访问。
-
类变量:类变量也声明在类中,方法体之外,但必须声明为 static 类型。
一个类可以有多种方法,如吃、跑、睡觉、名字等
构造方法
创建一个对象时必须要至少调用一个构造方法,如果没有定义构造方法,会默认构造方法。
构造方法的名字必须与类同名。
创建对象
创建对象时使用new关键字,一般是3步:
- 声明:定义对象类型
- 实例化:创建实体对象
- 初始化: 使用new创建对象时,调用构造函数进行对象属性等的初始化
源文件声明文件
- 一个源文件只能有一个public类
- 源文件可以有多个非public类
- 源文件名必须和public类名一致
Java包
主要用于对接口和类进行分类。
Java基本数据类型
变量创建后,由内存管理系统分配内存,分配的内存只能用于储存该类数据。
Java两大数据类型
-
内置数据类型
Java提供了八种基本数据类型:6种数字类型,字符型,布尔型。
至于具体的数据类型的所占空间,及其他相关信息不用刻意去记忆,因为Java已经将其以常量的形式创建在对应的包装类中了:
public class PrimitiveTypeTest {
public static void main(String[] args) {
// byte
System.out.println("基本类型:byte 二进制位数:" + Byte.SIZE);
System.out.println("包装类:java.lang.Byte");
System.out.println("最小值:Byte.MIN_VALUE=" + Byte.MIN_VALUE);
System.out.println("最大值:Byte.MAX_VALUE=" + Byte.MAX_VALUE);
System.out.println();
// short
System.out.println("基本类型:short 二进制位数:" + Short.SIZE);
System.out.println("包装类:java.lang.Short");
System.out.println("最小值:Short.MIN_VALUE=" + Short.MIN_VALUE);
System.out.println("最大值:Short.MAX_VALUE=" + Short.MAX_VALUE);
System.out.println();
// int
System.out.println("基本类型:int 二进制位数:" + Integer.SIZE);
System.out.println("包装类:java.lang.Integer");
System.out.println("最小值:Integer.MIN_VALUE=" + Integer.MIN_VALUE);
System.out.println("最大值:Integer.MAX_VALUE=" + Integer.MAX_VALUE);
System.out.println();
// long
System.out.println("基本类型:long 二进制位数:" + Long.SIZE);
System.out.println("包装类:java.lang.Long");
System.out.println("最小值:Long.MIN_VALUE=" + Long.MIN_VALUE);
System.out.println("最大值:Long.MAX_VALUE=" + Long.MAX_VALUE);
System.out.println();
// float
System.out.println("基本类型:float 二进制位数:" + Float.SIZE);
System.out.println("包装类:java.lang.Float");
System.out.println("最小值:Float.MIN_VALUE=" + Float.MIN_VALUE);
System.out.println("最大值:Float.MAX_VALUE=" + Float.MAX_VALUE);
System.out.println();
// double
System.out.println("基本类型:double 二进制位数:" + Double.SIZE);
System.out.println("包装类:java.lang.Double");
System.out.println("最小值:Double.MIN_VALUE=" + Double.MIN_VALUE);
System.out.println("最大值:Double.MAX_VALUE=" + Double.MAX_VALUE);
System.out.println();
// char
System.out.println("基本类型:char 二进制位数:" + Character.SIZE);
System.out.println("包装类:java.lang.Character");
// 以数值形式而不是字符形式将Character.MIN_VALUE输出到控制台
System.out.println("最小值:Character.MIN_VALUE="
+ (int) Character.MIN_VALUE);
// 以数值形式而不是字符形式将Character.MAX_VALUE输出到控制台
System.out.println("最大值:Character.MAX_VALUE="
+ (int) Character.MAX_VALUE);
}
}
但要注意的是,这些基本数据类型是有默认值的:
-
int
,short
,long
,byte
的默认值是0。 -
char
的默认值是\u0000
(空字符)。 -
float
的默认值是0.0f
。 -
double
的默认值是0.0d
。 -
boolean
的默认值是false
。 -
引用类型(类、接口、数组)的默认值是
null
。
引用数据类型
- 引用数据类型就像C/C++中的指针,引用类型指向一个对象,指向对象的变量是引用变量。变量在声明时被指定为一种数据类型,并且这个类型不能被改变
- 数组、对象都是引用变量
- 所有引用类型的默认值是null
Java常量
Java中使用final来修饰常量。
常量一般使用大写字母。
类型转换
低 ------------------------------------> 高
byte,short,char—> int —> long—> float —> double
可以看到,数据类型的转换是从低到高的。
数据类型转换的原则:
- boolean不能参与数据类型转换
- 将容量大的数据类型转换成容量小的数据类型,必须使用强制类型转换
- 在进行数据类型转换的时候可能会出现,精度损失甚至溢出
- Java中浮点数转换成整数,是直接舍去小数点,而不是四舍五入
自动类型转换
必须满足转换前的位数必须小于转换后的位数
强制类型转换
- 要求相互转换的数据类型必须是兼容的
- 形式:(type)value
Java变量类型
局部变量
- 是创建在方法、或构造函数、或者块内部变量
- 局部变量在声明时就必须初始化,要不然会编译失败
- 局部变量在构造函数或方法结束后,就会被销毁
实例变量
- 实例变量是在类中,但是在构造函数或方法之外
- 实例变量属于类的实例,每一个类的实例也都会有一个副本
- 如果声明变量时不初始化,就会默认值
静态变量或类变量
- 在类中使用static修饰的值
- 所有类的实例共用静态变量
- 静态变量在类加载时被初始化,并且只被初始化一次
参数变量
- 定义在构造函数或方法中变量,它的作用域只是构造函数中
- 用于接收和调用,传入构造函数的值