1/java学习之路

1 总览

java的百度百科:https://baike.baidu.com/item/java/85979

1/ java 开始sun公司 ----> orcale公司 现在是11版本
se 电脑软件平台—我们用的是se
ee 网页web
me 手机移动

2/框架:
JDK 开发,api等
JRE 运行环境
JVM 虚拟机,核心

3/特性–开源–健壮–跨平台等
跨平台:
java跨平台是指.class字节码文件的跨平台,字节码文件与平台无关
Jvm里面的java解释器再将.class文件解释成对应平台的机器码执行

4/安装JDK–根据自己电脑版本下载安装–配置环境变量

5/Java工具–Eclipse,及配件ExplorFS

2 基本了解

2.1 数据类型

1/ 变量 常量 定义变量的三要素:类型 名字(标识符) 作用域(作用范围)
变量 int a = 3; 后面还可以更改为 a=5;
常量 final final int b = 5; 就不可以更改了;

按数据类型:
1/基本数据类型:包括整形(byte、short、int、long)、浮点型(float、double)、布尔类型(boolean)、字符型(char)
2/引用数据类型:包括类、接口、数组类型以及空类型
计算机最小的单位是比特(bit 位 一个二进制数据0或1,是1bit;),8bit是一字节(byte)
数据类型
常用的逻辑符号: + - * / % > < ! & | ++ – += -=
优先级,不确定先后顺序的话,就用()
三目运算:String a = 3 > 2 ? (“yes”): (“no”);

2.2 流程控制

顺序--自上而下顺着来
分支--if else / switch 
循环-- for / while

2.3 方法 和内存

1/方法定义:
方法–特定功能的代码块
最主要的是形参列表+返回值类型:
public static String eat(String name){ 方法体 }
2/内存:
从逻辑上划分为5个部分

栈 存储局部变量:基本数据类型和引用数据类型
–在方法块内使用,更新快。方法结束,内存释放。多个线程对应多个栈;
堆 存储new出来的东西。 地址断开之后,没有立即被删除。是堆内存 垃圾回收机制自动回收(简称gc)。
垃圾回收机制,自动检测,不是实时监测的。
地址断开有两种情况:1/把地址直接赋值为null;2/方法结束;
地址断开,被检测到,会回收;
方法区 ()
储存的有:
1/常量池–存放常量,例如String类,Integer等类,在编译器就确定的;
–存在意义,减少对象的创建。例如,String;当要声明String时,如果常量池里面有该对象,系统直接给它地址值;如果没有该对象,才会给它新建对象;线程安全
2/静态区–静态的东西都存储在这里,静态的变量/方法,在类加载的时候优先被加载;
3/类信息区,类的方法
本地方法栈 (和系统相关)–为本地方法服务;
程序计数器 (给CPU使用)
程序计数器是一块较小的内存区域,作用可以看做是当前线程执行的字节码的位置指示器。分支、循环、跳转、异常处理和线程恢复等基础功能都需要依赖这个计算器来完成,不多说

2.4 数组和排序

