JAVA笔记
java中可以给语句和语句块贴上标签 。例如:sectionA:x=y+1; 标签的名字必须遵循java标示符的命名规则。
java语句中的输出是 System.out.println(); 特别注意是“S”是大写 不然编译不能通过
break是用来跳出do—while,while,for,switch语句的执行体,将break放在其他任何地地方都是错误的。可以跟标签 相当于C/C++语言中的goto标签。
switch语句中使用的表达式必须返回int string 和枚举值。
在运行java一个类时,给main传递参数,要传递参数,必须在类名的后面输入参数
基本类型分配在栈中,java对象放在堆中
一个对象可以被多个引用变量引用
除非通过一个带有对象地址的引用变量,否则绝对无法访问该对象。
不能创建java开头的包和javax开头的包 java包是保留给核心类库用的;javax是用来留给与核心类库配套的扩展类库用的。
包并不是一个物理对象,因此不需要创建。为了将类归纳到一个包中,只要在关键字 package 加上包名称。
没有包声明的类是默认包,默认包中的类型不能为默认包职位的其他类型所用
一个类对应一个字节码文件 类必须与类文件名相同
在文件中只能有一个public类 可以有多个类
常量最好要使用大写命名 用final标记
jdk7 以前 switch的表达式只能是int类型 (可以是char等自动转化的) jdk7 表达式结果可以是字符串类型的
return 两个作用:1.结束方法的运行 2.返回结果
java中说有的自己写的类必须放在定义的包中 不要放在默认包中 java的包一般都是域名倒写命名 package 然后加包名 必须先放在类的第一行
java中常用的包是:1.java.lang 包含了一些java的核心类,如String、Math、Integer、System和Thread。
2.java.awt 包含构成抽象窗口工具集(abstract window tllokits)的多个类,用来手贱和管理应用程序图形用户界面(GUI)
3.java.net 包含执行与网络相关的操作的类。
4.java.io 包含能提供多种输入/输出功能的类。
5.java.util 包含一些使用工具类,如定义系统特性、使用与日期相关的函数。
java中生成自己的API文档的时候利用JAVADOC生成
注释利用 /**
@Author作者
@version 版本
@param 参数
@return 返回值的含义
@throws 抛出异常描述
@deprecated 废弃。建议用户不再使用该方法
Scanner 类 接受键盘的输入
面向对象编程的本质以类的方式组织代码,以对象的方式组织(封装)数据
在java中程序员没有权利去调用垃圾回收器 可以调用System.gc()给一个建议 finalize是Java 给程序员的一个释放内存等 但是尽量少用
java中构造方法(构造器)通过new调用,定义的时候不能定义返回类型 虽然有返回值 不能再构造器里调用return
构造器的方法名必须与类名相同
函数的重载 只有返回值不同不构成重载 只有形参名不同也不构成重载
只有在类型、个数 、顺序不同 才构成重载
在使用this();语句的时候必须位于第一句 即 位于this点语法语句的第一句
子类可以继承父类的方法和属性 但是不能继承构造器
java中的类只有单继承 没有多继承
java中的多继承可以通过借口来实现 子类extends父类 继承
java的根类是 java.lang.object 所有的类都可以看做是object的子类或者间接子类
函数的重载和重写是不同的概念 重写是将函数重写 覆盖掉前面同名的函数
查看类的类型层次 点类名 然后ctrl+t;
final可以修饰变量也可以修饰方法 final修饰的方法不能重写 修饰的类不能被其他类继承
final修饰的都将变成最终值 不能在改变
在编写类时 封装的时候 变量一般用私有 常量用公有 然后编写变量的get 和set方法调用
多态存在的3条件 :要有继承,要有方法的重写,父类引用指向子类对象
抽象类的定义 抽象方法 只有定义没有实现 只有抽象类才能定义抽象方法 抽象方法必须在子类中实现
抽象类可以继承另一个抽象类 抽象类不能实例化 抽象类只能被继承 抽象类的意义在于将方法的定义和方法的实现分离了
java中是三种的数组声明方式: int x[]; int []x=new int[3]; int []x=new int []{3,4,5}; int[]x={10;20;30}
x.length 求数组的长度
内部类 在一个类里边定义另一个类 可以让外部类直接访问 不允许其他类直接访问
匿名类的定义格式-------适合只需要使用一次的类
new 父类构造器(实参类表)实现接口
当定义时类的前面有public的时候类名必须和文件名相同 ,没有的时候可以不同
java中一但产生异常,异常之后的语句不会执行,而是直接结束程序,并将错误报告给用户
try{}catch(){}finally{} 处理异常 try 捕获异常 catch 处理异常 不管有没有异常都从finally出来
在异常中可以通过system.out.println() 打印异常 也可以通过 printStackTrace();来打印异常
异常(exception)类的继承结构
在异常处理中,捕获更粗的异常要放在捕获更细的异常之后
当所有的异常处理的方式是一样的时候,就可以直接使用exception进行捕获(在一个比较细致的开发中不建议这样使用)
throws关键字
在定义一个方法的时候可以使用throws关键字声明,使用throws声明的方法表示此方法不处理异常,而交给方法的调用处进行处理
public 返回值类型 方法名称(参数列表...)throws 异常类{}
在调用此类方法时都必须进行异常处理
throw关键字实在程序中的作用是抛出一个异常,抛出的时候抛出的是一个异常类的实例化对象
exception 和runtimeexception的区别
如果抛出的是exception的类型在程序中是必须使用try....catch进行处理的
如果抛出的是runtimeexception类型可以不使用try....catch进行处理,但是如果有异常产生,则异常将由JVM处理
【建议还是使用try....catch处理】
自定义异常类
只需要继承于exception类 extends 用于继承
断言(assert)
断言就是肯定某个结果返回值是正确的,如果最终此结果的返回值是错误的,则通过锻压检查肯定会为用户提示错误信息
assert boolean 表达式;
assert boolean 表达式 :详细信息
断言本身不会影响程序的执行,但是如果想让断言起作用,则必须对断言进行验证
进程与线程
线程实际就是在进程基础之上的进一步划分,同时存在多个线程
如果一个进程没有了,线程肯定会消失,如果线程消失了,进程未必会消失,所有的线程都是在进程的基础 并发进行的
java中 多线程的实现
继承thread类
实现runnable接口
thread类不用import导入
启用一个线程必须调用thread中的start()的方法 最终调用的还是run方法 这样就实现了并发执行
native关键字表示一个由java调用本机操作系统函数的关键字,
static 定义静态方法或者静态域
一个静态方法的内部不能调用实例方法或者实例域,但是可以从一个静态方法访问其他的静态方法或静态域
可以声明一个静态的引用变量,这个变量将包含一个地址 ,但是被引用的变量保存在堆中
可以使用import static 导入静态域
单独定义一个static{}块中的代码也会执行
当多个构造器并且每个构造器都
调用相同的代码时,把代码包装在一个方法中,让构造器去调用方法
引用变量并不包含对象 而是包含对象在内存中的地址
在java中可变参数必须放在固定参数后面
public static void main(string [] args) 相当于 public static void main(string...args)
在java中可以将子类的实力赋给父类型的引用变量 Animal animal = new bird();
在java中利用关键字instanceof来判断一个对象是否为某种指定类型
例如:String s = "hello";
if(s instanceof java.lang.String) //判断s对象是否为string类型 返回true
不成立: String s=null;
if(s intanceof java.lang.String) // 返回 false
Child child = new Child();
if(child instanceof Parent) // 子类是父类的一种类型 返回 true
在java中处理异常的时候如果有多个异常那么就用 “| ”隔开
在java中处理异常的时候如果使用多个catch捕捉异常的时候 ,处理exception异常的catch块必须放在最后 ,因为exception捕捉所有异常 所以放在前面之后的所有异常将永远不再执行
在方法中处理异常的两种方式: 1)、 在方法 内部处理异常 2)、将异常抛回给调用者 让调用者自己处理异常
wrapper class 包装类
直接利用Integer a = 1000; 直接利用包装类声明变量就是自动装箱
拆箱:int c = new Integer (1200);
在java中接口的定义可以使用interface来定义 ,但在接口的实现类定义的时候要加上 implements 来定义
接口支持继承 一个接口可以继承另一个个接口
接口中的域必须初始化 并且按大写来书写 可以任意的使用 public static final 修饰
接口中的声明的方法隐含为public abstract 但是方法不能声明为static 静态的方法不可能是抽象的
在可以使用枚举类型的时候尽量使用枚举类型而少使用 static final 避免给变量赋予无效的值
java.lang.Enum 类的一些特别的属性:
没有公开的构造器,因此不能把它实例化;
隐式为static
每个枚举常量只有一个实例
可以调用美剧中的方法值,一边迭代他的枚举值,
集合就是一个集中存放其他对象的一个对象。
java程序员应该熟悉集合框架爱中的最重要的类型,他们都是java.util成员
java 属性的封装 (最基本的封装)
变量定义为private 私有的 方法定义为public 公有的
*************************************************************************
第四章:
异常处理
try ,catch, finally , throws, throw
java异常是java提供的用于处理程序中错误的一种机制
所谓的异常是指程序在运行过程中发生的一些异常事件
e.printStackTrace(); //打印错误信息
try{.....}catch(exception e){....}
getMessage(); //有关异常的信息
finally:
可以进行资源的清除工作
1.关闭打开的文件
2.删除文件
只要抛出异常就要处理,不要在main中抛异常
可以定义throw new Exception(); //创建对象并抛出异常
在异常处理中首先小的,然后大的
自定义异常:
通过继承java.lang.Excaption类声明自己的异常
在方法适当的位置,生成自定义异常的实例,并用throw语句抛出
在方法的声明部分用throws语句声明该方法可能抛出异常
重写方法需要抛出与原方法所抛出异常类型一致异常或不抛出异常
Error:称为错误,由java虚拟机生成并抛出,包括动态链接失败,虚拟机错误等,程序对其不做处理
Exception:所有异常类的父类,其子类对应了各种可能发生的时间,一般需要用户显示的声明或捕捉
RuntimeException:一类特殊的异常,例如被0除,数组下表超范围,用户可不必对其处理
第六章:
常用类:
String、StringBuffer
第七章 一个图,一个类(collections),三个知识点(for,generic,auto-boxing/unboxing),六个接口
容器:
java中提供的所有的容器API都位于java.util包中
Collection接口定义了存取一组对象的方法,其子接口Set和List分别定义了存储方式
set 中的数据对象没有顺序 不可以重复
list 中的数据对象有顺序可以重复
成对存储
map 定义了存储“键(key)---值(value)映射对”的方法
使用的都是类对象 ,不能使用基本数据类型
容器类对象在调用remove、contains等方法时需要比较对象是否相等,这回涉及到对象类型的equals方法和hashCode方法
对于自定义的类型,需要重写equals和hashCode方法实现定义的对象相等规则
********重写equals方法必须重写hashcode方法**********
增强的for循环,
缺陷:
不能方便的访问下标值
与使用lterator相比,不能方便的删除集合中的内容
在内部也是调用lterator
Iterator接口:
所有实现了collection接口的容器类都有一个iterator方法泳衣返回一个实现了iterator接口的对象
iterator对象称作迭代器,用以方便的实现对容器内元素的遍历操作
boolean hasNext(); //判断游标右边是否有元素
Object next(); //返回游标右边的元素并将游标移动到下一个位置
void remove(); //删除游标左面的元素,在执行完next之后,该操作只能执行一次
iterator的remove方法是在迭代过程中删除元素的唯一的方法
如何选择数据结构:
衡量的标准:读的效率和改的效率
Array读快改慢
Linked改快读慢
Hash两者之间
map接口:
实现map接口的类用来存储键--值 对
map接口的实现有hashmap和treemap等
map类中存储的键--值对通过键来标示,所以键值不能重复
自动打包(auto-boxing/unboxing):
在合适的实际自动打包、解包
自动将基础类型转换为对象
自动将对象转换为基础类型
泛型:
********************在方法调用中一个对象连接调用多个方法的时候是因为上一个方法返回的是一个对象所以可以接着调用方法*******************
第八章
IO 流(streaml)
按数据流的方向不同分为输入流和输出流
按处理数据单位的不同可以分为字节(8bit)流和字符(2字节)流
按照功能不同可以分为字节流和处理流
输入流:
字节流:InputStream
字符流:Reader
输出流:
字节流:OutputStream
字符流:writer
log4j 日志开发包
序列化:将一个对象转换为字节流存入到硬盘等设备上
Serializable 标记性接口,不用重写方法
transient 透明的 修饰变量 不能读出
externalizable 接口 控制对象如何实现的
第九章
线程
线程是一个程序内的顺序控制流 ****是一个程序中不同的执行路径***
线程和进程的区别:
每个进程都有独立的代码和数据空间(进程上下文),进程间的切换会有较大的开销
线程可以看成轻量级的进程,同一类线程共享代码和数据空间,每个线程有独立的运行栈和程序计时器,线程切换的开销小
多进程:
在操作系统中能同时运行多个任务
多线程:
再通以应用程序中有多个顺序流同时执行
线程的创建和启动:
第一种:
定义线程类实现runnable接口 线程的调用必须调用start方法,
Thread myThread = new Thread(target); ///target为Runnable接口类型
Runnable中只有一个方法
public void run(); //用以定义线程运行体
使用Runnable接口可以为多个线程提供共享的数据
在实现runnable接口的类的run方法定义中可以使用Thread的静态方法:
public static Thread current Thread() //获取当前线程的引用
第二种:
定义一个Thread的子类并重写其run方法
然后生成该类的对象;
能使用接口的时候就不要继承
sleep方法:
可以调用Thread的静态方法
public static void sleep(long millis)throw InterruptedException
使得当前线程休眠(暂时停止执行millis毫秒)
由于是静态方法,sleep可以由类名直接调用:
Thread。sleep();
在那个线程里调用就让那个线程睡眠
join方法:
合并某个线程
yield方法:
让出CPU,给其他线程执行的机会
线程同步:
wait方法和sleep方法的区别:
wait方法是Object类的方法,
wait时别的线程可以访问锁定对象,调用wait方法的时候必须锁定该对象
sleep时别的线程不可以访问锁定对象
第十章
网络编程
网络通信接口:
硬件装置:实现结点之间的信息传送
软件装置:规定双方进行通信的约定协议
网络通信分层:用户应用程序作为最高层,物理通信线路最为最底层
TCP:专门设计用于在不可靠的因特网上提供可靠地、端到端的字节流通信协议。它是一种面向连接的协议。TCP链接是字节流而非报文流
返回数据包确认
UDP:向应用程序提供一个发送封装的原始IP数据报的方法、并且发送时无需建立连接。是一种不可开哦的链接
不会返回数据包确认
Socket:
通常用来实现client-server连接
TCP端口,UDP端口分开的,每个都有65536个
第十一章
GUI编程 guyi
AWT 抽象窗口开发包
能使用继承Frame不使用直接创建对象(可以设置自己的成员变量)
接口中的类都是public
内部类
一个类声明在另一个类中
可以方便访问包装类的成员
可以更清楚的组织逻辑,防止不应该被其他类访问的类进行访问
何时使用:
该类不允许或不需要其他类惊醒访问时
/*****************************************************************************************/
AWT Swing SWT 三种组件库实现图形用户界面设计
通过AWT组件称为重量级组件
容器分为顶层容器、非顶层容器。
顶层容器分为窗口类(框架类)、 对话框类。
非顶层容器必须位于某个顶层容器之内,不能独立存在。面板类属于非顶层容器。
=========================================================================
进程是操作系统中分配CPU、内存、外村资源的基本单位
通过getPriority()方法获得线程的优先级
通过setPriority()方法设置线程的优先级,线程的优先级共有10级,默认的优先级为5
调用sleep()方法进入休眠状态的线程并没有解除对占用资源的锁
中断一个休眠中的线程采用后述的interrupt()方法
yield()方法会暂停现在处理中的线程,给其他线程运行的机会
yield()方法不能指定需要休眠的线程,只能让调用yield()方法的线程本身休眠,并且不能指定休眠的时间
interrupt()方法时中断线程休眠的方法。可中断的线程为运行join()、sleep()、wait()方法的线程
interrupted()方法用来检测当前线程是否已被中断并清除线程的中断状态
suspend()方法立即挂起线程的方法,被挂起的线程因resume()方法的运行而解除挂起状态。suspend()方法不能解除线程所取得的资源锁,容易发生死锁
守护线程是在后台以较低优先级运行,为同一个程序中的其他线程或对象提供服务的线程。
public final void setDaemon(boolean on) 方法为守护线程,一个线程为守护线程,则他所创建的子线程为Daemon状态,线程启动后不能改变Daemon状态
public final boolean isDaemon()方法,检查是否为Daemon状态
public static Thread currentThread()方法,取得当前线程
public final boolean isAlive()方法。判断一个线程是否为活动状态
public static int activeCount()方法。返回程序中的线程数
public static int enumerate(Thread [] tarray)方法。获取程序中的所有线程对象
每一个线程都属于一个线程组,将做同一项操作或是同性质的线程放在一个组里,
public final ThreadGroup getThreadGroup() 返回该线程所属的线程组对象