文章目录
结构
JVM
JDK
JDK
Java Development Kit (Java开发工具包)JRE
Java Runtime Environment (Java运行时环境)
强制类型转换
( 数据类型 ) 数值
double avg1 = 75.8;
int avg2 = (int)avg1;
常量
所谓常量,我们可以理解为是一种特殊的变量,它的值被设定后,在程序运行过程中不允许改变
final 常量名 = 值
final String LOVE = "china";
常量名一般用大写字符
文档注释
/*
*这是文档注释
*@author Alan
*/
使用文档注释时还可以使用 javadoc 标记,生成更详细的文档信息:
@author
标明开发该类模块的作者@version
标明该类模块的版本@see
参考转向,也就是相关主题@param
对方法中某参数的说明@return
对方法返回值的说明@exception
对方法可能抛出的异常进行说明
我们可以通过javadoc
命令从文档注释中提取内容,生成程序的API
帮助文档
关于循环
do-while
先执行后判断
break
停止循环
continue
跳出本次循环
foreach
for(元素类型 元素变量:变量对象){
执行代码
}
int a[] = new int[5];
for(int b : a){
System.out.print(b);
}
//b为当前循环中遍历到的元素值
数组
定义数组
定义数组并赋值
int[] scores = {1,2,3};
int scores[] = {1,2,3};
int[] scores = new int[]{1,2,3};
不赋值确认数组长度
int[] scores = new int[5];
获取数组长度
数组名.length
用于获取数组的长度
int[] scores[] = new int[5];
int length = scores.length;
Arrays类
Arrays
类是 Java 中提供的一个工具类,在 java.util
包中
该类中包含了一些方法用来直接操作数组,比如可直接实现数组的排序、搜索等
排序
Arrays.sort(数组名);
将数组转换为字符串
Arrays.toString(数组名);
二维数组
所谓二维数组,可以简单的理解为是一种“特殊”的一维数组,它的每个数组空间中保存的是一个一维数组
声明
int[] scores = new int[5][];
二维数组中可以只定义行,列可以单独定义
方法
定义
访问修饰符 返回值类型 方法名(参数列表){
方法体
}
无返回
public void fun(){
}
有返回
public int fun(){
return 1;
}
调用
当需要调用方法执行某个操作时,可以先创建类的对象,然后通过 对象名.方法名();
来实现
//在main方法中调用cc方法
public class test1 {
public static void main(String[] args) {
test1 re = new test1();
System.out.print(re.cc());
}
public int cc() {
return 1;
}
}
重载
如果同一个类中包含了两个或两个以上方法名相同
,方法参数
的个数、顺序、类型不同的方法,则称为方法的重载,也可称该方法被重载了
当调用被重载的方法时, Java 会根据参数的个数
和类型
来判断应该调用哪个重载方法,参数完全匹配
的方法将被执行
判断方法重载的依据
-
必须是在同一个类中
-
方法名相同
-
方法参数的个数、顺序或类型不同
-
与方法的修饰符或返回值没有关系
类
类是模子,确定对象将会拥有的特征(属性)和行为(方法)
类的特点
- 类是对象的类型
- 具有相同属性的方法的一组对象的集合
定义
定义类名
public class 类名{
}
调用
创建对象
类名 对象名 = new 类名();
test test1 = new test();
构造方法
- 使用
new + 构造方法
创建一个新的对象 - 构造方法是定义在Java类中的一个用来初始化对象的方法(在创建对象的时候其实我们执行的是构造方法)
- 名称与列名相同,没有返回值
public 构造方法名(){
}
初始化块
初始化块只在类加载时执行,且只会执行一次
{
}
静态
- Java 中被
static
修饰的成员称为静态成员或类成员 - 它属于整个类所有,而不是某个对象所有,即被类的所有对象所共享
静态方法
- 静态成员可以使用类名直接访问,也可以使用对象名进行访问
- 静态方法中不能调用非静态变量,调用非静态方法需要以对象的形式
静态初始化块
静态初始化块只在类加载时执行,且只会执行一次,同时静态初始化块只能给静态变量赋值,不能初始化普通的成员变量
static{
}
封装
将类的某些信息隐藏在类内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问
实现
- 设置为
private
- 创建
getter/setter
方法(用于属性的读写) - 在
getter/setter
方法中加入属性控制语句(对属性的合法性进行判断)
包
- 通过
import
关键字,在某个文件中使用其他文件的类 - Java中包名规范是全小写字母
- 使用时可以用
*
表示所有文件
访问修饰符
this
this
关键字代表当前对象
内部类
-
内部类提供了更好的封装,可以把内部类隐藏在外部类之内,不允许同一个包中的其他类访问该类
-
内部类的方法可以直接访问外部类的所有数据,包括私有的数据
-
内部类所实现的功能使用外部类同样可以实现,只是有时使用内部类更方便
// 创建内部类对象
内部类名称 i = 外部类对象名称.new 内部类名称();
//外部类HelloWorld
public class HelloWorld {
// 内部类Inner,类Inner在类HelloWorld的内部
public class Inner {
// 内部类的方法
public void show() {
System.out.println("welcome to imooc!");
}
}
public static void main(String[] args) {
// 创建外部类对象
HelloWorld hello = new HelloWorld();
// 创建内部类对象
Inner i = hello.new Inner();
// 调用内部类对象的方法
i.show();
}
}
成员内部类
- 外部类是不能直接使用内部类的成员和方法
- 如果外部类和内部类具有相同的成员变量或方法,内部类默认访问自己的成员变量或方法,如果要访问外部类的成员变量,可以使用
this
关键字
外部类名.this.变量
静态内部类
-
静态内部类不能直接访问外部类的非静态成员,但可以通过
new 外部类().成员
的方式访问 -
如果外部类的静态成员与内部类的成员名称相同,可通过
类名.静态成员
访问外部类的静态成员 -
如果外部类的静态成员与内部类的成员名称不相同,则可通过
成员名
直接调用外部类的静态成员 -
创建静态内部类的对象时,不需要外部类的对象,可以直接创建
内部类 对象名= new 内部类()
方法内部类
方法内部类就是内部类定义在外部类的方法中,方法内部类只在该方法的内部可见,即只在该方法内可以使用
继承
- 子类拥有父类的所有属性和方法
- 实现代码复用
class 子类 extends 父类
重写
- 子类对父类的方法不满意可以重写继承父类方法
- 返回值、方法名、参数数量及类型都一样才叫做重写(否则叫做重载.)
- 先初始化父类,再初始化子类
- 先初始化变量,再初始化构造参数
final
final
可以修饰类、方法、属性和变量final
修饰类时,该类不允许被继承final
修饰方法,则该方法不允许被覆盖(重写)final
修饰属性,则该类的属性不会进行隐式的初始化(类的初始化属性必须有值)或在构造方法中赋值final
修饰变量,变量只能赋值一次,系统也不会自动初始化
super
在对象的内部使用,可以代表父类对象(类似this)
访问父类属性
super.age;
访问父类方法
super.eat();
Object类
toString()方法
在Object类里面定义toString()
方法的时候返回对象的哈希code码(对象地址字符串)
equals()方法
比较对象的引用是否指向同一块内存地址
多态
对象的多种形态
引用多态
- 父类的引用可以指向子类对象
- 父类的引用可以指向本类对象
父类 obj1 = new 子类();
//子类的引用不可以指向父类
方法多态
- 创建本类对象时,调用的方法为本类方法
- 创建子类对象时,调用的方法为子类重写的方法或者继承的方法
- 不能调用子类独有的方法
引用类型转换
- 向上类型转换(隐式、自动类型转换),是小类型到大类型的转换
- 向下类型转换(强制类型转换),是大类型到小类型
instanceof
运算符,来解决引用对象的类型,避免类型转换的安全性问题- 判断是否为父子类,返回布尔值
if(对象 instanceof 对象){
System.out.println("可以转换");
}else{
System.out.println("不可以转换");
}
抽象类
语法定义
- 抽象类前使用
abstract
关键字修饰,则该类为抽象类 - 抽象类中可以有普通方法
public abstract class Telphone{
public abstract void call();
public abstract void message();
}
作用
不关注子类的实现方法,但约束子类的实现某些方法
接口
接口概念
类是一种具体实现体,而接口定义了某一批类所需要遵守的规范,接口不关心这些类的内部数据,也不关心这些类里方法的实现细节,它只规定这些类里必须提供某些方法
接口定义
- 和类定义不同,接口定义不在使用
class
关键字,而是使用interface
关键字 - 接口就是用来被继承、被实现的,修饰符一般建议用public
- 接口可以定义多个父接口
修饰符 interface 接口名 extends 父接口1,父接口2...
{
零到多个常量定义...
零到多个抽象方法的定义...
}
使用接口
- 一个类可以实现一个或多个接口,实现接口使用
implements
关键字 - Java中一个类只能继承一个父类,是不够灵活的,通过实现多个接口可以做补充
修饰符 class 类名 extends 父类 implemets 接口1,接口2...
{
实现接口中的抽象方法
}
UML
Unified Modeling Language(UML)又称统一建模语言或标准建模语言
是一个支持模型化和软件系统开发的图形化语言为软件开发的所有阶段提供模型化和可视化支持