1数组:
是相同数据类型的集合,可以是基本数据类型,也可以是引用数据类型;
2数组的初始化:静态(int [] a = {1,2,4,5};),动态(int [] a = new int [4]?;
3数组的遍历:for循环,foreach循环,Arrays,toString(a)方法;
4数组的排序:
A:选择排序,索引为0的位置同后面的依次相比交换,得到最小值;索引为1的往后依次相比。。。
比如:int [] a = {2,4,6,3};
for (int i = 0; i < a.length - 1; i++) {
for (int j = i + 1; j < a.length; j++) {
if (a[i] > a[j]) {
int tmp = a[i];
a[i] = a[j];
a[j] = tmp;
}
}
}
B:冒泡:相邻的比较
for (int i = 0; i < a.length - 1; i++) {
for (int j = 0; j < a.length - 1 - i; j++) {
if (a[j] > a[j + 1]) {
int tmp = a[j];
a[j] = a[j + 1];
a[j + 1] = tmp;
}
}
}

5:数组的一些其他用法:
逆排序;找出最大值;最小值;二分查找;

6:二维数组
定义:int [][]a = new int [3][5]; int [][] a = {{23,3,5,24}{4}{52,334,24,11,13}{34,53,23}};
二维数组的遍历
二维数组的内存
7:方法的可变参数
public static void main(String [] args){}
public static void show(int a, String…st){}

本质:可变参数是一个不定长度的数组
调用:可以给出任意多个参数,也可以不给参数
使用规则:1/如果调用的时候,能和固定参数的方法匹配,也能够和可变参数的方法匹配。默认使用固定参数的方法;
2/如果调用的方法,可以匹配两个可变参数的方法,则报错;
3/一个方法只能有一个可变参数,并且该可变参数必须是所有参数的最后一个;

2.5 对象和类

1/变量
变量区分

2/对象
类–抽象出–对象
Person p = new Person();
Person P = new Person(“张三”,“22”);
构造方法: 无参 有参
1/方法名是类名,默认有无参构造器。
2/有参构造器,定义的时候,需要使用this关键字:
在使用“ this()” 这种语法时,要注意三个要点:
1、只能在构造方法中使用,并且只能调用本类的其他构造方法
2、在使用时, this()必须作为构造方法的第一个语句,否则编译出错
3、this()不能够递归调用

2.5.1面向对象的三大特征

封装/继承/多态
特征

2.5.2 语法规则

1/命名规则:
类:首字母大写,后面驼峰: 例如:类名,Teacherlearning
变量:首字母小写,后面驼峰 例如:int ageSize;
常量:所有字母大写,单词之间用_下划线链接
方法:首字母小写,后面驼峰

1/定义类:[权限修饰符] + class + 类名 {}
注意:类的修饰符只能是:public, abstract & final

2/ 定义属性: [权限修饰符] + 属性类型 + 属性名 = 值;
如果没有等号,不赋值,默认初始值
初始值中整数为0;浮点为0.0F/D; boolean为false;引用类型为null;
注意:public、protected、private、static、final,其中public、protected、private三个最多只能出现其中一个,可以与static、final组合起来修饰属性。

3/定义方法:[修饰符] 方法返回值类型 方法名 (形参列表){执行语句组成 的 方法体}

注意:返回值类型 可以是基本类型 也可以是引用类型
如果有返回值类型,比如int,方法体内必须有return +返回值类型
如果无返回值类型,必须用void表示没有返回值;
形参列表 可有可无

4/构造方法–构造器: [修饰符] 构造器名 (形参列表){}
注意:无返回值类型,方法名和类名相同,只能被对象调用

5/对象 语法: 类名+ 变量名称= new+ 类名 +(形参);
例如 Cat p = new Cat();
括号内,如果构造方法为空,则此处为空;输出的是属性定义的值;
如果构造方法填写了形参,此处为实参,具体值。输出的也是具体的值。

注意:定义的属性如果有static修饰,输出的时候: 对象名.属性名 或者 变量.属性名。
例如: Cat.name/ p.name; 建议用Cat.name
如果无static定义,则 p.name即可;

6/成员变量/局部变量
在这里插入图片描述

7/final 修饰的变量–值不可更改—必须指定初始值;
final修饰的方法,不能重写;
final修饰的类,不能被继承;

8/Abstract:
抽象的,可以修饰类/方法

抽象类:
1/只能被声明引用,不可以创建对象
2/不可以被static修饰
抽象类的目的,只是为了让子类继承

抽象方法:
1/抽象方法无方法体,后面无{}。只有;
2/必须在抽象类下
3/子类或者成为抽象类,或者实现所有的抽象方法–最终父类的抽象方法都要被子类最终实现

作用:
共性的东西抽象出来,声明抽象方法—让子类继承,在子类里面定义属性+构造方法+重写方法—在test类里 赋值 实现。
如果求图形的周长/面积。这个就可以是抽象父类的抽象方法,子类重写赋值实现方法。

2.5.3 对象与垃圾回收

1 对象在内存中的状态
1)可达状态
当一个对象被创建后,有一个以上的引用变量引用它。在有向图中可以从起始顶点导航到该对象,那么它就出于可达状态,程序可以通过引用变量来调用该对象的属性和方法。
2)可恢复状态
如果程序中某个对象不再有任何引用变量引用它,他将进入可恢复状态,此时从有向图的起始顶点不能导航到该对象。在这种状态下,系统的垃圾回收机制转变回收该对象所占用的内存。在回收该对象之前,系统会调用可恢复状态的对象的finalize方法进行资源清理,如果系统调用finalize方法重新让一个以上的引用变量引用该对象,则该对象会再次编程可达状态;否则,该对象将进入不可达状态。
3)不可达状态
当对象的所有关联都被切断,且系统调用所有对象的finalize方法依然没有使该对象变成可达状态后,这个对象将永久性地失去引用,最后变成不可达状态。只有当一个对象出于不可达状态,系统才会真正回收该对象所占用的资源。
在这里插入图片描述

