Java黑马程序员24年0基础

零基础视频,面向对象开始跳着进度条看,有什么感兴趣的搜索+敲代码实现即可

学习原因:未来掌握Java反序列化

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
课程目录:每天及其内容
day01:222(Java入门、IDEA、基础语法)
day02:152(基础语法)
day03:184(基础语法、综合实战)
day04:105(数组)
day05:183(面向对象编程基础语法)
day06:179(继承、多态)
day07:242(枚举、抽象类、接口)
day08:280(类、函数式编程、常用API、GUI)
项目实战1:126(人事系统)
项目实战2:121(游戏开发)
加强1:314(异常、泛型、Collection、List)
加强2:278(SET、MAP、Stream)
加强3:360(File、递归、IO流)
加强4:210(多线程、线程池)
加强5:154(网络编程)
项目实战3:180(即时通讯)
高级技术:213

Java配置

JVM+核心类库=JRE运行环境+JAVA(JAVAC)=JDK(java开发工具包)

代码文件 .java

编译:javac;运行:java

project moudle package class

包名 com.domain.project

src main

AI插件

字体外观设置等

双击out下反编译

方法重载 同名

表达式自动转换

scanner获取输入要new对象

一个包下的Java文件,class能直接写

构造器

Java面向对象

this

实体类

实例变量每个对象持有一份,静态变量一个,会出现覆盖

如果方法不需要直接访问对象的数据,可以使用静态方法【工具类的构造器可以私有】

确实,懂了之后感觉还是很有美感的

引用类型,装电影对象

看了这一集,才明白为什么之前大一作业java学生管理系统,被说没有用到面向对象了

不过参数的名字具体怎么命名和赋值不太了解

继承 缺省:当前类,同包其他类

override注解:方法重写

tostring

this调用本类中其他构造器,和super有哪些注意的

多态下类型转换

final:变量有且只能赋值一次

final地址指向的内容可以改变

常量会被“宏替换”,变成字面量

单例类:确保某个类只能创建一个对象

在获取对象时,已经创建好

1
2
3
4
5
6
7
8
9
public class A{
private static A a = new A();//私有,使对象无法修改
private A(){

}
public static A getInstance(){//公开,返回类的唯一对象
return a;
}
}

延迟加载对象:getInstance时判断是否为null,然后new

枚举类enum:

第一行:每个常量记住了枚举类的对象

Xjad

javap反编译命令

抽象类

abstract:修饰类或方法,不能有方法体;抽象类能抽象方法,不能创建对象

抽象类就是为了被继承;继承后必须重写所有的抽象方法

模版方法

接口

一个类可以实现多个接口

修饰符 class 实现类类名 implements 接口1,接口2

lombok Lombok @Data 注解:快速生成类常用方法 - 犬小哈教程

加了@Data注解的类,编译后会自动给我们加上下列方法:

  • 所有属性的get和set方法

jdk8后三种方式:默认方法、私有方法、静态方法

确实,这里听着像是打补丁,以后需要再说

智能家居系统看老师敲的很顺

代码块

静态代码块:static{} 类加载时自动执行,只执行一次,初始化赋值

实例代码块:单独{} new对象时执行

内部类

类定义在另一个类的内部

外部类对象.内部类对象 对象名=new 外部类名称().new 内部类名称

学习的目的是为了以后能看懂别人的代码

匿名内部类

特殊的局部内部类;不需要为类声明名字,默认有隐藏的名字

new 类或接口(){ }

本质是子类,立即创建出子类对象

函数式编程

Lambda只能简化函数式接口的匿名内部类

听到Lambda,可能不专心,看不懂操作了

逐渐简化,但是对于0基础,可读性变差

方法引用

类名::静态方法

只是调用一个静态方法,->箭头前后参数形式一致,可使用

equal 相等比较,直接双等号比较地址

new string 构造器

很多讲的是代码规范的问题,但是学习能帮助我未来阅读源码

高级

异常

运行时和编译

自定义异常

泛型

定义类、接口、方法时,同时声明了一个活多个类型变量,如

作用:提供在编译阶段约束能操作的数据类型,并自行检查

高级技术

Junit单元测试

main测试,无法调用其他方法,需要一个个测试,无法输出测试报告

断言测试:断言结果是否与预期结果一致

反射

认识获取类

大层框架的底层原理

反射:加载类,并允许以编程的方式解剖类的各种成分,成员变量、方法、构造器

获取对象:

Class c1=类名.class

调用Class提供方法:public static Class forName(String package)

Object提供的方法:public Class getClass; Class c3=对象.getClass()

获取类的成分并操作

获取全部、某个构造器(是否是只能拿到public的);全部返回数组;适合做Java的框架

看到invoke才意识到和PHP的反序列化的POP链中很相似

你不要觉得这些api很无聊,写一遍加深印象,以后看到源码才能不发怵

作用:得到一个类的全部成分然后操作;破坏封装性;绕过泛型的约束

感觉java的反射确实算是反序列化的基础

最后举了例子,Java看多了,感觉也挺优雅的