java的入门学习

1. 安装jdk

一般是安装java8,大部分使用的版本是java8;
然后需要部署java环境变量

2. 编译class文件

javac 文件名.java

3. 执行class文件

编译命令为java 文件名

配置classpath路径为.\为当前路径下的class文件名在这里插入图片描述

4. 变量

成员变量:类里面的变量
局部变量:方法里面的变量
变量不能重复定义,在上一级作用域中已经声明的变量在该作用域里不能再次声明该变量

5. 类型

八大基本数据类型↓
在这里插入图片描述

6. X进制之间的转换

多少进制就是多少进1;我们日常用的是十进制

在这里插入图片描述
进制转换:
二进制1101转十进制为 13
在这里插入图片描述
十进制13转二进制为 1101
在这里插入图片描述
8进制转换
在这里插入图片描述

7. 在不同类型之间运算时,会按照类型级别由高到低地统一为统一为最高级的类型

在这里插入图片描述
运算时的类型转换
在这里插入图片描述

8. 数组

存储多个相同类型数据的存储模型,数组在初始化时会为储存空间添加默认值
在这里插入图片描述
静态初始化:int[] arr = new int[]{ 1,2,3}; 简化格式:int[] arr = { 1,2,3 };
动态初始化:int[] arr = new int[];

数组操作的两个常见问题:

  • 索引越界: 访问了数组中不存在的索引对应的元素,造成索引越界;
  • 空指针异常: 访问的数组已经不再指向堆内存的数据,造成空指针异常;
  • null: 控制,引用数据类型的默认值,表示不再指向任何有效对象;

9. 内存

栈内存:存储局部变量 例如定义在方法中的变量
堆内存:存储new出来的内容(实体, 对象)

栈是临时存储空间,也是方法和变量调用时的临时空间
当new一个对象/数组时,堆里就会创建一个新的地址;

int[] arr = new int[3]
// 栈内存里的arr[0]对应堆内存的new int的堆内存地址“001”
int[] arr2 = arr;
arr2[0] = 100;
// 这里arr[0]也会变为100

10. 方法

  • 调用: main(): void类型的方法可以直接调用;非void类型的方法,使用变量接收调用;
  • 定义:public static void xxx(){}
  • 如果方法没有返回值则使用void声明,有返回值需要声明对应的数据类型并返回数据;如:public static int xxx(){ return 100; }
  • 方法重载:类里具有多个相同方法的方法名,且参数不同,则形成方法重载;

11. private

在类中使用private String name被privave定义的name属性,只能通过类内部定义的方法获取和使用,不能被外部访问;

12. this

在类中的方法里存在,this等于当前调用他的对象;

13. 构造方法

无参构造方法 public 类名(){}
有参构造方法 public 类名(int 100){}
无论是否有参最好都在类里声明无参构造方法

14. 一个标准的类应该含有的属性

在这里插入图片描述

15. String

String类在java.lang包下,Java程序中所有的双引号字符串,都是String类的对象
JVM只会创建一个String对象,并在字符串池中维护

new出来的string都有自己的堆内存空间,直接赋值的string值存在常量池里,直接调用并共用一个常量池,没有新堆内存

字符串效果上相当于字符数组(char[]),但是底层原理是字节数组(byte[])
↑JDK8以前是字符数组,JDK9以后是字节数组

16. StringBuilder

	String s = "ni";
	s += "hao"
	// 在常量池里会创建 ni hao nihao 三个内存地址
	StringBuilder s = new StringBuilder;
	// 此时s的内容可以随意改变

字符串每次拼接都会构建一个新的String对象,耗时耗内存,使用StringBuilder解决字符串拼接问题;

八大基本数据类型↓

17. 集合

集合类的特点:提供一种存储空间可变的存储模型,存储的数据容量可以发生变化;

  • ArrayList<>接收一个泛型,可以根据传入的类型而指定类型;ArrayList<String> array = new ArrayList<>()

18. 继承

子类被称为派生类,父类称为基类,超类

// public class 子类名 extends 父类名 {}
public class Zi extends Fu {}
  • 好处:提高了代码的复用性,提高了代码的维护性;
  • 坏处:增加了类的耦合,削弱了子类的独立性;
  • super关键字: 当前对象访问父类成员属性的方式,super.成员变量->用来访问父类的成员变量;
  • 继承中的构造方法: 子类有可能会使用父类的数据,子类初始化之前一定要先完成父类的数据初始化,每一个子类构造方法的第一条语句默认都是:super();
  • 方法重写:子类可以重写父类中相同名字的成员方法(父类私有方法不能被重写,父类私有成员子类不能继承)

19. 包-就是文件夹,对类的分类

无论是否有参最好都在类里声明无参构造方法

  • 权限修饰符
  • final: 结扎修饰符,被final修饰的类不能被继承;方法不能被重写;变量不能再次被赋值基本类型的变量变常量,引用类型的变量地址值不会变地址内容可以改变;
  • static: 静态修饰符,被类的所有对象共享;静态成员方法只能访问静态成员;
    在这里插入图片描述

20. 多态

多态的前提
(1)有继承或者实现关系
(2)有方法重写
(3)有父类/接口引用指向子类对象

多态的分类

  • 编译型多态:也称为静态多态性或早期绑定(Early Binding)。编译时多态性发生在编译时,是通过函数重载和运算符重载来实现的。在编译时多态性中,编译器根据方法的签名(参数类型和数量)来确定要调用哪个方法。
  • 运行时多态:也称为动态多态性或晚期绑定(Late Binding)。运行时多态性发生在程序运行时,是通过方法覆盖(重写)来实现的。在运行时多态性中,程序在运行时根据对象的实际类型来确定要调用的方法。
  • 多态的转型:类型转换是将一个引用从其原始类型转换为其父类类型或接口类型的操作
    (1)向上转型:将一个子类对象引用赋给一个父类类型的引用变量的过程
    (2)向下转型:向下转型是将一个父类类型的引用变量转换为一个子类类型的引用变量的过程,通常需要使用instanceof运算符来检查对象的类型,以避免ClassCastException异常

21. 抽象类

抽象类和抽象方法必须使用abstract关键字修饰

public abstract class 类名 {}
public abstract void eat();

抽象类中不一定有抽象方法,有抽象方法的类一定是抽象类

22. 抽象类成员特点

  • 构造方法但是不能实例化,用于子类访问父类数据的初始化
  • 抽象方法:限定子类必须完成某些动作
  • 非抽象方法:提高代码复用性

23. 接口

  • 接口用关键字interface修饰
public abstract 接口名 {}
  • 类实现接口用 implements 表示
public class 类名 implements 接口名 {}

24. 接口的成员特点

(1)成员变量
只能是常量:public static final
(2)构造方法
接口没有构造方法,因为接口主要是对行为进行抽象;一个类没有父类,默认继承Object类
(3)成员方法
只能是抽象方法:public abstract 接口名 {}

25. 抽象类和接口的区别

26. 匿名内部类

new 类名 () {
	重写方法
}

27. 基本类型包装类

在这里插入图片描述

28. 装箱和拆箱

在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Supernova_gu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值