2 强制垃圾回收
调用 System 类的 gc() 静态方法:System.gc()
调用 Runtime 对象的 gc() 实例方法:Runtime.getRuntime().gc()
这种强制只是建议系统立即进行垃圾回收,系统完全有可能建议完全置之不理,垃圾回收机制会在收到通知后,尽快进行垃圾回收。
3 finalize 方法
Object类的finalize()方法。
finalize 方法的特点
1)永远不要主动调用某个对象的finalize 方法,该方法应交给垃圾回收机制调用。finalize 方法何时被调用,是否被调用具有不确定性,不要把finalize 方法当成一定会被执行的方法。
2)在 JVM 的规范中,只规定了 JVM 必须要有垃圾回收机制,但是什么时候回收却没有明确说明。也就是说,对象成为了垃圾对象之后, 并不一定会马上就被垃圾回收。
3)Sun 公司采用的垃圾回收的方式,是“最少回收” 的方式:只有当内存不够的时候才会进行垃圾回收。
4)当JVM执行finalize 方法时出现异常时,垃圾回收机制不会报告异常,程序继续执行。
目前已有很多用户,建议抛弃Object 类的 finalize 方法。

总结:
任何java类都可以重写Object类的finalize方法。
finalize 方法在对象被垃圾回收的时候调用。
但是,由于 Sun 公司的 JVM 采用的是“最少”回收的机制,因此不应当把释放资源的代码写在 finalize 方法中。

2.5.4 接口

接口interface: 抽象方法和常量定义的集合
public interface 接口名 { }
接口特性:
1/变量默认 public static final 修饰;
2/方法 默认 public abstract修饰;
3/接口没有构造器;
4/接口–多继承
5/实现接口的类里面,必须实现接口里面全部方法,必须

2.5.5 内部类

内部类是指在一个外部类的内部再定义一个类。内部类作为外部类的一个成员,并且依附于外部类而存在的。
内部类主要有以下几类:非静态内部类、局部内部类、静态内部类、匿名内部类。

2.5.6 枚举类

enum

2.5.7 包装类

基本数据类型 转换为 对象类型,方便 object统一调用

2.5.7 其他常用类简要说明

1/ object类,所有类的父类
有getclass() 和equals() , toString()方法

2/ String StringBuffer StringBuilder 类

String 长度不可变
StringBuffer长度可变,线程安全
StringBuilder长度可变,线程不安全

3/ Math类 数学运算 Math.floor() , Math.ceil(), Math.round(),Math.random()等

4/ Random类 产生伪随机数流
5/ ThreadLocalRandom类,作为Random的增强版,线程安全

6/BigDecimal类,商业计算中,精确计算货币值

7/日期的类
7.1 Date类 日期类
7.2 Calendar类 日历类

8/正则
使用pattern matcher作为正则表达

9/格式化
NumberFormat格式化数字
SimpleDateFormat格式化日期

2.6 集合

集合是一种对象,只不过这种对象的功能,是储存和管理多个对象
在这里插入图片描述说明:
Collection 接口
特点是:元素是 Object。换而言之,Collection 接口所有的子接口,以及其实现类,所管理的元素单位都是对象。
Map 接口
与 Collection 接口对应,Map接口所管理的元素不是对象,而是“键值对”。
什么是键值对呢? “键”和“值”各是一个对象,这两个对象之间,存在着对应的关系,我们可以通过键对象,来找到对应的值对象。在 Map 中,键对象是唯一的,不可重复的,而键对象所对应的值对象是可以重复的。
List 接口
Collection 的子接口
特点,是 List中元素有顺序,可以重复。
Set 接口
Collection 的子接口
特点是元素不可以重复,无顺序。

2.7 异常处理

在Java语言中,将程序执行中发生的不正常情况称为“异常”,开发过程中的语法错误和逻辑错误不是异常。
在这里插入图片描述Throwable类
是所有错误的父类。Java中所有的错误类都是Throwable的子类。
Error类
Throwable类的子类,一般是指与虚拟机相关问题,如系统崩溃、虚拟机错误等,这种错误无法恢复或不可能捕获,将导致程序中断。
Exception类
是Throwable类的子类,是指还不那么严重,有挽回余地的错误,这个单词被翻译成“异常”,在 Java 中的异常处理,指的就是 Exception 的处理。
RuntimeException类
是Exception的子类,被称为“未检查异常”或“运行时异常”。
未检查异常
RuntimeException 的子类,指的是在写程序过程中可以避免的异常。可以这么来理解,之所以发生“未检查异常”,原因就是程序员写完程序以后没有好好检查;如果程序员能够好好检查自己的代码,则这些异常都可以避免发生。
如:
1)ArithmeticException:当出现异常的运算条件时,抛出此异常。例如,一个整数“除以零”时,抛出此类的一个实例。
2)ArrayStoreException:试图将错误类型的对象存储到一个对象数组时抛出的异常。
3)ClassCastException:当试图将对象强制转换为不是实例的子类时,抛出该异常。
4)IndexOutOfBoundsException:指示某排序索引(例如对数组、字符串或向量的排序)超出范围时抛出。
5)NullPointerException:当应用程序试图在需要对象的地方使用 null 时,抛出该异常。
已检查异常
Exception 的子类,但不是 RuntimeException的子类,指的是一类无法避免的异常,编译时报错。可以这么来记忆:“已检查异常”是程序员已经仔细把代码检查过了之后,依然会发生的异常。这种异常因为程序员无法避免,因此必须要处理。 如果一个程序可能发生已检查异常,而程序中缺少处理异常的代码,那么编译时我们会得到编译错误。
如:
1)SQLException:提供关于数据库访问错误或其他错误信息的异常。
2)IOException:当发生某种 I/O 异常时,抛出此异常。
** 解决异常的方法**
1)遇到错误就终止程序的运行
2)向上层抛出,交给外层处理
3)编写程序时,就考虑到错误的检测、错误消息的提示,以及错误的处理;最理想是编译期处理,但是大部分异常都发生在运行期

