Java6基础教程:(第一本Java书)
Static关键字修饰的成员变量:
1.属于整个类所有;
2.非静态成员方法可以访问静态成员变量;
3.两种初始化:定义时候初始化或者通过静态初始器/static{ }
4.可以通过类名和对象来访问;而非静态数据成员则只能通过对象来访问;
5.非静态方法中不能存在静态方法;
Static修饰的成员方法:
1.只能访问由static修饰的成员变量;
2.方法为整个类所有;
3.对应的方法在子类中不能被重写;
注意:在外部调用静态方法时,可以使用"类名.方法名"的方式,也可以使用"对象名.方法名"的方式。
而实例方法只有后面这种方式。也就是说,调用静态方法可以无需创建对象。
静态方法在访问本类的成员时,只允许访问静态成员(即静态成员变量和静态方法),而不允许访问实例成员变量和实例方法;实例方法则无此限制。
Final修饰的成员变量:
1.两种初始化:定义 和构造函数;
Final修饰的成员函数:
1.表示最终方法,不能再在子类中被重新定义,且只能使用从父类继承来的方法;
继承:
Java中的继承关系通过关键字extends实现;子类能够继承来自父类的除私有成员和方法的一切;
子类中与父类同名的成员变量会实现隐藏,但是仍旧占据空间;而同名的成员方法则将子类中的父类方法消除;
一般我们继承基本类和抽象类用extends关键字,实现接口类的继承用implements关键字。
this 是本类对象的一个引用;
super是父类对象的一个引用;当需要在子类中调用父类的被重写方法时,要使用super关键字。
两者均不能用在static修饰的方法中;
抽象类和抽象方法:
1,由于抽象类不能实例化对象,所以抽象类必须被继承,才能被使用。也是因为这个原因,通常在设计阶段决定要不要设计抽象类。
父类包含了子类集合的常见的方法,但是由于父类本身是抽象的,所以不能使用这些方法。
2,如果你想设计这样一个类,该类包含一个特别的成员方法,该方法的具体实现由它的子类确定,那么你可以在父类中声明该方法为抽象方法。声明抽象方法会造成以下两个结果:
1,如果一个类包含抽象方法,那么该类必须是抽象类。 2,任何子类必须重写父类的抽象方法,或者声明自身为抽象类。
继承抽象方法的子类必须重载该方法。否则,该子类也必须声明为抽象类。最终,必须有子类实现该抽象方法,否则,从最初的父类到最终的子类都不能用来实例化对象。
接口,包:
interface 完成对事物的抽象
封装:public 使得所有的方法和成员变量有了被别的类使用的可能性,具体还得看对应方法或者变量的修饰;
(同一个.java文件中只能有一个public class)
protected 保证类可以通过继承的方式来访问其他包的方法和成员;
private 保证本类中的数据和方法只能被本类所使用;其他类(同包不同均可)可以通过该类的成员方法来修改的其中的私有数据;
public 在任何的地方都能访问;
private 只能在本类中访问;
protected 不能在别的包中被访问。
总结:同一个包中数据之间只有private限制;不同包之间只有public没有限制;
多态:java中有两种多态机制(重载overload和覆盖override)
第六章:数组与常用的类:
在Java中将数组看做是对象;
定义数组:eg:int[] a=new int[10]; int[][] b=new int[3][4];int[][] b=new int[3][];
int[][] b=new int[][]{{2,2,3},{3,3,3}}(申明数组的同时赋值,是不能指定数组的长度的)
二位数组:b.length=行;列=b[i].length;
与数组相关的方法:
1.System.arrrycopy()将数组a复制给数组b
2.如果是利用数组对象的equals()方法,a.equals(b)判断的是两个数组引用是否相等;
如果用a==b,则两个数组有相同的储存空间,改变一个,相应的另一个也会变;
如果是Array.equals(a,b)只要有相同且相互对应的元素,就相等;(比较元素相等)
3.数组类:java.uitl.Arrays,即专门用来处理数组的类;
asList()//将数组转变为List;binarysearch()二分查找;fill()填充;sort()升序排列;
System类来获取标准的输入和输出:
break与continue的比较:
两者均用于跳出循环;break用于结束整个循环;continue则表示结束本次循环;
处理字符串的类:String and StringBuffer
String abc= "wangwei";得到一个字符串常量;
StringBuffer abc=new StringBuffer("wangwei")用于表示字符串变量的,即可以动态修改的;
Java中日期处理的类:
1.Date 表示与格林威治时间相距的毫秒数;主要用于创建日期对象;
2.DateFormat 对上面或的时间进行各种的格式化;这是一个抽象类,不能实列化,可以通过静态方法返回该类的对象;
3.Calendar 可以灵活的设置和读取日期中的具体时间,年,月。。
BigDecimal实现精确计算
第七章:异常
第八章:Java中输入/输出和文件操作
1.字节流
字节输入流
字节输出流
// 使用 System.in 创建 BufferedReader
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
2.字符流Reader()和Writer()
字符输出流
字符输入流
3.文件流
File(String str) //创建一个文件,或者目录
FileOutputStream(文件名) //用于向对应文件中写入数据 DataOutputStream() BufferedStream()
FileInputStream(文件名) //从对应的文件中读取文件数据 DataInputStream()
第九章:多线程
创建:继承Thread类; 实现Runnable接口(2步)
区别:前者有run()和start()方法;而后者只有run()方法;
常用的方法:1,启动线程start()2,定义线程的操作的run()方法
3,sleep(time)使当前线程暂时休眠,优先级高的线程可以在它的run()方法中调用sleep()使自己放弃cpu,
休眠一段时间(转到阻塞状态);
4,判断线程是否消亡isAlive()
注意:Thread的run()方法是专门 用来被自身线程调用的,不是也在主线程中直接调用其他线程的run()方法;
Java中线程的调度模式:抢占式调度
1.调整优先级 2.线程睡眠 3.线程让步 4.等待其他线程结束
比较:sleep()和yield()都会使当前线程放弃CPU,前者使其进入阻塞状态,后者则会使其进入可运行状态;睡眠的结果是其他任何优先级的 线程都可能获得CPU,而让步只能使同等或者更高级的线程获得CPU;
获取主线程:Thread main1=Thread.currentThread();
线程间的同步:加锁机制
第11章网络编程和数据库编程
3种通信方式:
1,URL通信
2,socket通信
3,UDP通信(不可靠通信,适合于实时准确度要求不高的)
JDBC结构:1,Java程序 2,JDBC管理器
3,驱动程序(4种)作用是处理JDBC方法,为特定的数据库发送SQL请求,并未Java程序获取所需的结果
4,数据库
4中驱动程序:
1,Jdbc-Odbc bridge
2,Jdbc_native API bridge
3,Jdbc_middleware (推荐)
4,pure JDBC diver (推荐)
第12章:Java高级
数据结构:
1.枚举 Enumeration接口 现在基本被 Iterator替代;
2.Java Bitset类
3.Java Vector类(向量)Vector类实现了一个动态数组。和ArrayList和相似,但是两者是不同的:
- Vector是同步访问的。
- Vector包含了许多传统的方法,这些方法不属于集合框架。
4.Java Stack 类(栈)栈是Vector的一个子类,它实现了一个标准的后进先出的栈。
五个函数:1,empty();2,push();3,pop();4,peek()5,search()
5.Java Dictionary 类 Dictionary 类是一个抽象类,用来存储键/值对,作用和Map类相似。已经被Map取代了。
6.Java Hashtable 接口 Hashtable是原始的java.util的一部分, 是一个Dictionary具体的实现 。
共同学习,写下你的评论
评论加载中...
作者其他优质文章