Java学习---基础知识学习

时间:2023-03-09 18:06:59
Java学习---基础知识学习

2016-07-23  周六

利用键盘输入的时候需要抛出异常 ,直接快捷键 ctrl + 1 ;
定义数组 int score[] = new int[4]  ; 
只有4个数字
BufferedReader br = new BufferedReader(new
InputStreamReader(System.in)) ;
String str = br.readLine()
;//直接输入,直接输出
score[i] = Integer.parseInt( str) ;  //转换Str 为 Int
int temp
= Integer.parseInt(str);   //字符串变为int型
String str = new String(b); 
byte变字符串
Scanner scan = new Scanner(System.in) ;
冒泡排序: i=1;j=0 ;
   
for (int i = 1 ; i < 3 ;i++ ){
        for(int j = 0 ; j< 3 ;
j++){
            if(score[i] < score[j]){
                int temp =
score[i] ;
                score[i] = score[j] ;
                score[j]
= temp ;
            }
           
方法的定义:  public static 返回值 方法名(类型 参数
, 类型 参数,){
                程序体 ;
                (return) //可省略
       
}
类名定义: ArrayDemo (单词首字母大写)
方法定义: printInfo (第一个单词小写,后面的单词首字母大写 )

定义的时候 char c[] = {'','','',''} ;  字符串都是单引号,字符都是双引号
float型的参数都是 3.2f,
使用
break 可以结束一层循环
使用 return 可以结束一个方法
方法的递归 ; return x + sum(temp)
;
栈中存放的是堆空间的地址; 中放的是名字,堆内存是实际数字

2016-07-24  周日

Java 的直接数组排序 java.util.ARRAY.sort() ;
Java 的直接复制数组
System.arraycopy(源数组,源数组开始位置,目标数组,目标数组开始位置,数组长度 ) ;
   
(说是复制,其实就是目标位置的数组的替换,将源数组的数字复制到目标数组的位置,目标数组的长度不变)
Java 新特性:foreach(数据类型 变量名:
数组名称) ; foreach (int x ; temp) ;
Java 新特性:可变参数:返回类型 方法名(类型... 参数) public void
fun (int... arg)
    例: fun(new int[]{1,1,1,1,1});  //
传递参数可以直接传递
Java的多态性:方法的重载 ; 方法名同但是参数类型和参数的个数不同 ;   System.out.println
也属于重载
              对象的多肽 :
子类对象可以和父类对象进行相互转换,而且根据子类的不同,完成的功能也不同
Java的封装性:对象的属性和行为看成整体,即对象;
             
信息的隐蔽
              private 声明的属性或者方法只能被类的内部进行访问,而不能在外部被访问;

this的使用:
    this.表示当前对象,this必须发放到构造方法的首行
   
this调用构造方法时一定要保留一个构造方法作为出口,也就是有一个构造方法不调用this();
    this.方法名()
强调是本类中的方法;            
    this.属性  强调是本类中的属性;       

Java的继承性:拥有一般特性的事物,在基础上 派生其他;
类 : 成员变量声明 + 方法定义:
构造方法:
在实例化的时候就可以进行赋值,而不是调用setter 和 getter 方法  //也即是说,只是一个赋值的过程,没有返回值
          
方法名与主类同; 不能有返回值类型声明; 不能有return语句;默认 default
类型
匿名对象:没有明确给出名称的对象;一般只使用一次,而且直接开启堆空间,不存在栈空间的索引; 
            new
Person("zhangsan",12).tell() ;
String
本身就是一个类,但是我们一般用的String没有开辟栈空间,比较的只是堆空间的值;
       
一个字符串本身就是一个String的匿名对象;
        “==” 比较的是开辟的空间,而不是内容;
        equal()
比较内容是否一致;
        String 里面indexOf本身就可以比较内容 是否相等, 他是找到内容,然后返回字符所在位置,
!(indexOf("hello"))!= -1 表示找到
       
一个String对象内容的改变实际上是通过内存地址的更新完成的,本身的字符串内容不会变;
        char[] toCharArray()
;//转换为字符数组  charAt() //特定的位置取值  String split()//按照指定的字符串分割
        String
subString()指定字段取值  equals(), equalsIgnoreCase()
        split  和
raplaxeAll() 支持正则表达式;,返回时一个 String s[] =
        indexOf :
从指定位置开始查找字符串位置,没有找到就返回 -1 ;
        charAt : 取出指定位置的字符   trim()
:去掉左右的空额
        length 和 length() 在数组中,length是长度,String操作中是函数,需要length()
;
引用传递: 就是将一个堆内存空间的使用权交给多个栈内存空间       
        接受本类的对象: public void
fun(Demo d2)

2016-07-28 周四

Java的内存区域:
    栈内存:保存所有对象的名称(堆地址的内存空间)
   
堆内存:保存每个对象的属性内容
    全局变量: static类型属性
   
全局代码段:保存所有的方法定义
Static关键字:堆内存保存对象,可以用static共享属性
   
static声明属性的又称为类属性,因为类的公共属性应该由类来修改,毕竟用户不知道到底会有多少对象产生;
        static String
count = "ad";   Person.count = "bc";
   
static声明的方法又称为类方法,可以用类名调用;
        public static setName(String name) ;     
Person.setName("lvfengtao") ;
    static应用,可以查看定义了多少给
实例化对象;
System.exit(1) ; //可以直接退出程序,设置非0数字
代码块:
   
普通代码块:{}括起来的,直接在方法或者语句中设置的
    构造代码块:直接写在类中的代码块   //只有一行代码
   
静态代码块:用static声明的代码块
       
静态代码块优于主方法执行,类中的静态代码块优先于构造块执行,且只执行一次,不管产生几个对象
构造方法私有化: private 方法名()
   
构造方法一旦私有化,就不能new调用,就必须从内部调用
        一种是static 属性,另一种是static
方法,返回实例,通过类.方法名调用;
单例设计模式:
无论程序怎么运行,始终只有一个实例化对象存在,只要将构造方法私有,就可以对控制实例化对象的产生;
数组一定要先开辟空间,因为是引用类型
主方法的String
args[]    本身就是一个类,主方法中的参数本身就是以对象数组的形式出现的;
内部类: 在类的内部在定义一个类
   
缺点:类由属性和方法构成,所以会破坏类结构
    唯一的好处就是可以访问外部类的私有属性;
   
用static声明的内部类变成了外部类,但是不能访问非static声明的外部类属性
在外部访问内部类
    外部类.内部类 内部类对象 =
外部类实例.new 内部类() ;
    private
定义是在一个类里面都可以访问,所以内部类可以直接访问外部类的属性;
使用statIC声明的内部类就会成外部类,使用static声明的内部类不能访问非static声明的外部类
在方法中定义一个内部类
   
在方法中定义的内部类不能直接访问方法中的参数,如果发放中的参数想要被内部类访问,就必须在参数前加final关键字

2016-07-30  周六

使用构造方法的时候,一定是this.setName(name);   继承的时候是,super(age,name);   Getter方法中:return
school;
关于输出,最好是在类中返回String方法,然后在主类中 System.out.println(实例化对象.方法名) ;

6.1 继承类(派生类)
    Java只允许单继承,一个子类只允许有一个父类,允许多层继承,一个父类还有一个父类;
   
子类是不能调用父类的私有成员,子类可以调用父类的非私有 方法,但是不能直接调用父类的私有成员,但是可以通过setter和getter;
   
子类实例化对象之前,先调用父类的构造方法,后调用子类的构造方法,实际上子类的构造方法中隐藏了super()方法【超类】
   
子类不能拥有比父类更高级的访问权限
6.2 this 和 super 区别:
    1.this
只能调用本类的属性、方法,本类中没有则父类查找    super 访问父类的方法,方法
    2.this 调用本类构造, supe
调用父类构造,且放在子类首行
    3.this 表示当前对象
6.4 final :完结器   
,final声明的类不能有子类,声明的方法不能被覆写,声明的变量为常量,不可以修改
    final声明的变量必须全部大写; public static
,final String NAME = "Lvfengtao";
6.5 Abstract 抽象类:
抽象类是一种模板,必须被继承才能用,一个子类只能继承一个抽象类
    包含一个抽象方法的类是抽象类; 抽象类和抽象方法必须由abstract声明;
抽象方法只需声明,不需要具体;
    抽象类必须被继承,子类必须前部复写抽象类中的全部抽象方法  public abstract void
print();
    抽象方法不要使用private声明,因为必须被覆写,子类不易复写;
   
抽象类可以定义构造函数,所以子类实例化之前必须对父类进行实例化,也就是说先必须给打印父类的构造方法然后子类的构造方法
   
子类可以通过super()方法调用抽象类(父类)的构造方法,也可以在子类调用父类指定参数的构造方法
   
    子类 extends 抽象类
implements 接口A, 接口B
6.6 接口: 特殊的类,由全局常量和公共的抽象方法组成  // 接口本身已经定义,所以不需要在写 public
static fianl 和 abstract ;
           由于明确规定了抽象方法是public
类,所以也不需要在写;
           接口与抽象方法一样需要子类的继承
implements,一个子类可以实现多个接口,摆脱继承的单继承
           全局常量,在接口里定义的时候用大写
          
Java允许一个抽象类实现多个接口,但是一个接口不允许继承抽象类, 允许一个接口继承多个接口
           接口的继承: interface A 
extends B, C
    interface A {
        public static final String INFO =,
"Lvfengtao"             ====   String INFO = "Lvfengtao"
        public
abstract void print()   ==========  (public)void print()      
       
//全局常量;
        抽象方法;  //必须是public方法,写与不写,Java的接口方法都是pblci
    }
6.7
对象的多态性
    表现: 1、方法的重载和覆写 
          
2、对象的多态性
                        (向上转型:子类--> 父类 ; 父类 父类对象 =
子类实类
                          向下转型:父类 --> 子类,且必须说明向下转型的子类类型) 子类 子类对象 =
(子类)父类实例
        ** 对象是Object类型,需要转型  String str =
(String)obj[i];

2016-08-02 星期二

6.12 包装类; Java数据分为基本数据类型和引用数据类型,

用的最多的还是讲字符串变为数据类型(int i=
Interger.parseInt("1234"));
              (字符串变为数组的时候需要抛出异常)
    拆箱 和装箱: 
Interger i = new Interger(x);   int x = i.intValue();
                  
Integer i = 0 ;//自动封装         int x = i;  //自动拆箱
               
7.1
异常的基本概念
   
Java的异常都是以类和对象的形式存在,Java的错误主要是语法和语义的错误,编译的时候没有报错,但是运行的时候也可能报错
    Try()
找到错误后会跳转到 catch里面,一旦产生异常,则首先回产生一个异常类 的实例化对象,
    Exception 和 Error 都是Java
Throwable的异常类  
   
通常用e.printStaceTrace()方法打印异常信息,所有的额子类的实例都可以用父类来接受,所以可以调转
7.2 throws 和 
throw关键字
    throws声明的方法,表示此方法不处理异常,而是调用方法去处理;

2016-08-03 星期三

9.1 多线程: 继承 Thread类【要覆写run()】或者实现Runnable类  // 都需要覆写run()方法
       
由于受到单继承的影响,所以一般多线
中程是通过
       
同时可以调用父类start()方法,实现多线程,说是调用start()方法,但是调用的却是run()方法的主题
       
一般重复调用start()方法回抛出异常,而且本质上调用
start0()这个方法,因为使用了native声明,所以需要依靠底层的操作系统支持
       
实现Runnable()方法,需要实现多线程,可以利用Thread类中设定的方法启动多线程
       
Thread类也是Runnable接口的子类,但是Thread并没有完全的实现Runnable接口的run()  Thread 构造方法 Thread
thread = new Thread(接受 Runnable的子类,设置线程名称 )
       
继承Thread类并不能实现资源共享,如果想要资源共享必须实现Runnable接口
       
        避免单继承带来的局限性;
代码能与多个线程共享,代码与数据是分开的;
9.2 线程的状态: 创建 、就绪、 运行、 阻塞、 终止
    getName: 取得线程名称;  
setName: 设置线程名称
    main()本身也就是一个线程,每次Java运行都至少启动2个线程,一个main,一个垃圾回收
   
main()方法可能比其他方法更早执行;
    public static Thread currentThread():
返回当前执行的类
    public final String getName(): 返回线程名称
    public final int
getPriority(): 返回优先级   1  5  10
    public boolean isInterrupted():
线程是否中断;
9.3 Thread类中有一个方法: 利用 构造函数可以直接命名线程   子类实例化以后就可以直接start
   
Runnable,需要 子类实例化对象,然后调用Thread调用start方法
9.6
解决资源同步问题:1、使用同步代码(Synchronized(同步对象 this) 
                      2、同步方法   

            多线程 共享同一资源的时候需要同步,但是过多会产生死锁;         
    方法的完整定义:
   
public/default/private/protected   final static syncronized 返回类型  方法名(参数类型 
参数名称) throws EXCEPTION{    return [返回值/返回调用处]}
    死锁:
同步可以保证资源共享的正确性,所谓死锁就是2个线程都在 等待彼此完成任务,造成程序停滞

2016-08-06 星期六

new String(bInput);   //byte数组变为字符串    byte[] b =
str.getBytes();
    int i = Integer.parseInt(str);    //字符串变整数    {\\d4}必须
数字出现4次
    (^\\d+.?) 正则表达式匹配小数   ,? 表示小时代可以出现一次或0次
    [a-zA-Z0-9]字母数字    
\w 字母、数字、下划线     ^\\d{4}-\\d{2}-\\d{2}$:年与日
    [abc]: 字符abc   [^abc]:
除了abc之外的任意字符  \d :数字 \D: 非数字  \w:字母、数字、下划线 \s:所有空白字符
    X?:出现0次到1次 
X*:出现0次,1次,多次  X+:出现1次或多次
    X|Y: 先X或Y  XY:先X后Y   
   
   
正则表达式需要Patter和Matcher两种类完成, Patter类主要进行正则规范Matcher主要执行验证
   
Patter.complie("[0-9]+").matcher(str).matches();
    Patter p =
Patter.compile("[0-9]+");
    Matcher m = p.matcher(str);
   
m.matches();
   
12.16 序列化
    实现Serializable接口,还需要依靠对象输出对象和对象输入流

        对象输出流(ObjectOutputStream): 实现序列化
           
构造方法(传入输出对象):ObjectOutputStream(OutputStream out)
            普通方法(输出对象):
writeObject(Object obj)
                File file =  new File("E:" +
File.separator + "test.txt");
                ObjectOutputStream oos =
null;
                OutputStream os = new
FileOutputStream(file);
                oos = new
ObjectOutputStream(os);
                oos.writeObject(new
People("People",21));
                oos.close();
   
   
实现Externalable接口,还需要依靠对象输出对象和对象输入流    
       
        public void
readExternal(ObjectInput input)   //  读取需要的 内容
        {
           
this.name = (String)input.readObject();  //需要转换
        }
        public
void writeExternal(ObjectOutput output) //  写入需要的 内容
        {
           
output.writeObject(this.name);       
        }
    transient: 声明
的关键字不可以被序列化

13.1 认识类集
            :动态完成对象数组操作,是动态的对象数组,是对一些实现好   
的数据结构的包装,不受对象数组长度限制;
        特点:对基本类集(动态数组、连接表、树)实现是高效的
            
框架允许不同类型的类集以相同的方式和高度
        Collection:
接口,存放一组单值(集合中的每个元素都是一个对象)的最大接口,
        List: Collection
子类接口,堆Collection扩充,允许内容重复
        Set:  Collection
子类接口,没有对Collection扩充,允许内容不重复
             
依靠hashCode()和equals()两个方法区别
        Map; 存放一对值得最大接口,Key -- >
Value
       
        Iterator:集合的输出接口,用于输出集合中的内容,胆小
       
ListIterator: 可以双向输出
       
        Enumeration: 输出指定集合的内容
       
SortedSet: 单值的排序接口,可以使用比较器排序
        SortedMap:存放一对值得排序接口,按照key值比较
       

        Queue: 队列接口,可以实现队列操作
        Map.Entry:
Map.Entry的内部接口,每个Map.Entry对象都保存这一对 key -->
Value的内容,每个Map接口都保存很多Map.Entry接口实例
        List<String> list = new
ArrayList<String>() ;
        System.out.print(list);

2016-08-07 星期日

13.1 String str[] = list.toArray(new String[]{});
//后面的{}实为初始化
        indexOf()  找不到返回-1  找到显示位置
       
       
ArrayList 和 Vector区别:
           
ArrayList是异步处理方式,性能高,非线程安全操作类,使用Iterators
           
       
LinkedList子类和Queue接口
            LinkedList表示一个链表的操作类, ListedList<> l =
new ListedList<>();
            poll()方法找到首字母并回删除首节点, peak()
找到首字母
            Queue表示的是队列操作接口,采用FIFO方式操作,for(int i; i<
list.size()+1
           
        set:
           
散列存放:HashSet:
                set<String/也可以是个类名> s = new
HashSet<String/也可以是类名>();
                System.out.println(set);  
//自主调用toString()方法
            有序存放:TresSet
类中的每一个对象所在的类都必须实现Comparable接口才可以使用;
                      
TreeSet自定义排序是一定要继承Comparable类,复写Comparto()方法,
                       public
int compareTo(Person per)
                      
但是比较器比较的时候,如果某个属性没有进行比较的指定,也会认为是同一个对象,所以应该增加按照姓名比较;
                      
return this.name.compareTo(per.name);
                去除重复元素:
主类不需要继承TreeSet,但是需要复写equals方法,编写hashCode方法
13.6 集合的输出
       
如果要输出Collection、Set集合中的内容,可以将其转换为对象数组输出,而List则可以直接使用get()方法输出;
       
常用的类集合为:
            Iterator: 迭代输出(判断元素是否有内容,有就输出)
           
ListItarator: Iterator的子接口,专门用于输出List
            Enumeration: 
旧接口

2016-08-08 星期一

13.6.1
    Iteration: Iterator是一个接口,直接使用Colletion定义的   
itreator()实例化;同理List和Set也实现了此方法
        hasNext():
返回boolean,判断元素是否有内容,
        next():输出,取出内容
    ListIterator:
只能通过List实现实例化,只能输List内容
        hasPrevious(): 判断是否有上一个元素
       
pervious(): 取出当前元素
        nextIndex(): 返回下一个元素的索引
       
previousIndex(): 返回上一个元素的索引
        set(): 替换元素
       
实现ListIterator接口双向输出时,如果想完成右后向前输出,则一定要先右前向后输出;
    forEach: for (String str:
list)//(类 对象:集合){}
   
13.7 Map接口
    Map<K,V>:
       
clear(): 清空cler()
        containKey(): 判断指定key是否存在
       
set<May.Entry><K,V> entrySet(): 将Map对象变为Set集合
           
Map.Entry是Map内部定义的一个接口,专门保存key->va
               
可以由外部通过“外部类.内部类”直接调用
           
Map内容是K-V形式保存,实际上K-V是把数据保存在M.E之后
               
Map输出数据的时候必须使用M.Entry接口
        V get(OBJECT key): 根据key 取得Value
       
set<K> keySet(): 取得所有key
            Set<String> set =
map.keySet();
        Collection<V> value(): 取出全部value
        V
put(K kye, V value): 向集合中加入元素
        putAll<Map<? extends K, ? extends
V>t> 一个Map集合加入到另一个
13.7.1 Map接口常用的类
           HashMap:
无序存放,新的操作类,key不能重复
           HashTable: 无序存放,旧类操作,key不能重复
          
TreeMap:有序Map集合,按key排序,不允许重复
           WeakHashMap: 不再用的内容青岛湖
          
IdenHashM: key可以重复
        Map接口的使用注意事项:
           
1.不能直接使用迭代输出Map内容,因为Map 存放一对值,Iterator只能输出一个
           
2.Map很少作为直接输出的额,只是用作查询
            3.直接使用非系统类作为key

2016-08-28  星期日

//利用indexOf判断某个字符是否存在 也可以用
//replaceAll (源数字 , 目标数字) 
直接替换
//System.out.println(str.charAt(8)); 
取出第8个字符
继承父类以后调用父类的构造方法:super(name, address, sex, age);
 输出父类的属性:
super.toString()
 
代理模式: 代理和真实主题均要实现接口,在代理中实现真实主题实例化(构造方法中实现)
工厂模式: 
其他了均实现接口,定义一个类专门获取实例,不是构造方法获得
适配器模式:接口定义方法,
构造方法实现此接口,方法体为空,后子类继承抽象类,有选择的复写方法
观察者模式: 要被关注的继承Obserable类,调用父类方法
super.setChanged(); super.nosuper.notifyObservers() 观察着实现
Observer接口,在update类中,判断是否是一个类,输出即可
//这些接口呢都需要用到多态性,都是 接口 接口对象 = new
子类对象(),实现向上转型,转型后可以调用子类复写父类的方法
如果需要向下转型,则调用子类自己的方法,但是需要先向上转型后, instanceof
比较对象;

//如果要进行字符串的拆分,利用split方法
Pattern p = Pattern.compile("[a-zA-Z]");
String
s[] = p.split(str);
//如果需要正则表达式来进行字符的替换,
String str =
"123231m3m123m123m123m12";
        Pattern p =
Pattern.compile("[a-zA-Z]");
        Matcher m = p.matcher(str);
       
String ss = m.replaceAll("_");
、、以上方法String都有支持的 boolean matches(String
regex); String[] split();  String replaceAll(String regex, s)

2016-08-30  星期三

时间类: SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd
HH:mm:ss:SSS");
         sdf.format(new Date())    ;
        
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
         Date temp
= sdf.parse(str);
字符串拆分:
        String str = "<html xmlns=\"http://www.w3.org/1999/xhtml\">";
       
str = str.substring(str.indexOf(" ")+1, str.indexOf(">")).replaceAll("\"", "
").replaceAll("\\.", " ").replaceAll("/", " ");
字符串内输入双引号: \"
定时调度:

    Timer类:
是一种线程设施,可以定时安排一个时间,与TimerTask(实现由TImer安排的一次或重复执行的某一个任务)配合使用
IO操作:
   
File打开文件--> 字节流制定位置-->读写--> 关闭流
    FIle类:文件本身操作
        boolean
createNewFile();
        boolean exists();
        boolean
isDirectory();
        String[] list();
        File[]
listFiles();
        boolean mkdir();
        boolean renameTo(File
dest);   //已有文件重新命名
    RandomAccessFile类:随机读取类(一般不用)
       
RandomAccessFile(File file, String mode)   //file路径
       
RandomAccessFile(String path, String mode)//固定路径
        close():
关闭操作
        void writeBytes(String s): 字符串写入文件
        void writeInt(jint
v)
        int read(byte[] b): 将内容读取到一个byte数组
        byte readByte():
读取一个字节
        int readInt(): 读取整数型
        int skipBytes(int
n):指针跳过多少字节
        void seek(long pos): 指针位置
   
所有数据都是已流的方式传输或保存,分字节和字符
    字节流:以byte为准,需要将字符串转为Byte数组
    
OutputStream
        OutputStream out = new
FileOutputStream(file);
        OutputStream out = new FileOutputStream(file,
true);追加内容
        String str = "\r\nHEllo world";  文件需换行,可以加\r\n
       
byte[] b = str.getBytes();
        out.write(b);
       
out.close();
     InputStream:
        int avaliable();
//取得文件大小
        int read();//以数字的方式读取
        int read(byte[] b)
;内容读取到byte数组
        InputStream input = new
FileInputStream(file);
        byte[] bb = new byte
[(int)f.length()]
        //byte[] bb = new byte[1212];
        //int len
= input.read(b);  //取出内容到byte数组,确定输出多少
       
while(input.read()!=-1)
        {
            b[len] = (byte)
temp;
            len++;
        }
        input.close();
       
System.out.println(new String(b, 0, len));
        一个字符2个字节;
    字符流:
Writer        子类:  FileWriter
        可以添加对象, Writer writer = new
FileWriter(new File(), true);
        write(String str)  字符串输出
       
write(char[] c)        字符数组输出
        flush()     强制清空缓存
           
Reader   子类 FileReader
        int read()
        int read(char[] c): 
内容读取到字符数组,返回长度
        字符的输出: new String(c, 0 ,len)
        读取字符串有2中方法:
直接从文件读取
                              for循环 读取一个字节 int len =
0;
                              int temp = 0; 
//接收每一个内容
                              while((temp =
reader.read())!=-1)
                             
{
                                c[len] =
(char)temp;
                               
len++;
                              }
       
字符流使用了缓冲区,字节流没有使用缓冲区(内存区域);
        不关闭时也将字符内容输出,可以使用Writer类的flush()方法

打印流: PrintStream() 和 字符打印流()

2016-09-03  星期六

1.Serializable(Serializable)
       
一个类的对象要想被序列化(一个对象变为2进制,方便存储和传输),就必须实现Serialiable接口,依靠ObjectOutputStream()和ObjectInputStream()
      
Java序列化的时候会产生一个序列化ID,通过JVM实现
            File file = new File("F:" +
File.separator + "hello.txt");
            OutputStream out = new
FileOutputStream(file);
            ObjectOutputStream oos = new
ObjectOutputStream(out);
            oos.writeObject(new
Person("lisi"));
            ObjectInputStream ois = new
ObjectInputStream()
            oos.close();
            InputStream input
= new FileInputStream(file);
            ObjectInputStream ois = new
ObjectInputStream(input);
            Object obj =
ois.readObject();
            ois.close();
   
    2.
Externalizable是Serializable子类,实现此接口的可以用户自己制定被序列化的内容
       
writeExternal(ObjectOutput ot): 指定要保存的属性信息,对象序列化时调用
       
readExternal(ObjectInput in): 读取被保存的信息,反序列化用
        以上2个方法都是DataOutput 和
DataInput接口的子类
        public Person(){};
        public Person(String
name)
            {   this.name = name;  }
           
//读取属性,有一个强制转换的要求
        public void readExternal(ObjectInput
input)
            {   this.name = (String)
input.readObject();}
            //保存name属性
        public void
writeExternal(ObjectOutput output)        
            {    
output.writeObject(this.name);    }
       
一个类要使用Externalizable实现序列化,此类必须有一个无参构造方法,因为在反序列化的时候会默认调用无参构造实例对象
    3. 
transient:关键字表示对象的某一个属性不希望被序列化
    4.    序列化一组对象:
           
对象输出时只提供了writeObject(Object
obj)),并没有多对象输出,所以要实现同时序列化多个对象,就可以使用对象数组操作。
           
因为数组属于引用类型,可以用Object类型接收   
    5.    List Set(重复内容依靠hashCode() 和
equals()方法区别) Queue SortSet(对集合中的数据进行排序)       
       
List:接口
            add(int index, E element)
            addAll(int
index, Collection<? extends E> c)  添加一组元素
            E get(int
index)
            ListIterator<E> listIterator()
            E
remove(int index)
            E removeAll(Collection<?>
arg0)
            List<E> subList(int fronIndex, int
toIndex)
            E set(int index, E element)
            toArray():
集合变为对象
            size():  返回集合的长度
            get(int index):
返回当前的位置的数字
            for(int i = 0; i < allList.size();
i++)
            {
                System.out.print(allList.get[i] +
"、");
            }
        LinkedLis:链表操作类   
            addFirst(E
e );
            addList(E e);
            boolean offer();
           
E removeFirst()
        Queue:先进先出
            E element():
找到表头
            E peek()  找到不删除;
            E pool()  找到后删除; 
利用此方法先进先出输出数字
            E remove() 检索并移除表头
           
       
Set:HashSet &&  TreeSet
        HashSet:
           
无规律可循
        TreeSet:   
            有规律
           
如果是比较对象,则需要继承Comparable接口,实现CompareTo()方法
            class Person implements
Comparable<Person>//接口处定义泛型类型
            public int compareTo(Person
per) {
                if ( this.age > per.age)
               
{
                    return 1;
                }
                else
if (this.age < per.age)
                {
                    return
-1;
                }
                else
               
{
                    return 0;
                }
           
比较器操作时如果某个实现没有进行比较,则默认为是一个对象
           
如果实现了HashSet,则所有的重复对象也会继续出现,就需要复写Object类的equals()方法和hashCode()方法,一个对象编码表示一个对象
       
SortedSet:    TreeSet继承SortedSet
            SortedSet<String> set =
new TreeSet<String>();
            first();  last();
           
SortedSet<E> headSet(E element):开始到指定位置
            SortedSet<E>
tailSet(E element):指定到最后
        //可以用get()方法输出数字
       
Iterator:
            Iterator iter = list.iterator();
       
ListIterator:
            由前向后: hasNext() && next()
           
有后向前: 利用hasPrevious()方法由前向后判断,用previous取出元素
            set() 和 add()
可以更改和添加元素
            foreach输出:
                for (类 对象: 集合) {};
for(String str: all)
           
        Map:HashMap &&
TreeMap
            put(Object key, Object obj): 添加数据
            get():
根据key值取得value的值
                Map<String, String> map = new
HashMap<String, String>();
                Set<String> keys =
map.keySet();
                Iteration key =
keys.iterator();
                while(key.hasNext())
               
{
                    String str = key.next();
                   
System.out.println(map.get(str));//根据key 取值
               
}
                map.get(iter.next())
            containKey():
判断指定的key是否存在
            keySet():
将一个Map中的key变为Set集合,然后利用Iterator输出
            values():
返回Collection,注意定义泛型类型
                Collection<String> col =
map.values();
                Iteration valus =
col.iterator;
                while(values.hasNext()){};
           
Map接口注意事项:
                1.
不能直接使用迭代输出Map中的全部内容,因为Map存放的是一对值,Iterate只能每次找到一个值,如果非要迭代输出,则必须:
                   
1> Map实例通过entrySet()方法变为Set接口对象
                    2>
通过Set接口实例化Iterator、
                    3>
Iterator迭代输出,每一个ie内容都是Map.Entry的对象
                    4> 通过Map.Entry进行
key --> value分离
                   
(Map中的每对数据都是通过Map.Entry保存的,所以也是Map.Entry输出)
                    Map<String
,String> map = null;
                    map = new HashMap<String,
String>();
                    map.put("04122077",
"吕峰涛");
                    map.put("04122076", "吕峰");
               
`    Set<Map.Entry<String, String>> set = 
map.entrySet();
                    Iterator<Map.Entry<String,
String>> iter = set.iterator();
                   
while(iter.hasNext())
                    {
                       
Map.Entry<String, String> me = iter.next();
                       
System.out.print( me.getKey() + "--> "    + me.getValue()    +
"\t");
                    }           
            SortedMap:
排序接口,实现此类都是排序的子类,例如TreeMap
                Comparator<? super K>
comparator();
                K firstKey();  K lastKey();
               
SortedMap<k, V> subMap(K fromKey, K endKey)
               
SortedMap<K, V> tailMap<K fromKey):  返回大于指定key的部分集合
           
Collection:
                addAll(): 为一个集合增加内容 Collection.addAll("ARRAY",
"BufferedReader");
                reserve():
               
binarySearch(): 返回内容位置
                sort(); 排序
                swap():
交换我ie之
               
            Stack: 先进先出
                push:
进站
                pop: 出战
                int search(Object o):
在战中查找
            Properties:
                new
Property().setProperty("key", "value");
                store(OutputStream
out, String comment, String encoding);
                list(PrintStream out):

                loadFromXML(InputStream in):
               
storeToXML(OutputStream out)

2016-09-05  星期一

1. Class类方法
        Class<?> forName(String Name):
传入完整"包.类", 实例化Class对象
        c1 =
Class.forName("com.huawei.ftl.X");
        System.out.println("类名称:  " +
c1.getName());
        也可以通过类.class或者对象.getClass()实力化Class类
       
实例化后可以通过newInstance()实例化对象,注意转换类型
        per = (Person)
c.newInstance();
        (以上注意一点,就是类中必须由无参构造方法)
        Construtor[]
getConstructor: 得到类中所有的构造方法
        Field[] getDeclaredFields():
得到继承来的类
        Class[] getInte

2016-09-10  星期六    
JavaWeb

HTML注释语句: <!-注释语言->
    1. JS的事件处理: body
(onLoad()="start()" onUnload()="stop()" onClick="fun()")
                   
onSubmint():事件在提交之前先验证
                    onCHange(): 变化
           文本处理:
var value = document.form.content.value;
                   
//精确到具体的name值,然后取值,否则为空

2.3.3Window对象
        
window.location: 定位到对应网页
         window.open: 打开网页设置
         HTML:
表达式完成交互的收到,表单元素写在《form>里面
        
JavaScript是基于对象的语言,function是函数,又返回值直接返回return即可。
     3.1 XML:
可扩展性标志语言,实现数据交换,系统配置,内容管理。
         XML语言是以<?  ?> 开始和结束的
        
version:
         encoding:编码
         standalone: 是否独立运行,
XML声导固定格式
         <?xml-stylesheet type="text/css" href =
"attri.css"?>
         <![CADATA[里面的内容不解析]]>
     3.2 XML解析:SAX
&& DOM(文档对象模型)
         4个重要的额借口:    
            
Document:整个XML文档,根节点
             Node:每一个Node代表一个节点
            
NodeList:节点的集合
             NamedNodeMap:一组节点和其唯一名称对应关系,属性节点
            
NodeList getElementByTagNsme();取指定节点名
             Element
createElement(String tagName):创建指定名节点
        
Dom4J:利用工具来读写文件
             Document doc =
DocumentHelper.createDocument();
             Element addresslist =
doc.addElement("addresslist");
             Element linkman =
addresslist.addElement("linkman");
             Element name =
linkman.addElement("name");
             name.setText("吕峰涛");    

            OutputFormat format =
OutputFormat.createPrettyPrint();
            
format.setEncoding("GBK");

2016-09-11  星期日

1.创建目录-->
WEB_INFO--> 复制WEBapps/ROOT/web.xml到虚拟目录下
       
Tomcat修改端口:conf/server.xml
          虚拟目录:复制web.xml
           
<content path="/mldn" docBase="虚拟目录地址"/>
            修改conf/web.xml
listings的false修改为true;
            2xx:请求成功
           
3xx:重定向
            403:禁止
            404:找不到文件
           
500:服务器内部错误
        Tomcat是个Web容器
        2.JSP学习
           
JSP的命名采用小写,且最终都是以*.class完成
           
request.getParameter()方法接受输入内容。

2016-09-11

1. JavaBean;一个类只包含属性,setter,getter方法
         POJO:
简单的Java对象
         VO: 专门传递值
         TO: 传递对象
    2. 数据库操作:
       
pstmt = conn.prepareStatement(sql);
        pstmt.setInt(1, tid);
       
(注意顺序,一定是先执行语句,然后设置变量)

2016-09-18

1.抽象类的使用:      Person per = new
Student("lvfengtao", 12o, 99.9f);
        抽象类中定义抽象方法为public, 不用写方法体  public
abstract void say();即可;
    2.工厂模式中在工厂类中定义了一个静态方法来获取接口的实例;
        public
static Fruit getInstance(String name)
    3.代理模式; Network net = new Proxy(new
Real());

}

2016-10-02  星期日

1. 使用Dom4J 生成XML文件,XML主要是用于数据交换
           
Document创建一个DOC文档,一个文档只有一个根节点
            Element添加元素,
           
OutputFormat完成格式化,设置为中文格式。
            XMLWriter完成数据的写入
           
OutputFormat format = OutputFormat.createPrettyPrint();
            XMLWriter
writer = new XMLWriter(
                        new
FileOutputStream(
                                "G:" + File.separator +
"new2016.xml"), format );
             writer.write(doc);
            
writer.close();

2. JS操作XML
        JS点击显示文字:
           
document.getElementById("info").innerHTML =
"<h2>www.MLDNJAVA.cn</h2>" ;
        JSP注释:
           
1.<!--注释内容-->   显示注释客户端可以看见
            2.<%--注释内容--%>;   /* 
*/      //  隐式注释
        Scriptlet:3种方式
            1.<%  %> :
定义局部变量
              <%!%>: 全局变量,类,方法
              <%=%>: 
输出一个变量
            2.标签:<jsp:scriptlet>  代码块 
</jsp:scriptlet>
        Page: langua="Java" contentType="text/html"
pageEncoding="GBK"
            必须是text/html 因为conf/web.xml写了这个
           
2.错误页面显示:           
                <%@ page isErrorPage = "true"%>  
isErrorPage (注意大小写)
                <%@ page errorPage="error.jsp"%> 

                属于服务器端的跳转
        Include:包含指令:   
           
1.静态包含: <%@ include file= "" %>
           
2.动态包含:<jsp:include>:自动区分页面静态还是动态
                <jsp:include page
= "{包含文件路径 | <%=表达式%>}" flush = "true/false"/>
                   
<jsp:param name="参数名称" value="参数内容"/>
               
</jsp:include>
                静态是先包含后处理,动态是先处理后包含
        跳转:
<jsp:forward page = {""}>

2016-10-04  星期二   JSP

中文问题:
        HTML:<meta http-equiv="Content-Type"
content="text/html;
    charset= utf-8 "/>
       
REQUEST:如果获取返回的值,可以设置
           
request.setCharacterEncoding("utf-8");
    1.JSP内置对象 (9个,out,  request,
session(保存用户信息), application(所有用户的共享信息), response,
pageContext(JSP页面容器))
      4个属性:page(一个页面保存,调整失效),
               
request(只在一次 请求保持),
               
session(再一次会话范围内,任何跳转都行,新开浏览器失效),
               
application(服务器保持)
            公共方法: setAttribute(), getAttribute(),
removeAttribute(),
    2.
    page:   
       
pageContext.setAttribute("name", "吕锋涛");
        String name =
(String)pageContext.getAttribute("name");
        取得属性后要记得想下转型
   
HTTPServletRequest && ServerletRequest
    request:
表示跳转后属性继续保存,换成超链接之后失效,一次情况下服务器只会给予回应一次
        getParametervalues(String
name): 取得客户端发来的一组请求
        String method = request.getMethod();
       
String ip = request.getRemoteAddr();
        String path =
request.getServletPath();
        String contextPath =
request.getContextPath();
        Enumeration enu =
request.getHeaderNames();
        角色验证
    HTTPServletResponse &&
ServerletResponse
    response:对客户的的请求回应(HTML跳转 &&
sendRedirectict)
        addCookie(Cookie cookie)
        setHeader(String
name, String value) //
            response.setHeader("refresh",2)
2秒刷新一次
            response.setHeader("refresh",2; URL="hello.html")
2秒刷新后跳转页面,客户端跳转
            <META HTTP-EQUIV="refresh"
CONTNT="3";URL="hello.html">
        sendRedirectict(String
location)客户端调整
        <jsp:forward> &&
sendRedirectict:
           
JSP是服务器段跳转,跳抓后地址不变,客户端跳转会导致地址变化
               
服务器端跳转时立刻的,客户端是执行万页面后跳转
       
操作Cookie:让服务器端的技术保存在客户端,火灾客户端执行数据处理,提高了网页的速率,减少了服务器的运载,安全性差。
   
javax.servlet.http.HttpSession       
    session:
一次设置,与设置页面相关就保存属性,可以通过超链接。新打开浏览器失效
       
主要用于登陆和注销操作,每一个session对象都表示不同的访问用户
        getId(),
       
getCreation():
        getLastAccessedTime():
        isNew():
       
invalidate()://让session失效
        Enumeration getAttributeNames():
       
获取用户时间:getCurrentTIme();
        登陆程序:通过sessio保存方法; 使用Cookie保存信息;
通过表单隐藏域保存信息; 通过地址重写保存信息
    application:保存属性到服务器
       
getRealPath():
        getContextPath():取得当前虚拟路径名称
       
配置虚拟目录:<Context path="/mldn" docBase="D:/mldn">
总结一下:
    1.
request.setCharacterEncoding("GBK");  设置为中文格式。
    <meta
http-equiv="Content-Type" content="text/html;
    charset= utf-8
"/>
    2. this.getServletContext().getRealPath("/"); 
后去虚拟目录对应的真是目录
        request.getContextPath(); //获取虚拟目录对应目录
    3.
PrintStream ps = new PrintStream(new FileOutputStream(file));  设置输出流
,输出到文件
        ps.println(content);
       ps.close();
      
//但凡IO操作必然涉及异常处理以及IO流的关闭
    4. Scanner scanner = new Scanner(new
FileInputStream(file));  不明到底有多少的时候用StringBuffer;
         
scanner.useDelimiter("\n");
          StringBuffer buf = new
StringBuffer();
    5. response.setHeader("refresh", "2;URL=login.jsp"); 
定时跳转
        <META HTTP-EQUIV="refresh"
CONTENT="3";URL="request_demo_02.html">HTML定时跳转
       
session.invalidate();   用户失效
        session.getAttribute("userid");
获取属性
        session.getId(); 和Cookie一样
    6.  Cookie c[] =
request.getCookies();  至少1个
        <%=c[i].getName()%> ---> 
<%=c[i].getValue()%>
        **inst: getParametervalues用星号其区别;
   
7.  <jsp:param name="uname" value="<%=name%>"/>  传递参数:
       
get && post区别:
            get:提交后的内容会显示在地址栏,post不会
           

    pageContext: response等设置的都可以在pageContext完成。
       
pageContext.forward("hello.jsp"?info="hell0");  传递参数可以直接传递
        String
info = pageContext.getRequest().getParameter("info");
   
config的配置需要在web.xml文件中配置

2016-10-05  星期三   JavaBean;

1.
JavaBean;一个类只包含属性,setter,getter方法
         POJO: 简单的Java对象
         VO:
专门传递值
         TO: 传递对象,远程传输时必须继承Serialization
        所有的类放入一个包,声明为public
class, 属性封装,至少有一个无参构造方法
        <jsp:useBean id = "sim" scope="page"
class="com.huawei.ftl.SimpleBean"/>
        <jsp:setProperty
property="*" name="sim"/> name是实例化对象名称,pro="*" 自动匹配

2.
三目运算:  return value  == null?"":value;
    3. MVC:
       
Model:完成独立的业务操作,JAVABEAN
        Control   
:负责所有的用户请求,判断是否合法,根据请求类型调用JavaBean,显示给View
       
View:接受Servlet传递的内容,调研JavaBean显示给用户
        RequDispatcher():
request属性传递内容

2016-10-09  星期日  小雨       
    1. JSTL1.2标准库开发
        c:
核心开发库
        sql:查询数据库操作
        xml:XML数据
        fn: 函数操作
       
H&N:fmt.tld 格式化数据
    2. c:out :输出属性
        c:set: 设置属性
       
<jsp:useBean id="login" class = "com.huawei.mvc.servlet.LoginServlet" scope =
"request"/>
        <%     request.setAttribute("simple", login); 
%>
        <c:set var = "world" value = "hello world" target =
"${simple}" property = "content" />
                var:属性名称  value: 属性内容
scope: 保存范围 target:存储的目标属性  property:制定target属性
        c: remove :
删除指定属性
        c: catch:异常处理
        c: choose:多条件判断,可以结合c:when
c:otherwise
                <c:choose>       
                   
<c:when test="${num==20}">
                       
<h3>输入的nuam的值为: 20</h3>
                   
</c:when>
                </c:choose>       
        c:
foreach :输出数组,集合
            <c:forEach items="${ref}" var =
"m">
                ${m}
            </c:forEach>
           
注意items里写的是一个集合,一个变量,要用${}表示
        c: url : 根据路径和参数生成一个新的URL
        c:
redirect: 客户端跳转
        c: if :
            <c:if test="${10 > 1}"
var = "res" scope = "request">
            test制定比较大小内容,
var保存判断结果
        c:forToken: 拆分数组
        c:import 可以讲其他页面导入进来,类似<jsp
include>

2016-10-10  Struts开发

1. Struts 中的Action相当于Servlet
                  ActionForm ==
JavaBean
        所有的输入从ActionForm取得,Servlet中由request取得
        Action
中完成跳转,需要在Struts-config中配置,每个Action配置也给跳转路径

2016-07-23  周六

利用键盘输入的时候需要抛出异常 ,直接快捷键 ctrl + 1 ;
定义数组 int score[] = new int[4]  ; 
只有4个数字
BufferedReader br = new BufferedReader(new
InputStreamReader(System.in)) ;
String str = br.readLine()
;//直接输入,直接输出
score[i] = Integer.parseInt( str) ;  //转换Str 为 Int
int temp
= Integer.parseInt(str);   //字符串变为int型
String str = new String(b); 
byte变字符串
Scanner scan = new Scanner(System.in) ;
冒泡排序: i=1;j=0 ;
   
for (int i = 1 ; i < 3 ;i++ ){
        for(int j = 0 ; j< 3 ;
j++){
            if(score[i] < score[j]){
                int temp =
score[i] ;
                score[i] = score[j] ;
                score[j]
= temp ;
            }
           
方法的定义:  public static 返回值 方法名(类型 参数
, 类型 参数,){
                程序体 ;
                (return) //可省略
       
}
类名定义: ArrayDemo (单词首字母大写)
方法定义: printInfo (第一个单词小写,后面的单词首字母大写 )

定义的时候 char c[] = {'','','',''} ;  字符串都是单引号,字符都是双引号
float型的参数都是 3.2f,
使用
break 可以结束一层循环
使用 return 可以结束一个方法
方法的递归 ; return x + sum(temp)
;
栈中存放的是堆空间的地址; 中放的是名字,堆内存是实际数字

2016-07-24  周日

Java 的直接数组排序 java.util.ARRAY.sort() ;
Java 的直接复制数组
System.arraycopy(源数组,源数组开始位置,目标数组,目标数组开始位置,数组长度 ) ;
   
(说是复制,其实就是目标位置的数组的替换,将源数组的数字复制到目标数组的位置,目标数组的长度不变)
Java 新特性:foreach(数据类型 变量名:
数组名称) ; foreach (int x ; temp) ;
Java 新特性:可变参数:返回类型 方法名(类型... 参数) public void
fun (int... arg)
    例: fun(new int[]{1,1,1,1,1});  //
传递参数可以直接传递
Java的多态性:方法的重载 ; 方法名同但是参数类型和参数的个数不同 ;   System.out.println
也属于重载
              对象的多肽 :
子类对象可以和父类对象进行相互转换,而且根据子类的不同,完成的功能也不同
Java的封装性:对象的属性和行为看成整体,即对象;
             
信息的隐蔽
              private 声明的属性或者方法只能被类的内部进行访问,而不能在外部被访问;

this的使用:
    this.表示当前对象,this必须发放到构造方法的首行
   
this调用构造方法时一定要保留一个构造方法作为出口,也就是有一个构造方法不调用this();
    this.方法名()
强调是本类中的方法;            
    this.属性  强调是本类中的属性;       

Java的继承性:拥有一般特性的事物,在基础上 派生其他;
类 : 成员变量声明 + 方法定义:
构造方法:
在实例化的时候就可以进行赋值,而不是调用setter 和 getter 方法  //也即是说,只是一个赋值的过程,没有返回值
          
方法名与主类同; 不能有返回值类型声明; 不能有return语句;默认 default
类型
匿名对象:没有明确给出名称的对象;一般只使用一次,而且直接开启堆空间,不存在栈空间的索引; 
            new
Person("zhangsan",12).tell() ;
String
本身就是一个类,但是我们一般用的String没有开辟栈空间,比较的只是堆空间的值;
       
一个字符串本身就是一个String的匿名对象;
        “==” 比较的是开辟的空间,而不是内容;
        equal()
比较内容是否一致;
        String 里面indexOf本身就可以比较内容 是否相等, 他是找到内容,然后返回字符所在位置,
!(indexOf("hello"))!= -1 表示找到
       
一个String对象内容的改变实际上是通过内存地址的更新完成的,本身的字符串内容不会变;
        char[] toCharArray()
;//转换为字符数组  charAt() //特定的位置取值  String split()//按照指定的字符串分割
        String
subString()指定字段取值  equals(), equalsIgnoreCase()
        split  和
raplaxeAll() 支持正则表达式;,返回时一个 String s[] =
        indexOf :
从指定位置开始查找字符串位置,没有找到就返回 -1 ;
        charAt : 取出指定位置的字符   trim()
:去掉左右的空额
        length 和 length() 在数组中,length是长度,String操作中是函数,需要length()
;
引用传递: 就是将一个堆内存空间的使用权交给多个栈内存空间       
        接受本类的对象: public void
fun(Demo d2)

2016-07-28 周四

Java的内存区域:
    栈内存:保存所有对象的名称(堆地址的内存空间)
   
堆内存:保存每个对象的属性内容
    全局变量: static类型属性
   
全局代码段:保存所有的方法定义
Static关键字:堆内存保存对象,可以用static共享属性
   
static声明属性的又称为类属性,因为类的公共属性应该由类来修改,毕竟用户不知道到底会有多少对象产生;
        static String
count = "ad";   Person.count = "bc";
   
static声明的方法又称为类方法,可以用类名调用;
        public static setName(String name) ;     
Person.setName("lvfengtao") ;
    static应用,可以查看定义了多少给
实例化对象;
System.exit(1) ; //可以直接退出程序,设置非0数字
代码块:
   
普通代码块:{}括起来的,直接在方法或者语句中设置的
    构造代码块:直接写在类中的代码块   //只有一行代码
   
静态代码块:用static声明的代码块
       
静态代码块优于主方法执行,类中的静态代码块优先于构造块执行,且只执行一次,不管产生几个对象
构造方法私有化: private 方法名()
   
构造方法一旦私有化,就不能new调用,就必须从内部调用
        一种是static 属性,另一种是static
方法,返回实例,通过类.方法名调用;
单例设计模式:
无论程序怎么运行,始终只有一个实例化对象存在,只要将构造方法私有,就可以对控制实例化对象的产生;
数组一定要先开辟空间,因为是引用类型
主方法的String
args[]    本身就是一个类,主方法中的参数本身就是以对象数组的形式出现的;
内部类: 在类的内部在定义一个类
   
缺点:类由属性和方法构成,所以会破坏类结构
    唯一的好处就是可以访问外部类的私有属性;
   
用static声明的内部类变成了外部类,但是不能访问非static声明的外部类属性
在外部访问内部类
    外部类.内部类 内部类对象 =
外部类实例.new 内部类() ;
    private
定义是在一个类里面都可以访问,所以内部类可以直接访问外部类的属性;
使用statIC声明的内部类就会成外部类,使用static声明的内部类不能访问非static声明的外部类
在方法中定义一个内部类
   
在方法中定义的内部类不能直接访问方法中的参数,如果发放中的参数想要被内部类访问,就必须在参数前加final关键字

2016-07-30  周六

使用构造方法的时候,一定是this.setName(name);   继承的时候是,super(age,name);   Getter方法中:return
school;
关于输出,最好是在类中返回String方法,然后在主类中 System.out.println(实例化对象.方法名) ;

6.1 继承类(派生类)
    Java只允许单继承,一个子类只允许有一个父类,允许多层继承,一个父类还有一个父类;
   
子类是不能调用父类的私有成员,子类可以调用父类的非私有 方法,但是不能直接调用父类的私有成员,但是可以通过setter和getter;
   
子类实例化对象之前,先调用父类的构造方法,后调用子类的构造方法,实际上子类的构造方法中隐藏了super()方法【超类】
   
子类不能拥有比父类更高级的访问权限
6.2 this 和 super 区别:
    1.this
只能调用本类的属性、方法,本类中没有则父类查找    super 访问父类的方法,方法
    2.this 调用本类构造, supe
调用父类构造,且放在子类首行
    3.this 表示当前对象
6.4 final :完结器   
,final声明的类不能有子类,声明的方法不能被覆写,声明的变量为常量,不可以修改
    final声明的变量必须全部大写; public static
,final String NAME = "Lvfengtao";
6.5 Abstract 抽象类:
抽象类是一种模板,必须被继承才能用,一个子类只能继承一个抽象类
    包含一个抽象方法的类是抽象类; 抽象类和抽象方法必须由abstract声明;
抽象方法只需声明,不需要具体;
    抽象类必须被继承,子类必须前部复写抽象类中的全部抽象方法  public abstract void
print();
    抽象方法不要使用private声明,因为必须被覆写,子类不易复写;
   
抽象类可以定义构造函数,所以子类实例化之前必须对父类进行实例化,也就是说先必须给打印父类的构造方法然后子类的构造方法
   
子类可以通过super()方法调用抽象类(父类)的构造方法,也可以在子类调用父类指定参数的构造方法
   
    子类 extends 抽象类
implements 接口A, 接口B
6.6 接口: 特殊的类,由全局常量和公共的抽象方法组成  // 接口本身已经定义,所以不需要在写 public
static fianl 和 abstract ;
           由于明确规定了抽象方法是public
类,所以也不需要在写;
           接口与抽象方法一样需要子类的继承
implements,一个子类可以实现多个接口,摆脱继承的单继承
           全局常量,在接口里定义的时候用大写
          
Java允许一个抽象类实现多个接口,但是一个接口不允许继承抽象类, 允许一个接口继承多个接口
           接口的继承: interface A 
extends B, C
    interface A {
        public static final String INFO =,
"Lvfengtao"             ====   String INFO = "Lvfengtao"
        public
abstract void print()   ==========  (public)void print()      
       
//全局常量;
        抽象方法;  //必须是public方法,写与不写,Java的接口方法都是pblci
    }
6.7
对象的多态性
    表现: 1、方法的重载和覆写 
          
2、对象的多态性
                        (向上转型:子类--> 父类 ; 父类 父类对象 =
子类实类
                          向下转型:父类 --> 子类,且必须说明向下转型的子类类型) 子类 子类对象 =
(子类)父类实例
        ** 对象是Object类型,需要转型  String str =
(String)obj[i];

2016-08-02 星期二

6.12 包装类; Java数据分为基本数据类型和引用数据类型,
              用的最多的还是讲字符串变为数据类型(int i=
Interger.parseInt("1234"));
              (字符串变为数组的时候需要抛出异常)
    拆箱 和装箱: 
Interger i = new Interger(x);   int x = i.intValue();
                  
Integer i = 0 ;//自动封装         int x = i;  //自动拆箱
               
7.1
异常的基本概念
   
Java的异常都是以类和对象的形式存在,Java的错误主要是语法和语义的错误,编译的时候没有报错,但是运行的时候也可能报错
    Try()
找到错误后会跳转到 catch里面,一旦产生异常,则首先回产生一个异常类 的实例化对象,
    Exception 和 Error 都是Java
Throwable的异常类  
   
通常用e.printStaceTrace()方法打印异常信息,所有的额子类的实例都可以用父类来接受,所以可以调转
7.2 throws 和 
throw关键字
    throws声明的方法,表示此方法不处理异常,而是调用方法去处理;

2016-08-03 星期三

9.1 多线程: 继承 Thread类【要覆写run()】或者实现Runnable类  // 都需要覆写run()方法
       
由于受到单继承的影响,所以一般多线
中程是通过
       
同时可以调用父类start()方法,实现多线程,说是调用start()方法,但是调用的却是run()方法的主题
       
一般重复调用start()方法回抛出异常,而且本质上调用
start0()这个方法,因为使用了native声明,所以需要依靠底层的操作系统支持
       
实现Runnable()方法,需要实现多线程,可以利用Thread类中设定的方法启动多线程
       
Thread类也是Runnable接口的子类,但是Thread并没有完全的实现Runnable接口的run()  Thread 构造方法 Thread
thread = new Thread(接受 Runnable的子类,设置线程名称 )
       
继承Thread类并不能实现资源共享,如果想要资源共享必须实现Runnable接口
       
        避免单继承带来的局限性;
代码能与多个线程共享,代码与数据是分开的;
9.2 线程的状态: 创建 、就绪、 运行、 阻塞、 终止
    getName: 取得线程名称;  
setName: 设置线程名称
    main()本身也就是一个线程,每次Java运行都至少启动2个线程,一个main,一个垃圾回收
   
main()方法可能比其他方法更早执行;
    public static Thread currentThread():
返回当前执行的类
    public final String getName(): 返回线程名称
    public final int
getPriority(): 返回优先级   1  5  10
    public boolean isInterrupted():
线程是否中断;
9.3 Thread类中有一个方法: 利用 构造函数可以直接命名线程   子类实例化以后就可以直接start
   
Runnable,需要 子类实例化对象,然后调用Thread调用start方法
9.6
解决资源同步问题:1、使用同步代码(Synchronized(同步对象 this) 
                      2、同步方法   

            多线程 共享同一资源的时候需要同步,但是过多会产生死锁;         
    方法的完整定义:
   
public/default/private/protected   final static syncronized 返回类型  方法名(参数类型 
参数名称) throws EXCEPTION{    return [返回值/返回调用处]}
    死锁:
同步可以保证资源共享的正确性,所谓死锁就是2个线程都在 等待彼此完成任务,造成程序停滞

2016-08-06 星期六

new String(bInput);   //byte数组变为字符串    byte[] b = str.getBytes();
    int
i = Integer.parseInt(str);    //字符串变整数    {\\d4}必须 数字出现4次
    (^\\d+.?)
正则表达式匹配小数   ,? 表示小时代可以出现一次或0次
    [a-zA-Z0-9]字母数字     \w 字母、数字、下划线    
^\\d{4}-\\d{2}-\\d{2}$:年与日
    [abc]: 字符abc   [^abc]: 除了abc之外的任意字符  \d :数字
\D: 非数字  \w:字母、数字、下划线 \s:所有空白字符
    X?:出现0次到1次  X*:出现0次,1次,多次 
X+:出现1次或多次
    X|Y: 先X或Y  XY:先X后Y   
   
   
正则表达式需要Patter和Matcher两种类完成, Patter类主要进行正则规范Matcher主要执行验证
   
Patter.complie("[0-9]+").matcher(str).matches();
    Patter p =
Patter.compile("[0-9]+");
    Matcher m = p.matcher(str);
   
m.matches();
   
12.16 序列化
    实现Serializable接口,还需要依靠对象输出对象和对象输入流

        对象输出流(ObjectOutputStream): 实现序列化
           
构造方法(传入输出对象):ObjectOutputStream(OutputStream out)
            普通方法(输出对象):
writeObject(Object obj)
                File file =  new File("E:" +
File.separator + "test.txt");
                ObjectOutputStream oos =
null;
                OutputStream os = new
FileOutputStream(file);
                oos = new
ObjectOutputStream(os);
                oos.writeObject(new
People("People",21));
                oos.close();
   
   
实现Externalable接口,还需要依靠对象输出对象和对象输入流    
       
        public void
readExternal(ObjectInput input)   //  读取需要的 内容
        {
           
this.name = (String)input.readObject();  //需要转换
        }
        public
void writeExternal(ObjectOutput output) //  写入需要的 内容
        {
           
output.writeObject(this.name);       
        }
    transient: 声明
的关键字不可以被序列化

13.1 认识类集
            :动态完成对象数组操作,是动态的对象数组,是对一些实现好   
的数据结构的包装,不受对象数组长度限制;
        特点:对基本类集(动态数组、连接表、树)实现是高效的
            
框架允许不同类型的类集以相同的方式和高度
        Collection:
接口,存放一组单值(集合中的每个元素都是一个对象)的最大接口,
        List: Collection
子类接口,堆Collection扩充,允许内容重复
        Set:  Collection
子类接口,没有对Collection扩充,允许内容不重复
             
依靠hashCode()和equals()两个方法区别
        Map; 存放一对值得最大接口,Key -- >
Value
       
        Iterator:集合的输出接口,用于输出集合中的内容,胆小
       
ListIterator: 可以双向输出
       
        Enumeration: 输出指定集合的内容
       
SortedSet: 单值的排序接口,可以使用比较器排序
        SortedMap:存放一对值得排序接口,按照key值比较
       

        Queue: 队列接口,可以实现队列操作
        Map.Entry:
Map.Entry的内部接口,每个Map.Entry对象都保存这一对 key -->
Value的内容,每个Map接口都保存很多Map.Entry接口实例
        List<String> list = new
ArrayList<String>() ;
        System.out.print(list);

2016-08-07 星期日

13.1
        String str[] = list.toArray(new String[]{});
//后面的{}实为初始化
        indexOf()  找不到返回-1  找到显示位置
       
       
ArrayList 和 Vector区别:
           
ArrayList是异步处理方式,性能高,非线程安全操作类,使用Iterators
           
       
LinkedList子类和Queue接口
            LinkedList表示一个链表的操作类, ListedList<> l =
new ListedList<>();
            poll()方法找到首字母并回删除首节点, peak()
找到首字母
            Queue表示的是队列操作接口,采用FIFO方式操作,for(int i; i<
list.size()+1
           
        set:
           
散列存放:HashSet:
                set<String/也可以是个类名> s = new
HashSet<String/也可以是类名>();
                System.out.println(set);  
//自主调用toString()方法
            有序存放:TresSet
类中的每一个对象所在的类都必须实现Comparable接口才可以使用;
                      
TreeSet自定义排序是一定要继承Comparable类,复写Comparto()方法,
                       public
int compareTo(Person per)
                      
但是比较器比较的时候,如果某个属性没有进行比较的指定,也会认为是同一个对象,所以应该增加按照姓名比较;
                      
return this.name.compareTo(per.name);
                去除重复元素:
主类不需要继承TreeSet,但是需要复写equals方法,编写hashCode方法
13.6 集合的输出
       
如果要输出Collection、Set集合中的内容,可以将其转换为对象数组输出,而List则可以直接使用get()方法输出;
       
常用的类集合为:
            Iterator: 迭代输出(判断元素是否有内容,有就输出)
           
ListItarator: Iterator的子接口,专门用于输出List
            Enumeration: 
旧接口

2016-08-08 星期一

13.6.1
    Iteration: Iterator是一个接口,直接使用Colletion定义的   
itreator()实例化;同理List和Set也实现了此方法
        hasNext():
返回boolean,判断元素是否有内容,
        next():输出,取出内容
    ListIterator:
只能通过List实现实例化,只能输List内容
        hasPrevious(): 判断是否有上一个元素
       
pervious(): 取出当前元素
        nextIndex(): 返回下一个元素的索引
       
previousIndex(): 返回上一个元素的索引
        set(): 替换元素
       
实现ListIterator接口双向输出时,如果想完成右后向前输出,则一定要先右前向后输出;
    forEach: for (String str:
list)//(类 对象:集合){}

13.7 Map接口
    Map<K,V>:
       
clear(): 清空cler()
        containKey(): 判断指定key是否存在
       
set<May.Entry><K,V> entrySet(): 将Map对象变为Set集合
           
Map.Entry是Map内部定义的一个接口,专门保存key->va
               
可以由外部通过“外部类.内部类”直接调用
           
Map内容是K-V形式保存,实际上K-V是把数据保存在M.E之后
               
Map输出数据的时候必须使用M.Entry接口
        V get(OBJECT key): 根据key 取得Value
       
set<K> keySet(): 取得所有key
            Set<String> set =
map.keySet();
        Collection<V> value(): 取出全部value
        V
put(K kye, V value): 向集合中加入元素
        putAll<Map<? extends K, ? extends
V>t> 一个Map集合加入到另一个
13.7.1 Map接口常用的类
           HashMap:
无序存放,新的操作类,key不能重复
           HashTable: 无序存放,旧类操作,key不能重复
          
TreeMap:有序Map集合,按key排序,不允许重复
           WeakHashMap: 不再用的内容青岛湖
          
IdenHashM: key可以重复
        Map接口的使用注意事项:
           
1.不能直接使用迭代输出Map内容,因为Map 存放一对值,Iterator只能输出一个
           
2.Map很少作为直接输出的额,只是用作查询
            3.直接使用非系统类作为key

2016-08-28  星期日

//利用indexOf判断某个字符是否存在 也可以用
//replaceAll (源数字 , 目标数字) 
直接替换
//System.out.println(str.charAt(8)); 
取出第8个字符
继承父类以后调用父类的构造方法:super(name, address, sex, age);
 输出父类的属性:
super.toString()
 
代理模式: 代理和真实主题均要实现接口,在代理中实现真实主题实例化(构造方法中实现)
工厂模式: 
其他了均实现接口,定义一个类专门获取实例,不是构造方法获得
适配器模式:接口定义方法,
构造方法实现此接口,方法体为空,后子类继承抽象类,有选择的复写方法
观察者模式: 要被关注的继承Obserable类,调用父类方法
super.setChanged(); super.nosuper.notifyObservers() 观察着实现
Observer接口,在update类中,判断是否是一个类,输出即可
//这些接口呢都需要用到多态性,都是 接口 接口对象 = new
子类对象(),实现向上转型,转型后可以调用子类复写父类的方法
如果需要向下转型,则调用子类自己的方法,但是需要先向上转型后, instanceof
比较对象;

//如果要进行字符串的拆分,利用split方法
Pattern p = Pattern.compile("[a-zA-Z]");
String
s[] = p.split(str);
//如果需要正则表达式来进行字符的替换,
String str =
"123231m3m123m123m123m12";
        Pattern p =
Pattern.compile("[a-zA-Z]");
        Matcher m = p.matcher(str);
       
String ss = m.replaceAll("_");
、、以上方法String都有支持的 boolean matches(String
regex); String[] split();  String replaceAll(String regex, s)

2016-08-30  星期三

时间类: SimpleDateFormat sdf = new
SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SSS");
         sdf.format(new
Date())    ;
         SimpleDateFormat sdf = new
SimpleDateFormat("yyyy-MM-dd");
         Date temp =
sdf.parse(str);
字符串拆分:
        String str = "<html xmlns=\"http://www.w3.org/1999/xhtml\">";
       
str = str.substring(str.indexOf(" ")+1, str.indexOf(">")).replaceAll("\"", "
").replaceAll("\\.", " ").replaceAll("/", " ");
字符串内输入双引号: \"
定时调度:

    Timer类:
是一种线程设施,可以定时安排一个时间,与TimerTask(实现由TImer安排的一次或重复执行的某一个任务)配合使用
IO操作:
   
File打开文件--> 字节流制定位置-->读写--> 关闭流
    FIle类:文件本身操作
        boolean
createNewFile();
        boolean exists();
        boolean
isDirectory();
        String[] list();
        File[]
listFiles();
        boolean mkdir();
        boolean renameTo(File
dest);   //已有文件重新命名
    RandomAccessFile类:随机读取类(一般不用)
       
RandomAccessFile(File file, String mode)   //file路径
       
RandomAccessFile(String path, String mode)//固定路径
        close():
关闭操作
        void writeBytes(String s): 字符串写入文件
        void writeInt(jint
v)
        int read(byte[] b): 将内容读取到一个byte数组
        byte readByte():
读取一个字节
        int readInt(): 读取整数型
        int skipBytes(int
n):指针跳过多少字节
        void seek(long pos): 指针位置
   
所有数据都是已流的方式传输或保存,分字节和字符
    字节流:以byte为准,需要将字符串转为Byte数组
    
OutputStream
        OutputStream out = new
FileOutputStream(file);
        OutputStream out = new FileOutputStream(file,
true);追加内容
        String str = "\r\nHEllo world";  文件需换行,可以加\r\n
       
byte[] b = str.getBytes();
        out.write(b);
       
out.close();
     InputStream:
        int avaliable();
//取得文件大小
        int read();//以数字的方式读取
        int read(byte[] b)
;内容读取到byte数组
        InputStream input = new
FileInputStream(file);
        byte[] bb = new byte
[(int)f.length()]
        //byte[] bb = new byte[1212];
        //int len
= input.read(b);  //取出内容到byte数组,确定输出多少
       
while(input.read()!=-1)
        {
            b[len] = (byte)
temp;
            len++;
        }
        input.close();
       
System.out.println(new String(b, 0, len));
        一个字符2个字节;
    字符流:
Writer        子类:  FileWriter
        可以添加对象, Writer writer = new
FileWriter(new File(), true);
        write(String str)  字符串输出
       
write(char[] c)        字符数组输出
        flush()     强制清空缓存
           
Reader   子类 FileReader
        int read()
        int read(char[] c): 
内容读取到字符数组,返回长度
        字符的输出: new String(c, 0 ,len)
        读取字符串有2中方法:
直接从文件读取
                              for循环 读取一个字节 int len =
0;
                              int temp = 0; 
//接收每一个内容
                              while((temp =
reader.read())!=-1)
                             
{
                                c[len] =
(char)temp;
                               
len++;
                              }
       
字符流使用了缓冲区,字节流没有使用缓冲区(内存区域);
        不关闭时也将字符内容输出,可以使用Writer类的flush()方法

打印流: PrintStream() 和 字符打印流()

2016-09-03  星期六

1.Serializable(Serializable)
       
一个类的对象要想被序列化(一个对象变为2进制,方便存储和传输),就必须实现Serialiable接口,依靠ObjectOutputStream()和ObjectInputStream()
      
Java序列化的时候会产生一个序列化ID,通过JVM实现
            File file = new File("F:" +
File.separator + "hello.txt");
            OutputStream out = new
FileOutputStream(file);
            ObjectOutputStream oos = new
ObjectOutputStream(out);
            oos.writeObject(new
Person("lisi"));
            ObjectInputStream ois = new
ObjectInputStream()
            oos.close();
            InputStream input
= new FileInputStream(file);
            ObjectInputStream ois = new
ObjectInputStream(input);
            Object obj =
ois.readObject();
            ois.close();

2.
Externalizable是Serializable子类,实现此接口的可以用户自己制定被序列化的内容
       
writeExternal(ObjectOutput ot): 指定要保存的属性信息,对象序列化时调用
       
readExternal(ObjectInput in): 读取被保存的信息,反序列化用
        以上2个方法都是DataOutput 和
DataInput接口的子类
        public Person(){};
        public Person(String
name)
            {   this.name = name;  }
           
//读取属性,有一个强制转换的要求
        public void readExternal(ObjectInput
input)
            {   this.name = (String)
input.readObject();}
            //保存name属性
        public void
writeExternal(ObjectOutput output)        
            {    
output.writeObject(this.name);    }
       
一个类要使用Externalizable实现序列化,此类必须有一个无参构造方法,因为在反序列化的时候会默认调用无参构造实例对象
    3. 
transient:关键字表示对象的某一个属性不希望被序列化
    4.    序列化一组对象:
           
对象输出时只提供了writeObject(Object
obj)),并没有多对象输出,所以要实现同时序列化多个对象,就可以使用对象数组操作。
           
因为数组属于引用类型,可以用Object类型接收   
    5.    List Set(重复内容依靠hashCode() 和
equals()方法区别) Queue SortSet(对集合中的数据进行排序)       
       
List:接口
            add(int index, E element)
            addAll(int
index, Collection<? extends E> c)  添加一组元素
            E get(int
index)
            ListIterator<E> listIterator()
            E
remove(int index)
            E removeAll(Collection<?>
arg0)
            List<E> subList(int fronIndex, int
toIndex)
            E set(int index, E element)
            toArray():
集合变为对象
            size():  返回集合的长度
            get(int index):
返回当前的位置的数字
            for(int i = 0; i < allList.size();
i++)
            {
                System.out.print(allList.get[i] +
"、");
            }
        LinkedLis:链表操作类   
            addFirst(E
e );
            addList(E e);
            boolean offer();
           
E removeFirst()
        Queue:先进先出
            E element():
找到表头
            E peek()  找到不删除;
            E pool()  找到后删除; 
利用此方法先进先出输出数字
            E remove() 检索并移除表头

Set:HashSet &&  TreeSet
        HashSet:
           
无规律可循
        TreeSet:   
            有规律
           
如果是比较对象,则需要继承Comparable接口,实现CompareTo()方法
            class Person implements
Comparable<Person>//接口处定义泛型类型
            public int compareTo(Person
per) {
                if ( this.age > per.age)
               
{
                    return 1;
                }
                else
if (this.age < per.age)
                {
                    return
-1;
                }
                else
               
{
                    return 0;
                }
           
比较器操作时如果某个实现没有进行比较,则默认为是一个对象
           
如果实现了HashSet,则所有的重复对象也会继续出现,就需要复写Object类的equals()方法和hashCode()方法,一个对象编码表示一个对象
       
SortedSet:    TreeSet继承SortedSet
            SortedSet<String> set =
new TreeSet<String>();
            first();  last();
           
SortedSet<E> headSet(E element):开始到指定位置
            SortedSet<E>
tailSet(E element):指定到最后
        //可以用get()方法输出数字
       
Iterator:
            Iterator iter = list.iterator();
       
ListIterator:
            由前向后: hasNext() && next()
           
有后向前: 利用hasPrevious()方法由前向后判断,用previous取出元素
            set() 和 add()
可以更改和添加元素
            foreach输出:
                for (类 对象: 集合) {};
for(String str: all)

Map:HashMap &&
TreeMap
            put(Object key, Object obj): 添加数据
            get():
根据key值取得value的值
                Map<String, String> map = new
HashMap<String, String>();
                Set<String> keys =
map.keySet();
                Iteration key =
keys.iterator();
                while(key.hasNext())
               
{
                    String str = key.next();
                   
System.out.println(map.get(str));//根据key 取值
               
}
                map.get(iter.next())
            containKey():
判断指定的key是否存在
            keySet():
将一个Map中的key变为Set集合,然后利用Iterator输出
            values():
返回Collection,注意定义泛型类型
                Collection<String> col =
map.values();
                Iteration valus =
col.iterator;
                while(values.hasNext()){};
           
Map接口注意事项:
                1.
不能直接使用迭代输出Map中的全部内容,因为Map存放的是一对值,Iterate只能每次找到一个值,如果非要迭代输出,则必须:
                   
1> Map实例通过entrySet()方法变为Set接口对象
                    2>
通过Set接口实例化Iterator、
                    3>
Iterator迭代输出,每一个ie内容都是Map.Entry的对象
                    4> 通过Map.Entry进行
key --> value分离
                   
(Map中的每对数据都是通过Map.Entry保存的,所以也是Map.Entry输出)
                    Map<String
,String> map = null;
                    map = new HashMap<String,
String>();
                    map.put("04122077",
"吕峰涛");
                    map.put("04122076", "吕峰");
               
`    Set<Map.Entry<String, String>> set = 
map.entrySet();
                    Iterator<Map.Entry<String,
String>> iter = set.iterator();
                   
while(iter.hasNext())
                    {
                       
Map.Entry<String, String> me = iter.next();
                       
System.out.print( me.getKey() + "--> "    + me.getValue()    +
"\t");
                    }           
            SortedMap:
排序接口,实现此类都是排序的子类,例如TreeMap
                Comparator<? super K>
comparator();
                K firstKey();  K lastKey();
               
SortedMap<k, V> subMap(K fromKey, K endKey)
               
SortedMap<K, V> tailMap<K fromKey):  返回大于指定key的部分集合
           
Collection:
                addAll(): 为一个集合增加内容 Collection.addAll("ARRAY",
"BufferedReader");
                reserve():
               
binarySearch(): 返回内容位置
                sort(); 排序
                swap():
交换我ie之

Stack: 先进先出
                push:
进站
                pop: 出战
                int search(Object o):
在战中查找
            Properties:
                new
Property().setProperty("key", "value");
                store(OutputStream
out, String comment, String encoding);
                list(PrintStream out):

                loadFromXML(InputStream in):
               
storeToXML(OutputStream out)

2016-09-05  星期一

1. Class类方法
        Class<?> forName(String Name): 传入完整"包.类",
实例化Class对象
        c1 = Class.forName("com.huawei.ftl.X");
       
System.out.println("类名称:  " + c1.getName());
       
也可以通过类.class或者对象.getClass()实力化Class类
       
实例化后可以通过newInstance()实例化对象,注意转换类型
        per = (Person)
c.newInstance();
        (以上注意一点,就是类中必须由无参构造方法)
        Construtor[]
getConstructor: 得到类中所有的构造方法
        Field[] getDeclaredFields():
得到继承来的类
        Class[] getInte

2016-09-10  星期六     JavaWeb

HTML注释语句: <!-注释语言->
    1. JS的事件处理: body (onLoad()="start()"
onUnload()="stop()" onClick="fun()")
                   
onSubmint():事件在提交之前先验证
                    onCHange(): 变化
           文本处理:
var value = document.form.content.value;
                   
//精确到具体的name值,然后取值,否则为空
           
    2.3.3Window对象
        
window.location: 定位到对应网页
         window.open: 打开网页设置
         HTML:
表达式完成交互的收到,表单元素写在《form>里面
        
JavaScript是基于对象的语言,function是函数,又返回值直接返回return即可。
     3.1 XML:
可扩展性标志语言,实现数据交换,系统配置,内容管理。
         XML语言是以<?  ?> 开始和结束的
        
version:
         encoding:编码
         standalone: 是否独立运行,
XML声导固定格式
         <?xml-stylesheet type="text/css" href =
"attri.css"?>
         <![CADATA[里面的内容不解析]]>
     3.2 XML解析:SAX
&& DOM(文档对象模型)
         4个重要的额借口:    
            
Document:整个XML文档,根节点
             Node:每一个Node代表一个节点
            
NodeList:节点的集合
             NamedNodeMap:一组节点和其唯一名称对应关系,属性节点
            
NodeList getElementByTagNsme();取指定节点名
             Element
createElement(String tagName):创建指定名节点
        
Dom4J:利用工具来读写文件
             Document doc =
DocumentHelper.createDocument();
             Element addresslist =
doc.addElement("addresslist");
             Element linkman =
addresslist.addElement("linkman");
             Element name =
linkman.addElement("name");
             name.setText("吕峰涛");    

            OutputFormat format =
OutputFormat.createPrettyPrint();
            
format.setEncoding("GBK");

2016-09-11  星期日

1.创建目录--> WEB_INFO--> 复制WEBapps/ROOT/web.xml到虚拟目录下
       
Tomcat修改端口:conf/server.xml
          虚拟目录:复制web.xml
           
<content path="/mldn" docBase="虚拟目录地址"/>
            修改conf/web.xml
listings的false修改为true;
            2xx:请求成功
           
3xx:重定向
            403:禁止
            404:找不到文件
           
500:服务器内部错误
        Tomcat是个Web容器
        2.JSP学习
           
JSP的命名采用小写,且最终都是以*.class完成
           
request.getParameter()方法接受输入内容。

2016-09-11

1. JavaBean;一个类只包含属性,setter,getter方法
         POJO:
简单的Java对象
         VO: 专门传递值
         TO: 传递对象
    2. 数据库操作:
       
pstmt = conn.prepareStatement(sql);
        pstmt.setInt(1, tid);
       
(注意顺序,一定是先执行语句,然后设置变量)

2016-09-18

1.抽象类的使用:      Person per = new Student("lvfengtao", 12o,
99.9f);
        抽象类中定义抽象方法为public, 不用写方法体  public abstract void
say();即可;
    2.工厂模式中在工厂类中定义了一个静态方法来获取接口的实例;
        public static Fruit
getInstance(String name)
    3.代理模式; Network net = new Proxy(new
Real());           
               
    }

2016-10-02  星期日

1. 使用Dom4J 生成XML文件,XML主要是用于数据交换
           
Document创建一个DOC文档,一个文档只有一个根节点
            Element添加元素,
           
OutputFormat完成格式化,设置为中文格式。
            XMLWriter完成数据的写入
           
OutputFormat format = OutputFormat.createPrettyPrint();
            XMLWriter
writer = new XMLWriter(
                        new
FileOutputStream(
                                "G:" + File.separator +
"new2016.xml"), format );
             writer.write(doc);
            
writer.close();

2. JS操作XML
        JS点击显示文字:
           
document.getElementById("info").innerHTML =
"<h2>www.MLDNJAVA.cn</h2>" ;
        JSP注释:
           
1.<!--注释内容-->   显示注释客户端可以看见
            2.<%--注释内容--%>;   /* 
*/      //  隐式注释
        Scriptlet:3种方式
            1.<%  %> :
定义局部变量
              <%!%>: 全局变量,类,方法
              <%=%>: 
输出一个变量
            2.标签:<jsp:scriptlet>  代码块 
</jsp:scriptlet>
        Page: langua="Java" contentType="text/html"
pageEncoding="GBK"
            必须是text/html 因为conf/web.xml写了这个
           
2.错误页面显示:           
                <%@ page isErrorPage = "true"%>  
isErrorPage (注意大小写)
                <%@ page errorPage="error.jsp"%> 

                属于服务器端的跳转
        Include:包含指令:   
           
1.静态包含: <%@ include file= "" %>
           
2.动态包含:<jsp:include>:自动区分页面静态还是动态
                <jsp:include page
= "{包含文件路径 | <%=表达式%>}" flush = "true/false"/>
                   
<jsp:param name="参数名称" value="参数内容"/>
               
</jsp:include>
                静态是先包含后处理,动态是先处理后包含
        跳转:
<jsp:forward page = {""}>

2016-10-04  星期二   JSP

中文问题:
        HTML:<meta http-equiv="Content-Type"
content="text/html;
    charset= utf-8 "/>
       
REQUEST:如果获取返回的值,可以设置
           
request.setCharacterEncoding("utf-8");
    1.JSP内置对象 (9个,out,  request,
session(保存用户信息), application(所有用户的共享信息), response,
pageContext(JSP页面容器))
      4个属性:page(一个页面保存,调整失效),
               
request(只在一次 请求保持),
               
session(再一次会话范围内,任何跳转都行,新开浏览器失效),
               
application(服务器保持)
            公共方法: setAttribute(), getAttribute(),
removeAttribute(),
    2.
    page:   
       
pageContext.setAttribute("name", "吕锋涛");
        String name =
(String)pageContext.getAttribute("name");
        取得属性后要记得想下转型
   
HTTPServletRequest && ServerletRequest
    request:
表示跳转后属性继续保存,换成超链接之后失效,一次情况下服务器只会给予回应一次
        getParametervalues(String
name): 取得客户端发来的一组请求
        String method = request.getMethod();
       
String ip = request.getRemoteAddr();
        String path =
request.getServletPath();
        String contextPath =
request.getContextPath();
        Enumeration enu =
request.getHeaderNames();
        角色验证
    HTTPServletResponse &&
ServerletResponse
    response:对客户的的请求回应(HTML跳转 &&
sendRedirectict)
        addCookie(Cookie cookie)
        setHeader(String
name, String value) //
            response.setHeader("refresh",2)
2秒刷新一次
            response.setHeader("refresh",2; URL="hello.html")
2秒刷新后跳转页面,客户端跳转
            <META HTTP-EQUIV="refresh"
CONTNT="3";URL="hello.html">
        sendRedirectict(String
location)客户端调整
        <jsp:forward> &&
sendRedirectict:
           
JSP是服务器段跳转,跳抓后地址不变,客户端跳转会导致地址变化
               
服务器端跳转时立刻的,客户端是执行万页面后跳转
       
操作Cookie:让服务器端的技术保存在客户端,火灾客户端执行数据处理,提高了网页的速率,减少了服务器的运载,安全性差。
   
javax.servlet.http.HttpSession       
    session:
一次设置,与设置页面相关就保存属性,可以通过超链接。新打开浏览器失效
       
主要用于登陆和注销操作,每一个session对象都表示不同的访问用户
        getId(),
       
getCreation():
        getLastAccessedTime():
        isNew():
       
invalidate()://让session失效
        Enumeration getAttributeNames():
       
获取用户时间:getCurrentTIme();
        登陆程序:通过sessio保存方法; 使用Cookie保存信息;
通过表单隐藏域保存信息; 通过地址重写保存信息
    application:保存属性到服务器
       
getRealPath():
        getContextPath():取得当前虚拟路径名称
       
配置虚拟目录:<Context path="/mldn" docBase="D:/mldn">
总结一下:
    1.
request.setCharacterEncoding("GBK");  设置为中文格式。
    <meta
http-equiv="Content-Type" content="text/html;
    charset= utf-8
"/>
    2. this.getServletContext().getRealPath("/"); 
后去虚拟目录对应的真是目录
        request.getContextPath(); //获取虚拟目录对应目录
    3.
PrintStream ps = new PrintStream(new FileOutputStream(file));  设置输出流
,输出到文件
        ps.println(content);
       ps.close();
      
//但凡IO操作必然涉及异常处理以及IO流的关闭
    4. Scanner scanner = new Scanner(new
FileInputStream(file));  不明到底有多少的时候用StringBuffer;
         
scanner.useDelimiter("\n");
          StringBuffer buf = new
StringBuffer();
    5. response.setHeader("refresh", "2;URL=login.jsp"); 
定时跳转
        <META HTTP-EQUIV="refresh"
CONTENT="3";URL="request_demo_02.html">HTML定时跳转
       
session.invalidate();   用户失效
        session.getAttribute("userid");
获取属性
        session.getId(); 和Cookie一样
    6.  Cookie c[] =
request.getCookies();  至少1个
        <%=c[i].getName()%> ---> 
<%=c[i].getValue()%>
        **inst: getParametervalues用星号其区别;
   
7.  <jsp:param name="uname" value="<%=name%>"/>  传递参数:
       
get && post区别:
            get:提交后的内容会显示在地址栏,post不会
           

    pageContext: response等设置的都可以在pageContext完成。
       
pageContext.forward("hello.jsp"?info="hell0");  传递参数可以直接传递
        String
info = pageContext.getRequest().getParameter("info");
   
config的配置需要在web.xml文件中配置

2016-10-05  星期三   JavaBean;

1. JavaBean;一个类只包含属性,setter,getter方法
         POJO:
简单的Java对象
         VO: 专门传递值
         TO:
传递对象,远程传输时必须继承Serialization
        所有的类放入一个包,声明为public class,
属性封装,至少有一个无参构造方法
        <jsp:useBean id = "sim" scope="page"
class="com.huawei.ftl.SimpleBean"/>
        <jsp:setProperty
property="*" name="sim"/> name是实例化对象名称,pro="*" 自动匹配
    2. 三目运算:  return
value  == null?"":value;

2016-10-22       星期六

1. <script language = "javascript">  js 是小写
           
用onsubmit()方法的时候一定是 return validate(this)
            JS 中
判断值得方法是:
            DOM4J XMLWriter 和SAXReader解读

2017-01-01    星期日

1.  Java中sleep和wait的区别


这两个方法来自不同的类分别是,sleep来自Thread类,和wait来自Object类。
sleep是Thread的静态类方法,谁调用的谁去睡觉,即使在a线程里调用b的sleep方法,实际上还是a去睡觉,要让b线程睡觉要在b的代码中调用sleep。

锁:
最主要是sleep方法没有释放锁,而wait方法释放了锁,使得其他线程可以使用同步控制块或者方法。
sleep不出让系统资源;wait是进入线程等待池等待,出让系统资源,其他线程可以占用CPU。一般wait不会加时间限制,因为如果wait线程的运行资源不够,再出来也没用,要等待其他线程调用notify/notifyAll唤醒等待池中的所有线程,才会进入就绪队列等待OS分配系统资源。sleep(milliseconds)可以用时间指定使它自动唤醒过来,如果时间不到只能调用interrupt()强行打断。
Thread.sleep(0)的作用是“触发操作系统立刻重新进行一次CPU竞争”。

使用范围:wait,notify和notifyAll只能在同步控制方法或者同步控制块里面使用,而sleep可以在任何地方使用。
  
synchronized(x){
      x.notify()
     //或者wait()
  
}