一:java的写法
1,能自己搭建java环境
2、能够编写hello Word程序
3、掌握环境变量path的原理,以及如何配置
4、掌握环境变量classpath的原理以及如何配置
* class path是给classloader类加载指路的
* classpath=自己写的java代码文件的路径
5、java的注释
6、public class和 class区别
* 一个java源文件中当中可以定义多个class
* 一个java原文件中public 的class不是必须的
* 一个class是会定义生成一个xxx.class字节码的文件
* 一个java源文件中定义公开的类的话,public的class只能有一个,而且该类的名称必须和java源文件名一致
* 每一个class都可以编写main方法,都可以设置程序的入口
* 想执行那个程序,就执行相应的方法
注意:当命令窗口执行java hello 那么要求hello.class必须有主方法
二: java的语言基础
1、java的方法的名规则习惯
1、标识符:
2、关键字
3、字面值
字面值就是数据
数据显示纾解中是分名别类,他在计算机中也是有类型的【数据类型】
100 属于整数型字面值
“ABC” 属于字符串字面值
‘A’ 属于字符字面值
3.14 属于浮点型字面值
true、FASE 属于布尔字面值
4、变量
1、关于java中的变量
1、在方法体中java代码,是遵守自伤而下的顺序执行的
2、变量的作用域:变量的有效范围:
只需要记住一句话:
出了大括号就不认识了
2、变量的分类:
- 局部变量:在方法体内申明的变量称为 局部变量
- 成员变量:在方法体外申明的变量称为 成员变量
- 类变量(静态变量)
类变量也称为静态变量,在类中以 static 关键字声明,但必须在方法之外。
无论一个类创建了多少个对象,类只拥有类变量的一份拷贝。
静态变量除了被声明为常量外很少使用,静态变量是指声明为 public/private,final 和 static 类型的变量。静态变量初始化后不可改变。
静态变量储存在静态存储区。经常被声明为常量,很少单独使用 static 声明变量。
静态变量在第一次被访问时创建,在程序结束时销毁。
与实例变量具有相似的可见性。但为了对类的使用者可见,大多数静态变量声明为 public 类型。
默认值和实例变量相似。数值型变量默认值是 0,布尔型默认值是 false,引用类型默认值是 null。变量的值可以在声明的时候指定,也可以在构造方法中指定。此外,静态变量还可以在静态语句块中初始化。
静态变量可以通过:ClassName.VariableName的方式访问。
类变量被声明为 public static final 类型时,类变量名称一般建议使用大写字母。如果静态变量不是 public 和 final 类型,其命名方式与实例变量以及局部变量的命名方式一致。
5、数据类型:
5.1、基本数据类型:
注意:字符串不属于基本数据类型
5.2、引用数据类型
5.3、数据类型的转换
6、运算符
7、控制语句
8、方法
方法介绍
方法的重载:overload 方法名相同参数不同
方法的重写 (方法的覆盖):方法名相同,参数列表相同(override )的继承
(二) 父类的返回类型必须与被子类重写的方法返回类型相同,否则不能称其为重写而是重载。
(三) Java中规定,被子类重写的方法不能拥有比父类方法更加严格的访问权限。编写过Java程序的人就知道,父类中的方法并不是在任何情况下都可以重写的,当父类中方法的访问权限修饰符为private时,该方法只能被自己的类访问,不能被外部的类访问,在子类是不能被重写的。如果定义父类的方法为public,在子类定义为private,程序运行时就会报错。
(四) 由于父类的访问权限修饰符的限制一定要大于被子类重写方法的访问权限修饰符,而private权限最小。所以如果某一个方法在父类中的访问权限是private,那么就不能在子类中对其进行重写。如果重新定义,也只是定义了一个新的方法,不会达到重写的效果。
(五) 在继承过程中如果父类当中的方法抛出异常,那么在子类中重写父类的该方法时,也要抛出异常,而且抛出的异常不能多于父类中抛出的异常(可以等于父类中抛出的异常)。换句话说,重写方法一定不能抛出新的检查异常,或者比被重写方法声明更加宽泛的检查型异常。例如,父类的一个方法申明了一个检查异常IOException,在重写这个方法时就不能抛出Exception,只能抛出IOException的子类异常,可以抛出非检查异常。同样的道理,如果子类中创建了一个成员变量,而该变量和父类中的一个变量名称相同,称作变量重写或属性覆盖。但是此概念一般很少有人去研究它,因为意义不大。
构造方法
方法的内存图分析
- 方法一的内存图分析
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Fc42cnMJ-20)(https://i-blog.csdnimg.cn/blog_migrate/c91d6a8a24f7bbe8d31e9e67b22b01f7.png)]
- 方法二的内存图分析
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wRZnvVOA-22)(https://i-blog.csdnimg.cn/blog_migrate/3bff3ed5a4a27.png)]
jvm的介绍:
空指针:
如果a=null,会报空指针异常,空引用访问“实例”相关的数据会出现空指针色
三、面向对象,面向过程编程
1、类的定义
2、创建对象:
3、访问实例变量的语法
4、面向对象的三大特征
封装步骤:
构造方法:
重点:this();这种语法只能出现在第一行。
也就是说:一个构造方法中只能调用一个构造方法
5、参数传递
1、对象和引用
2、参数传递
2.1、:参数传递
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YIRKsg5W-23)(https://i-blog.csdnimg.cn/blog_migrate/4d982ab8d9ab6c38647e96bd.png)]
把main方法中的内存地址传给了add:传递u给add方法的时候,实际上产地的是u变量保存的值,只不过这个是是java对象的内存地址
add(u) 等同于:add(0x1234)
1、方法的实参形参也可以是构造函数
2、方法调用的时候传递的是变量中保存的“值”
6、this关键字
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VUYsXCLD-24)(https://i-blog.csdnimg.cn/blog_migrate/b8ad0e84a0b464dbfa41b49fc94967be.png)]
一:什么时候可以使用this关键字:
1、this关键字:神奇
-this是一个关键字,翻译为这个
-this里面保存了内存地址,指向自身对象
3、this是一个引用,this是一个变量,this变量中保存了自己的内存地址,this存储在JVM的堆内存的对应对象中。
4、当使用zhangSan去访问该对象时,整个过程中出现的this就等于zhangSan
5、没有static关键字的方法被称为实例方法
7、this可以用在实例方法中,代表正在执行这个方法的对象
8、this在多数情况下可以省略不写。由于上面的name代表的是当前对象的实例变量,可以省略
9、.static的方法调用不需要对象,直接使用类名,执行过程中直接类名.方法名
例子:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8GkVstRr-25)(https://i-blog.csdnimg.cn/blog_migrate/ef4426ff6eabedc5d6b5e.png)]
结论:带有static的方法不能直接访问“实例变量和 实例方法”
通过无参的构造方法来调用有参的
二、this什么时候不能省略
1、用来区分实例变量和局部变量的时候不能省略
2、带有static的方法,可以采用类名.方法名的方式访问,也可以用引用.方法名的方式来访问,
7、Super关键字的使用(出现在继承中)
当需要在子类中调用父类的被重写方法时,要使用super关键字。
(1)super能出现在实例方法和构造方法中。
(2)super的语法是“super.”和“super()”。
(3) super不能出现在静态方法中。
(4) super大部分情况下是可以省略的。
8、static关键字
一旦使用static修饰成员方法,那么这就成为了静态方法。静态方法不属于对象,而是属于类的。
无论是成员变量,还是成员方法。如果有了static,都推荐使用类名称进行调用。
静态变量:类名称.静态变量
静态方法:类名称.静态方法()
注意事项:
- 静态不能直接访问非静态。
原因:因为在内存当中是【先】有的静态内容,【后】有的非静态内容。
“先人不知道后人,但是后人知道先人。” - 静态方法当中不能用this。
原因:this代表当前对象,通过谁调用的方法,谁就是当前对象。
1.实例变量:
=country带static=============================
=country不带static=================
}
1.关于java中的static关键字:
1.static单词:静态的
2.static修饰的是静态方法
3.static修饰的变量都是静态变量
4.所有的static修饰的元素都成为静态的,都能使用 “类名.”的方式访问,也能通过“引用.”的方式访问
2、可以使用static关键字来定义“静态代码块”
1.语法格式:
2、静态代码块在类加载的时候执行,并且只执行一次
3、静态代码块在一个类中可以编写多个,并且遵循自上而下的方式进行
4、为什么要学?有什么好处?
5、通常在静态代码块中完成数据准备工作。例如:初始化连接池,解析XML配置文件
6、静态代码块(使用的非常少)
7、实例代码块(用的非常少)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vozHAKPk-26)(https://i-blog.csdnimg.cn/blog_migrate/db48c44ffeff4cc8ea2ec623d0f3f38a.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bKhVuXgD-26)(https://i-blog.csdnimg.cn/blog_migrate/155f9c67e4be4fe34cdfe.png)]
2.java基础类型知识在构造方法之前执行一次。
8、方法什么时候声明为静态的?
继承
四、关于java语言中的继承
1、继承的介绍
- 1.继承是面向对象三大特征之一:封装,继承和多态
- 2.继承基本的作用是:代码复用。但是继承最重要的作用是:有了继承才有了以后方法的覆盖和多态这种机制,减少代码的编写
- 3.继承语法格式:
- 4.java语言当中的继承只支持单继承,一个类不能同时继承很多类,只能继承一个类
- 5.关于继承中的术语:
B类继承A类 其中:A类称为父类、基类、超类、superclass
B类称为:子类、派生类、subclass - 6.在java语言当中子类继承父类都继承那些数据呢?
- 7.虽然java语言当中只支持单继承,但是一个类也可以以间接继承其他类
任何一个类默认继承object类
- 8.当一个类没有显示地继承任何类,该类默认继承JAVASE库当中的java.lang.Object类
- 9.私有的不继承,其他的可以继承,直接把里面的方法拿过来用。
Super关键字的使用(出现在继承中)
当需要在子类中调用父类的被重写方法时,要使用super关键字。
2、方法覆盖
1.Overload回顾方法重载
2.方法覆盖Override(方法重写,Overwrite)
- 1.什么时候使用方法重写?
当父类中的方法已经无法满足当前子类的也无需求,子类有必要将父类继承过来的方法进行重写(覆盖); - 2、什么条件满足后会发生方法重写呢?
1、方法覆盖发生在具有继承关系的父子类之间
2、返回值类型相同,方法名相同,形参列表相同就发生覆盖。
3、一定调用覆盖后的方法
4、访问权限不能更低,可以更高
没重写前都是动物在移动,显然无法实现cat和dog的业务
重写后
父类中:public
3、多态
1.多态的语法:
1、Animal、Cat和Bird三个类之间的关系:
Cat继承Animal
Bird继承Aninal
Cat和Bird没有任何继承关系
2.关于多态的几个概念
向上转型(upcasting)
向下转型(downcasting)
3.Animal a2 = new Cat();
4.java程序永远都分为编译阶段和运行阶段
5.无论Cat类有没有重写move方法,运行阶段一定调用的是Cat对象的move方法,应为底层真是对象就是Cat对象
6.父类型引用指向子类型对象这种机制导致程序存在编译阶段绑定和运行阶段绑定两种不同的形态/状态
7.静态绑定成功后才能进行动态绑定。
4、多态进阶:
1.不存在继承关系的类型:
2.如果说要调用父类型没有的方法?
注:向下转型也需要两种类型之间有继承关系。要加上强制类型转换符
- 什么时候需要向下转型呢?
- 怎么转?
3.类型转换异常:如果说有一个代码:
- 编译阶段没问题,因为编译器认为a3是Aninal(父),转换为c3(子)
语法合格 - 程序虽然编译通过了,但是程序在运行阶段会出现异常,应为JVM堆内存
当中真实存在的是Bird类型,Bird类型无法转换为Cat对象,因为两种类型没有继承关系
此时出现了著名的异常:java.lang.ClassCastException异常:类型转换异常
这种异常只有在强制类型转换的时候出现异常
怎么避免这种异常?instanceof 的使用
- 1、以上异常只有在强制类型转换的时候会发生,也就是说,向下转型存在安全隐患
- 2、向上转型只要能编译通过,运行一定不会出问题
- 3、向下转型编译通过,运行可能出问题
- 4、怎么避免乡下转型出现的类型转换异常?
使用instanceof运算符可以避免以上异常 - 5、instanceof怎么用?
- 6、如果想要安全执行向下转换:
- 7.java规范中要求,在进行强制类型转换之前,建议使用instanceof运算符进行判断,避免ClassCaseExpection异常的出现
4.调试debug的方法:断点
5、多态在实际开发中的作用
面向对象的例子
6、final关键字
final关键字
final关键字
7、package import
最终结论:
什么时候使用import?不再java.lang包下,又不再同一个包下,要import
访问控制权限 基础篇完结
五、java进阶
1、final关键字
1、final的及简介
2、final修饰的引用
3、final修饰的实例变量系统不能默认复制,需要手动赋值(直接赋值,或者在构造方法之前赋值)
常量:实际上常量和静态变量一样,区别在于
常量的值是不能变的
常量和静态变量,斗志储存在方法区域,都是在类加载的时候初始化
4、final总结:
1、final是一个关键字,表示最终的,不可变的.
2、类的抽象
/
- 小明的储蓄卡 小花的储蓄卡 小明的信用卡 小花的信用卡 ====>这个层面比做对象
- 1、抽象类无法创建对象:类与类有些共同特征,将这些共同的特征经一步形成抽象类,由于类是不是不存在的,所有抽象类无法创建对象
- 2、抽象类属于引用数据类型
- 3、抽象类的定义:
- 4、抽象类无法创建对象的,所以只能用来继承
- 编写有参的构造方法,但没有无参数的构造方法,继承是默认是会继承无参数的构造方法(通过supper)
- super(参数):调用父类中的某一个构造函数(应该为构造函数中的第一条语句)
*/
抽象方法在父类中不能实现,所以没有方法体。
3、Super关键字的理解
4、接口 interface
1、接口是一种引用数据类型
2、接口是完全抽象的
3、接口的基础语法:
4、接口和接口是可以继承的,并且支持多继承’
5、接口中有两部分内容:
1、一部分是常量
2、另一部分是抽象方法;
6、抽象方法的定义
7、接口中的方法的修饰符可以省略(public abstrac),接口中常量也可以省略 public static final
8、接口中的方法中不能有方法体
9、接口在开发中的应用:
1、类和类之间叫继承,类和接口之间叫实现
继承用extends关键字来完成
实现用implements来完成
这样写是有问题的,接口是抽象的而myMathImpi类不是抽的,方式一,在myMathImpi类前面加abstract ,或者重写接口中的方法
重写接口中的抽象方法
面向抽象的编程,父类比子类更抽象
接口在开发中的作用:
面向抽象编程换句话说可以修改为:面向接口编程
不理解对象的下面这个例子可以加上
分析:中午去饭馆吃饭,如何实现面向接口面层
接口是抽象的
菜单是一个接口 菜单是一个抽象的照片
谁面向接口调用 顾客面向菜单点菜
谁负责实现这个接口 厨师负责调用这个接口,做好某个菜
只剩Customer,FoodMenu可以编译通过
Test1。ChineseCook,AmericCook也可以编译通过
类与类之间的关系
is a,has a, like a
is a: Cat is a Animal (猫是个动物)
但凡能满足is a 的表示继承关系
A extends B
hsa a:I has a pen (我有一只笔)
但凡能满足hsa a关系表示“”关联关系
关联关系通常以“属性的方式存在”
A {
B b;
}
like a
cook like a FoodMenu(厨师向一个)菜单一样
但凡能满足like 啊关系的表示“还实现类”
实现类关系通常是:类实现接口
A implements B
5、访问文控制权限
临时补充输入的写
6、Tostring
Tostring方法的目的是为了方便把java对象转化为String的方式表示
7、euqals方法
1、判断两个对象不能用 “==”,==不能判断两个对象相等,所以每个类都要重写tostring和equals
instanceof 严格来说是Java中的一个双目运算符,用来测试一个对象是否为一个类的实例,用法为:https://www.cnblogs.com/ysocean/p/8486500.html
简写如下=====================
java中什么类型的数据可以使用 == 号判断
java中什么数据类型可以使用 equals 判断
当一个学生的学号相等,并且学校相同,表示同一个学生
8、内部类和匿名内部类
匿名内内部类和lambda表达式主要的区别在于
1、匿名内部类他必须实现继承类的所有方法
2、匿名内部类在重写时有override标识,而lambda没有
3、lambda表达式继承的接口只能有一个抽血方法
匿名内部类:在类的内部定义了一个新的类
内部类的分类:
静态内部类
实例内部类
局部内部类
实际上使用内部类编写代码,可读性太差
使用匿名对象或者匿名内部类来实现调用
同时使用匿名内部类和匿名对象
9、反射
1. 获取成员变量们
getField()
getDeclaredFields() && getDeclaredField()
2. 获取构造方法们
有参的构造器getConstructor(类<?>… parameterTypes)
无参的构造器getConstructor()
3. 获取成员方法们
获取无参的方法
获取有参的方法getMethod()
获取所有public修饰的方法:getMethods()
4. 获取类名
测试反射,通Properties()对象来获取方法
pro.properties文件自己去创建
10、函数式接口,一般配合Lambda表达式一起使用
(1)使用Lambda必须有接口,且接口只有一个抽象方法(即函数式接口)。
(2)Lambda必须可以“上下文推断”(就是依据语境推断出参数类型,这也是Lambda的一个优点,使得参数类型得以省略,更加简洁)
缺点:
(1)不容易debug模式调试;
(2)在lambda语句中强制类型转换不方便;
(3)不能再foreach中修改forEach外面的值
(4)如果不并行计算,很多时候计算速度不如传统for循环.
方法的参数是一个接口,所以我们可以传递接口的匿名内部类【匿名内部的作用就是减少实现类的编写】
使用Lambda表达式去重写method()方法【()代表的就是method()方法】
11、Stream的详细介绍
Stream的详细介绍所有的Collection集合都可以通过stream默认方法获取流;
https://blog.csdn.net/_/article/details/
把集合转换为Stream流
1、ArrayList集合中
2、Set集合中
3、键值对HashMap集合中key 和value的获取
4、获取键值对(键与值的映射关系 entrySet)
5、 把数组转换为Stream流
6、forEach
据
7、filter
7、map
Stream流中的常用方法_map:用于类型转换
如果需要将流中的元素映射到另一个流中,可以使用map方法.
Stream map(Function<? super T, ? extends R> mapper);
该接口需要一个Function函数式接口参数,可以将当前流中的T类型数据转换为另一种R类型的流。
Function中的抽象方法:
R apply(T t);
8、count
9、limit
10、skip
11、concat
Stream流中的常用方法_concat:用于把流组合到一起
如果有两个流,希望合并成为一个流,那么可以使用Stream接口的静态方法concat static Stream
concat(Stream<? extends T> a, Stream<? extends T> b)
练习:集合元素处理(Stream方式)
输出:
Person{name=‘宋远桥’}
Person{name=‘苏星河’}
Person{name=‘石破天’}
Person{name=‘张天爱’}
Person{name=‘张二狗’}
六、数组
1、数组实际是一个容器,可以容纳多个元素
2、数组中可以储存基本数据类型,也可以储存引用数据类型
3、数组因为是引用数据类型,所以数组的对象储存在堆内存中
4、数组如果储存的是java对象,实际是哪个储存的是引用
5、数组一旦创建,在java中,长度不可变
6、java中数组要求数组中的元素的类型统一
数组的优点:
1,储存是连续的
2、每个元素的类型相同,空间大小相同
3、第一个元素的内存地址,就世道每个元素占用空间的大小
缺点:
1、在数组上随机增删的时候,会涉及到后面元素唯一
2、很难找一块大的连续的空间
1、mian方法中 String[] args 解释
args参数的作用是获取系统输入的值
2、一维数组
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BHv1ua9n-28)(https://i-blog.csdnimg.cn/blog_migrate/fe72d5a04765ee9cedf901da5aed2e13.png)]
1、数组为引用数据类型
2、数组中存放对象。调用子类中的方法
3、调用子类中特有的方法
以为数组的扩容
3、 二维数组
动态初始化二维数组
int a3[][]=new int [2][4];
4、Arrays工具类
4.1、冒泡排序
4.2、二分法
4.3、选择排序
所有方法都是静态的
Arrays.binarySearch(a1,2);//查找该元素的下标
Arrays.sort(a1);//排序
String工具类
字符串在方法区中
通过上面方法比较比较两个对象的值相等不能用-==号
5、关于string的常用构造方法
String的常用方法
得出结论,string方法重写了tosting方法
Stringbuffer
java中字符串是不可变的,每一次拼接都会产生新的字符串,这样会产生内存空间的浪费
6、8种包装类
7、自动装箱和自动拆箱
String 中有一个byte数组,byte数组中有一个finaly,所以是不可变的
Internet中常用的放啊
Integer a1= new Integer(“熊磊”);//不能这样写,一定要是数组
引用数据类型转换图
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pepDltl7-32)(https://i-blog.csdnimg.cn/blog_migrate/ea119bb5dcab77c0fe0aa4e8d353ee22.png)]
8、日期&数据处理
9、枚举
10、异常的处理
异常的处理方式
/
- 执行中发生了不正常的情况,
- 把改异常的信息打印出来
- 异常已类的形式存在,每个异常类都有一个异常对象,发生异常会穿件一个对象
*/
七、集合
集合详细解释
https://blog.csdn.net/feiyanaffection/article/details/
https://www.runoob.com/java/java-collections.html
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Yy7Snoi9-33)(https://i-blog.csdnimg.cn/blog_migrate/98edb8e84b38bbab8f4c0fc07b44efa4.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-usv5gnE7-33)(https://i-blog.csdnimg.cn/blog_migrate/4643f53338eff060a3afc1d0dc8e9522.png)]
Collection接口中的方法
迭代器:
contains,remove详解
List 中特有的方法
泛型的定义
Hashset
map
IO流
什么是IO流
文件的读写
通过Io可以完成文件的读和写
这种流使能读取文本文件,不能读取声音,图片,视频,word等文件
https://www.cnblogs.com/shuaiguoguo/p/8883862.html
序列化
常用工具的处理
JSON.parseObject和JSON.toJSONString
JSON.parseObject 是将Json字符串转化为相应的对象;
JSON.toJSONString 是将对象转化为Json字符串
两者主要用于前后台的数据传输过程中
StringUtils.isBlank(a)
Arrays.asList
常用的排序和计算和的方法
常用的日期处理方式
版权声明:
本文来源网络,所有图片文章版权属于原作者,如有侵权,联系删除。
本文网址:https://www.bianchenghao6.com/h6javajc/18695.html