JAVA语言学习总结
一、环境搭建
1.java概述
java是SUN公司1995年推出的一门高级编程语言;是一种面向Internet的编程语言;已经成为Web应用程序的首选开发语言;是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
2.JRE(环境)和JDK(工具)配置
①下载网址
http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
②安装教程
https://jingyan.baidu.com/article/3c343ff70bc6ea0d377963df.html
3.path配置
①我的电脑--属性--高级--环境变量
l 编辑path环境变量,在变量值开始处加上java工具所在目录,后面用 “ ; ”和其他值分隔开即可。
l 打开DOS命令行,任意目录下敲入javac。
l 如果出现javac 的参数信息,配置成功。
②为了不因为jdk的目录或者目录名称的改变,而不断更改path的值,而导致对path变量值的误操作,可以通过以下技巧完成。
l 新创建一个环境变量 JAVA_HOME 记录住jdk的目录。
l 在path中通过%%动态的获取JAVA_HOME的值即可。
l JAVA_HOME=F:\jdk1.6.0_01
l path=%JAVA_HOME%\bin;%path%
l %path%:动态获取path环境变量的值。
l %JAVA_HOME%:动态获取名称为JAVA_HOME环境变量的值。
二、JAVA语言基础
1关键字
2.常量变量
3.运算符
l 算术运算符+ - * / % ++ --
l 赋值运算符= += -= *= /= %=
l 比较运算符== != < > <= >=
l 逻辑运算符& I ^(异或) ! && II
l 位运算符<< >> >>> & ^ I ~(取反)
l 三元运算符()?_ : _
4.流程控制
①判断结构if
②选择机构switch
③循环结构while
Note:break语句:只作用于switch语句;
Continue语句:只作用于循环结构(本次循环结束,继续下次循环)
5.函数
修饰符 返回值类型 函数名(参数类型 形式参数1,参数类型 形式参数2,...)
{执行语句;
return 返回值;
}
6.数组
①一维数组
②二维数组 int[][]arr = new int[3][2];
三、面向对象
1封装
①private关键字:提高对数据访问的安全性。
a将成员变量私有化;
b对外提供对应的set ,get方法对其进行访问。
②构造函数:对象创建初始化。
a创建:函数名与类名相同
Note:不用定义返回值类型;
没有具体的返回值。
b调用:
eg:Person p = new Person(“lisi”,20)
③this关键字:代表所在函数的对象。
④static关键字:
| 静态变量 | 成员变量 |
范围 | 类 | 对象 |
调用 | 类或对象 | 对象 |
加载 | 随着类 | 随着对象 |
存载 | 方法区 | 堆内存 |
2继承(Extends)
①super关键字:代表父类的内存空间的标识。
②final关键字:最终化,打破封装性,数据固定不变。
③抽象类:无足够信息描述,即为抽象。
创建:abstract class/void 函数( ).
Note:不可共存关键字
final | final不派生类,abstract必须有子类 |
private | Private不能覆盖,abstract子类方法必须覆盖抽象方法 |
Static | Static调用无意义(作用),abstract调用无意义 |
④接口(interface):抽象类中方法全为抽象,用接口。
应用:多实现class C implements A B
多继承interface C extends A B
父类功能扩展:class C extends A implements B
Notes:a 定义变量必须使用public static final(不可创建对象)
b 定义方法必须使用public abstract(子类必须全覆盖才可实例化)
3.多态:在继承或实现关系下提高程序扩展性
①转型
a向上 Animal a = new Dog()
b向下 Dog d = (Dog)a
Note:Object类可用类内多种方法equals 、toSrting
②内部类:
内部类可以直接访问外部类中的成员,包括私有成员。
而外部类要访问内部类中的成员必须要建立内部类的对象。
4异常(Exception)
①throws与throw的区别:
• thorws用在函数上,后面跟异常类名。
• throw用在函数内,后面跟异常对象。
②构造函数异常继承Exception和RuntimeException区别:
aException 需要throws声明
调用者捕获→处理→继续执行→使用构造函数错误数据→失败
bRuntimeException 不需要throws声明
调用者不知道→异常出现→调用者程序停→显示→修改
③捕获语句
try
{ 需要检测的代码;
}
catch(异常类 变量)
{ 异常处理代码;
}
finally
{ 一定会执行的代码;
}
Finally代码块只有一种情况不会被执行。就是在之前执行了System.exit(0)。
5包的使用:便于多个类的管理
①权限
②import关键字:导入包
③jar包:
a设置:jar –cuf haha.jar pack
b使用:set classpath = .\haha.jar
四、多线程
1多线程:合理使用CPU。
解决主线程遇到循环而在指定位置停留较长时间,无法执行下面任务。
2创建线程
①继承Thread类
l 定义一个类继承Thread;
l 重写run方法;
l 创建子类对象;
l 调用start方法开启线程,并调用run方法。
②实现Runnable接口
l 定义一个类实现Runnable接口;
l 覆盖run方法;
l 创建子类对象;
l 创建Thread类的对象,并将Runnable的子类对象作为参数传递给Thread类的构造函数(明确线程任务);
l 调用Thread类的start方法(开启线程)
Note:区别
a 实现Runnable接口避免单继承的局限性,较常用;
b Runnable接口对线程对象和线程任务进行解耦,更符合面向对象。
3.安全问题
①线程随机性:线程任务中操作共享数据;
②延迟:共享数据的代码有多条(运算有多个)。
4多线程通信
①lock接口
a可替代同步synchronized,且比同步更厉害,有更多操作;
block()获取锁,unlock()释放锁。
②旧锁和新锁区别
l 旧锁:每个锁上都有一组监视器方法
Synchronized(obj)
{ obj.wait();
obj.botify();
}
l 新锁:对象和方法分离(一个锁可有多个方法)
Lock lock = new ReetrantLock(); //对象
Condition con = look.newCondition(); //方法
lock.lock();
con.await();
con.signal();
lock.unlock();
5多线程细节
①wait、sleep区别
wait():释放cpu执行权,释放锁。
sleep():释放cpu执行权,不释放锁。
②线程停止及恢复
停止:run方法结束即可;
恢复中断:interrupt强制恢复运行
③守护线程
前台线程结束,后台线程自动结束。
t1.start();
t2.set.Daemon(true); //t2为守护(后台)线程
t2.start();
五、API
1.集合(Collection)
①List和Set接口
l List:可存放重复元素,元素存取是有序的。
ArrayList:线程不安全,查询速度快。
LinkedList:链表结构,增删速度快。
Note:迭代时对元素操作ListIterator子接口
List list = new ArrayList();
ListIterator it = list.listIterator();
l Set:不可以存放重复元素,元素存取是无序的。
HashSet:哈希表结构顺序,查询速度快。
唯一性:hashCode()、equals()方法
TreeSet:二叉树结构,可以对Set集合中的元素进行排序。
唯一性:compareTo或者compare 方法
②迭代器(Iterator)
for(Iterator iter =iterator();iter.hasNext(); ) // 获取迭代器对象,判
{ 断是否有下一个
System.out.println(iter.next());
}
③Map
特点:有对应关系想到Map;
内部存储的都是键值对;
保证键的唯一性。
l HashMap:线程不安全,速度快,允许存放null键,null值。
l TreeMap:对键进行排序,排序原理与TreeSet相同。
六、IO流
1.File类
File f1 = new File(“hello”) //hello文件封装成对象
Filef2 = new File(“D:\\JAVA\\JavaSe_code\\day22e”)//文件夹封装成对象
File f3 = new File(“D:\\JAVA\\JavaSe_code\\day22e”,”hello.java”)
File f2 = new File(“D:\\JAVA\\JavaSe_code\\day22e\\hello.java”)
//固定路径封装Java对象
2 字节流
3字符流
4集合Properties(键值对)
①作用:存储切割文件后产生的配置文件
Properties prop = new Properties();//创建
prop.setProperty("zhangsan", "39"); //添加数据
prop.setProperty("lisi", "29");
FileWriter fw = new FileWriter("info.properties");
//输出流固定格式
prop.store(fw, "info"); //路径备注
fw.close();
5序列流SequenceInputStream
对碎片文件合并,将多个读取流合并为一个
6对象的读写
①对象写 ObjectOutputStream(序列化)
②对象读 ObjectInputStream(反序列化)