2.8 java_IO 流处理

将 JVM 中的数据写出去,我们称为数据的输出(O)。反之,将数据读入 JVM,我们称之为数据的输入(I)。因此, Java 中解决这部分问题的 API 被称为 I/O。( I 是英语 Input 的首字母,表示输入, O 是英语 Output 的首字母,表示输出)

在这里插入图片描述1/ File类
用于文件的创建/判断/移动/删除/等操作
2/ I/O流,作为文件内容的处理:
https://blog.csdn.net/hfut_why/article/details/83720228
在这里插入图片描述

2.9 多线程

进程:
是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位。
线程:
是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源。

创建线程的三种方式
通过继承Thread 类
通过实现Runnable接口
使用Callable 和 Futrue 创建线程

对比:
采用实现Runnable接口、Callable 接口方式
线程类只实现了Runnable接口或 Callable 接口,还可以继承其他类。
多线程可以共享同一个target对象,所以非常适合多个相同线程来处理同一份资源情况。
编程稍复杂,如果需要访问当前线程,则必须使用Thread.currentThread()方法。
采用继承Thread类方式
线程类已经继承了Thread类,不能再继承其他父类。
编程简单,如果需要访问当前线程,直接使用this即可获得当前线程。

实现Runnable接口和实现Callable接口的区别:
Runnable是自从java1.1就有了,而Callable是1.5之后才加上去的
Callable规定的方法是call(),Runnable 规定的方法是run()
Callable的任务执行后可返回值,而Runnable的任务是不能返回值(是void)
call方法可以抛出异常,run方法不可以
运行Callable任务可以拿到一个Future对象,表示异步计算的结果。它提供了检查计算是否完成的方法,以等待计算的完成,并检索计算的结果。通过Future对象可以了解任务执行情况,可取消任务的执行,还可获取执行结果。
推荐采用实现 Runnable 接口、Callable 接口的方式创建多线程。

生命周期:
当线程被创建并启动以后,它既不是一启动就进入执行状态,也不是一直处于执行状态,在线程的生命周期中,它要经过新建、就绪、运行、阻塞、死亡5种状态。尤其是当线程启动以后,它不可能一直“霸占”着CPU独立运行,所以CPU需要在多条线程间切换,于是线程状态也会多次在运行、阻塞之间切换。

2.10 Maven简介、安装及使用

1.1 帮你下载jar包
maven项目会有一个 pom.xml文件, 在这个文件里面,只要你添加相应配置,他就会自动帮你下载相应jar包,不用你铺天盖地的到处搜索你需要的jar包。
下面是示范配置文件pom.xml
pom配置
maven都会通过,项目名-项目模块-项目版本来maven在互联网上的代码库中下载相应jar包。
1.2 寻找依赖,帮你下载依赖
寻找jar包是第一基本功能,寻找依赖在这个是在这个基础上的功能。
在maven的代码库中,每一个jar包也有自己的 pom.xml文件,而这个文件里面也会有配置,只要你配置的jar包所依赖的其他jar包都会被maven自动下载下来。

2.10.1 log4j 日志处理

入门教程 其实是对日志的输入输出处理显示
https://blog.csdn.net/qq_35787138/article/details/81009056

2.10.2 fastjson json处理

2.11 和数据库mysql之间的交互

1/mysql 关系型数据库 二维表及之间关系的数据库
操作: insert into 表 values ();
where group by …having
order by 列 desc/asc

2/JDBC链接数据库
代码:注册驱动–建立链接–创建执行sql语句对象–执行sql语句得到返回值–处理结果集–关闭资源

3/c3p0数据库连接池:类似一个中间的类似库,我们是从库拿数据

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值