Java 简介、开发环境配置
菜鸟教程
编译+运行
javac HelloWorld.java
java HelloWorld
Hello World
public class HelloWorld {public static void main(String[] args) {System.out.println("Hello World");}
}
JAVA基础语法
类、对象、方法、实例、变量
- 对象:对象是类的一个实例,有状态和行为。
- 类:模板,一类对象的行为和状态。
- 方法:行为,一个类可以有很多方法
- 实例变量:每个变量都有独特的实例变量,对象的状态由这些实例变量的值决定
书写规范
-
大小写敏感
-
类名的首字母大写
-
方法名的首字母小写
-
源文件名和类名相同
-
主方法入口 public static void main(String[] args)
-
JAVA标识符,所有组成部分都需要名字,类名、变量名、方法名
- 以字母、美元符、_开始
- 关键字不能作为标识符,标识符大小写敏感
-
JAVA修饰符,修饰类中方法和属性
- 访问控制修饰符 : default, public , protected, private
- 非访问控制修饰符 : final, abstract, static, synchronized
-
JAVA变量
- 局部变量
- 类变量(静态变量)
- 成员变量(非静态变量)
-
JAVA数组
- 数组是储存在堆上的对象,可以保存多个同类型变量。
-
JAVA枚举
- 比如果汁:限制大、中、小杯
- 枚举限制变量只能是预先设定好的值。使用枚举可以减少代码中的 bug
-
JAVA注释
- //单行注释 /* */多行注释
-
继承
- 一个类可以由其他类派生。利用继承的方法,可以重用已存在类的方法和属性,而不用重写这些代码,被继承的类成为超类(super class),派生类为子类(sub class)。
-
接口
-
对象间相互通信的协议,接口只定义派生要用到的方法,但是方法的具体实现完全取决于派生类。
-
JAVA源程序与编译型运行区别
JAVA注释
- 单行注释 //
- 多行注释
/* 这是一个多行注释 可以用来注释多行代码 */
- 文档注释 可以提取成JavaDoc文档
/**这是一个文档注释示例它通常包含有关类、方法或字段的详细信息
*/
JAVA对象和类
https://www.runoob.com/java/java-object-classes.html
类的类型变量
- 局部变量 :在方法、构造方法或者语句块中定义的变量被称为局部变量。变量声明和初始化都是在方法中,方法结束后,变量就会自动销毁。
- 成员变量 :成员变量是定义在类中,方法体之外的变量。这种变量在创建对象的时候实例化。成员变量可以被类中方法、构造方法和特定类的语句块访问。
- 类变量 :类变量也声明在类中,方法体之外,但必须声明为 static 类型。
构造方法
在创建一个类时,至少要调用一个构造方法。
创建对象
对象是根据类创建的,在JAVA中,使用关键字new来创建一个新的对象
- 声明:声明一个对象,包括对象名称和对象类型
- 实例化:使用关键字new来创建一个对象;实例化 = “ 给对象分配内存 ”;
- 初始化:使用new创建对象时,会调用构造方法初始化对象;初始化 = “ 把对象的属性设置成合适的初始值 ”。
源文件声明规则
- 一个源文件中只能有一个 public 类
- 一个源文件可以有多个非 public 类
- 如果一个类定义在某个包中,那么 package 语句应该在源文件的首行。
- 如果源文件包含 import 语句,那么应该放在 package 语句和类定义之间。如果没有 package 语句,那么 import 语句应该在源文件中最前面。
JAVA基本数据类型
-
变量就是申请内存来存储值。也就是说,当创建变量的时候,需要在内存中申请空间。
-
内存管理系统根据变量的类型为变量分配存储空间,分配的空间只能用来储存该类型数据。
-
两个数据类型
-
内置数据类型 六种数字类型(四个整数型,两个浮点型),一种字符类型,还有一种布尔型。
- byte
- short
- int
- long
- float
- double
- boolean
- char
-
-
引用数据类型
-
JAVA常量
-
自动类型转换
- 整型、实型(常量)、字符型数据可以混合运算。运算中,不同类型的数据先转化为同一类型,然后进行运算。
- 低 ------------------------------------> 高
- byte,short,char—> int —> long—> float —> double
- 不能对boolean类型进行类型转换。
-
- 不能把对象类型转换成不相关类的对象。
-
- 在把容量大的类型转换为容量小的类型时必须使用强制类型转换。
-
- 转换过程中可能导致溢出或损失精度,例如:
-
- 浮点数到整数的转换是通过舍弃小数得到,而不是四舍五入
- 必须满足转换前的数据类型的位数要低于转换后的数据类型,例如: short数据类型的位数为16位,就可以自动转换位数为32的int类型,同样float数据类型的位数为32,可以自动转换为64位的double类型。
-
强制类型转换
- (type)value type
- inti1** = 123;
byteb** = (byte)i1;
-
隐含强制类型转换
-
- 1、 整数的默认类型是 int。
-
- 小数默认是 double 类型浮点型,在定义 float 类型时必须在数字后面跟上 F 或者 f。
Java 变量类型
- 所有的变量在使用前必须声明
type identifier [ = value][, identifier [= value] ...] ;
- Java支持的变量类型
-
局部变量(Local Variables)
- 在方法、构造函数或块内部声明的变量。结束后被销毁,局部变量在声明时需要初始化,否则会导致编译错误。
-
实例变量(Instance Variables)
- 在类中声明,但在方法、构造函数或块之外,属于类的实例,每个类的实例都有自己的副本。
- 如果不明确初始化,实例变量会被赋予默认值(数值类型为0,boolean类型为false,对象引用类型为null)
-
静态变量或类变量(Class Variables)
- 类变量时在类中用static关键字声明的变量,属于类而不是实例,所有该类的实例共享同一个类变量的值
- 类变量在类加载时被初始化,而且只初始化一次。
public class ExampleClass {static int classVar; // 类变量 }
-
参数变量(Parameters)
- 参数变量的作用域只限于方法内部。
-
成员变量(实例变量)
- 每个对象独有,随着对象的创建而存在,随着对象的销毁而消失。
- // 成员变量**
privateintinstanceVar;
-
静态变量(类变量)
- 类级别的变量,所有对象共享,随着类的加载而存在,直到程序结束。
- // 静态变量**
privatestaticintstaticVar**;**
-
JAVA参数变量
-
accessModifier returnType methodName(parameterType parameterName1, parameterType parameterName2, …) {
// 方法体
} -
是指在方法或构造函数中声明的变量,用于接收传递给方法或构造函数的值。
-
参数变量与局部变量类似,但他们只在方法或构造函数被调用时存在,并且只能在方法或构造函数内部使用。
-
accessModifier returnType methodName(parameterType parameterName1, parameterType parameterName2, …) {
// 方法体
} -
方法参数变量的值传递方式
- 值传递
- 传递的是实际参数的值的副本。
- 当参数变量被赋予新的值时,只会修改副本的值,不会影响原始值。
- 【基本数据类型】都采用值传递方式传递参数变量的值
- 引用传递
- 传递的是实际参数的引用(内存地址)。
- 当参数变量被赋予新的值时,会修改原始值的内容。
- 【Java中的对象类型】采用引用传递方式传递参数变量的值。
- 值传递
JAVA局部变量
-
type variableName;
-
一些名词的概念
- 作用域 :局部变量的作用域限于它被声明的方法、构造方法或代码块内。一旦代码执行流程离开这个作用域,局部变量就不再可访问。
- 生命周期 :局部变量的生命周期从声明时开始,到方法、构造方法或代码块执行结束时终止。之后,局部变量将被垃圾回收。
- 初始化 :局部变量在使用前必须被初始化。如果不进行初始化,编译器会报错,因为 Java 不会为局部变量提供默认值。
- 声明 :局部变量的声明必须在方法或代码块的开始处进行。声明时可以指定数据类型,后面跟着变量名,例如:
int count;
。 - 赋值 :局部变量在声明后必须被赋值,才能在方法内使用。赋值可以是直接赋值,也可以是通过方法调用或表达式。
- 限制 :局部变量不能被类的其他方法直接访问,它们只为声明它们的方法或代码块所私有。
- 内存管理 :局部变量存储在 Java 虚拟机(JVM)的栈上,与存储在堆上的实例变量或对象不同。
- 垃圾回收 :由于局部变量的生命周期严格限于方法或代码块的执行,它们在方法或代码块执行完毕后不再被引用,因此JVM的垃圾回收器会自动回收它们占用的内存。
- 重用 :局部变量的名称可以在不同的方法或代码块中重复使用,因为它们的作用域是局部的,不会引起命名冲突。
- 参数和返回值 :方法的参数可以视为一种特殊的局部变量,它们在方法被调用时初始化,并在方法返回后生命周期结束。
成员变量(实例变量)
- 成员变量声明在一个类中,但在方法、构造方法和语句块之外。
- 成员变量随对象创建或销毁。
- 访问修饰符可以修饰成员变量。
- 成员变量对于类中的方法、构造方法或语法块是可见的。一般情况下应该把成员变量设为私有,通过使用访问修饰符可以使成员变量对子类可见。
- 成员变量具有默认值。数值型变量的默认值是0,布尔型变量的默认值是false,引用类型变量的默认值是null。
- 成员变量可以直接通过变量名访问,但在静态方法以及其他类中,应该使用完全限定名:ObjectReference.VariableName
- accessModifier type variableName;
- 访问修饰符 变量的类型 表示变量的名称
- 成员变量的值在创建对象时被分配,即使未对其初始化,也会被赋予默认值。
- 可以通过对象访问,也可以通过类名访问(静态成员变量)。
类变量(静态变量)
-
java中的静态变量时在类中定义的一个变量,静态变量在类加载时被创建。
-
在类中使用static关键字修饰变量,也成为类变量
-
public class MyClass { public static int count = 0; // 其他成员变量和方法 }
-
访问方式
- 通过类型来访问静态变量,MyClass.count=10;//通过类名访问
- MyClass obj=new MyClass();
- 通过实例名访问 obj.count=20;
-
生命周期
- 静态变量可以用来存储整个程序都需要使用的数据,如配置信息、全局变量等。
-
初始化时机
- 看是否依赖另一个静态变量,来决定顺序
-
常量和静态变量的区别
- 常量与类相关,用final关键字修饰的变量,一旦被赋值就不能再修改。
- 常量:固定的值,数学常数、配置信息
- 静态变量:可变的数据,如计数器、全局状态等。
-
静态变量的访问修饰符
- 静态变量的访问权限与实例变量不同,因为静态变量是与类相关的,不依赖于任何实例。
-
静态变量的线程安全性
- Java 中的静态变量是属于类的,而不是对象的实例。因此,当多个线程同时访问一个包含静态变量的类时,需要考虑其线程安全性。静态变量在内存中只有一份拷贝,被所有实例共享。因此,如果一个线程修改了静态变量的值,那么其他线程在访问该静态变量时也会看到修改后的值。这可能会导致并发访问的问题,因为多个线程可能同时修改静态变量,导致不确定的结果或数据一致性问题。为了确保静态变量的线程安全性,需要采取适当的同步措施,如同步机制、原子类或 volatile 关键字,以便在多线程环境中正确地读取和修改静态变量的值。
-
静态变量的命名规范
- 驼峰命名法,全大写字母,单词之间用下划线分隔,要用static关键字明确标识。首字母小写,后续每个单词的首字母大写 myStaticVariable。
-
public class MyClass {// 使用驼峰命名法public static int myStaticVariable;// 使用大写蛇形命名法public static final int MAX_SIZE = 100;// 避免使用缩写public static final String employeeName;// 具有描述性的变量名public static double defaultInterestRate; }
-
静态变量的使用场景
- 存储全局状态或配置信息
- 计数器或统计信息
- 缓存数据或共享资源
- 工具类的常量或方法
- 单例模式中的实例变量
JAVA变量命名规则
驼峰命名法
JAVA修饰符 修饰符用来定义类、方法或者变量
- 访问修饰符
- 非访问修饰符