2020/4/17 Java学习笔记
数组和常用算法
- 一维数组
- 常用算法
- 多维数组
- 经典算法
- 增强for循环与数组
一维数组的使用方法:
- 声明数组int []a / int a[];
- 分配数组内存空间, a = new int[5];
- 数组赋值 a[0]=8;
- 处理数据
二维数组的使用方法:
int [][]a = new int[2][3];
int [][]a = {{1,2,3}, {4,5,6}};
C/C++: int a[5] = {0},申请空间和初始化就一行代码,幸好JAVA有GC机制。。
JAVA中: int []a = {1, 2, 3};int []b = new int[] {s89, 79, 76};
默认情况下,整型数组会为每一个元素赋一个初值0。
常见算法:
- 求和,求最大最小
- 数组排序:
java.util.Arrays 提供Arrays.sort(数组首地址)函数,达到升序排列的方法
- 数组复制:
System.arraycopy(a1, 0, a2, 0, arr1.length);//将a1的从0开始的arr1.length个数的元素复制到arr2(从0开始)
经典算法:
- 冒泡排序
- 插入排序:检查数组列表中的每个元素,并将其放在已排序元素的适当位置。
增强for循环:
for (int temp : arr) { //个人觉得这个更像是迭代器
System.out.println(temp);
}
int [][]arr = {{1, 2, 3},{4, 5, 6,},{7, 8, 9} };
for (int []row : arr) {
for (int temp : row){
System.out.println(temp);
}
}
抽象和封装
- 面向过程的设计思想
- 抽象
- 封装
- 属性、局部变量/成员属性、变量的作用域
- 方法
- 方法调用
- 方法参数及传递问题
- this关键字
- 简单的javabean类
- 包
OOP(Object Oriented Programming)四大特征:
- 抽象Abstract
- 封装Encapsulation
- 继承Inheritance
- 多态Polymorphism
JAVA创建类的方式与C++类似:
public class ClassRoom {
String Name;
int classNum;
int labNum;
public String shouKe() {
return Name + "培训学员"+"
"+classNum + "教" + labNum
}
}
JAVA中对象的创建和使用:
ClassRoom center = new ClassRoom();
center.Name = "北京中心"
JAVA类中定义的属性
- 常量属性final(感觉类似C++里面的const):它的值只能赋值一次,之后不能更改。
- 非常量属性就是成员属性,直接定义在类的主体中
JAVA类中的遍历
- 成员变量
- 局部变量:定义在方法里面的变量
JAVA中的方法(类似C++中类的接口)
JAVA方法:对对象的执行操作叫方法
JAVA只有构造方法(构造函数)没有析构函数(GC机制)
JAVA调用方法的参数是对象时传递是地址。
this关键字:与C++类似,this始终指向调用这个方法的对象
- 为了避免参数的作用范围覆盖了成员变量的作用范围,必须明确的使用this关键字来指定。
- 如果某个构造方法的第一条语句具有形式this(..),那么这个构造方法将调用本类中的其它购物方法。
public Employee1(String name,int age){
}
public Employee2() {
this("犀浦余文乐", 21);
}
JavaBean
JavaBean:符合如下标准的java类:
- 有一个无参的公共构造方法
- 有属性
- 属性有对应的get、set存取方法
包
为了解决管理一个大型软件系统中数目众多的类,解决类命名冲突的问题,java引入了包(package)
包的作用:
- 允许类组成较小的单元(类似文件夹), 易于找到使用相应的文件。
- 更好的保护类数据和方法
- 防止命名冲突
如何创建包:
package java.shan.chapter5;//声明一个包
- 创建包用package关键字.
- 包的声明要写在源代码的第一行
- 包的名称一般为小写,而且要有意义
编译生成包:
编译时不能直接用java.exe编译,要带上"-d"这个参数来编译。
(1) 在当前目录下生成包java -d Employee2.java
(2) 在指定的目录下生成包:java -d D:share Employee.java
运行一个带包的类: java 包名.类名
使用带包的类
import 关键字导入这个类 (此处特别像python的第三方库引入模块的语法)
import 包名.类名;
import java.util
import java.lang
JDK中常用包的介绍
- java.lang:包含一些JAVA语言的核心类,如String、Math、Integer、System和Thread提供常用功能。因为常用所以默认导入可以直接使用
- java.util: 包含一些实用的工具类, 如定义系统特性、日期时间、日历、集合类等。
- jaba.io: 包含能提供多种输入输出的流类
- java.net: 包含执行网络相关的操作的类
- java.sql: Java操作数据库的API
- java.text: 包含一些用来处理文本、日期、数字和消息的类和接口
- java.awt: 包含构成抽象窗口工具集的多个类,这些类被用来构建和管理应用程序的图形界面(GUI)
- java.swing: 包含了构成“轻量级”窗口的组件。
JAVA中的继承和多态:
- 继承Inheritance
- 多态Polymorphism
- 访问修饰符
- static关键字
- final关键字
- abstract关键字
- 接口
Java的继承实现:
class Manager extends Employee { //经理类继承自员工类
}
super关键字:指向父类对象的引用,用于初始化父类的属性和调用父类的方法
调用父类构造方法的语法:
super() 或 super(实参列表);//必须是第一句
调用父类的普通方法的语法为:
super.methodname() 或 super.methondname(实参列表)
Object类:
Java类的祖先类是java.lang.Object类。这是所有类的父类
没有extends指定父类默认是Object类。
Object类中几个实用方法:
- toString():返回代表该对象值的字符串。Object类中返回的字符串形式是"类名@内存地址的十六进制整数值."
- equals(Object obj):测试其它某个对象是否与此对象“相等”,具体是实现是通过判断两个对象是否指向同一块内存区域来判断的。
- hashCode():返回该对象的哈希码值, 重写equals()方法时,可以页重写hashCode(),可以用于判断两个对象是否为相同的对象,可以结合使用
- Clas<?> getClass(): 返回此对象运行时的类。
- clone(): 克隆一个对象,创建并返回此对象的一个副本
Java中多态的实现:
- 方法重载overloading
- 方法重写override
类型转换、向上转型和向下转型
- 父类的变量可以指向其子类的对象:
Father son=new Son();
小的数据可以赋值给大的数据,反过来却不行 - 父类变量显然不能访问其子类对象的新成员
- 可以使用
a instanceof Cat//返回值为boolean
来判断该变量指向的对象是否属于该类。即判断子类是否是相应父类的子类
- 向上转型可以直接使用
double a = b;//b is int
- 向下转型不能直接使用需要强制转换
int b; b = (int)a;
动态绑定
动态绑定也叫延迟绑定,指的是在执行期间而不是编译时编译所引用的对象的实际类型,根据其实际类型调用其相应的方法。
发生的条件:
- 要有继承
- 要有重写
- 要有父类变量指向子类对象
- 要有父类变量调用重写的方法