java学习20天总结7-31到8-4

周一,时间,Math,File。枚举

package lianxi20170805Datatime;

import java.text.Format;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.MissingFormatArgumentException;

public class Shijian {

    public static void main(String[] args) throws Exception {
        Date a = new Date();//new时,需要导入import java.util.Date这个包
        System.out.println(a);
        long b=a.getTime();//getTime()表示的是从1970年1月1日开始到现在的毫秒数
        long c=a.getTime();
        long t=c-b;        //通过时间相减可以得到时间差
        
        System.out.println(t);
        System.out.println(a.getDate());//表示现在几号
        System.out.println(a.getDay());//表示今天星期几
        System.out.println(a.getMonth());//表示月份减一   ,现在八月,显示7
        System.out.println(a.getYear()+1900);//getyear表示的是从1900到现在的时间,所以需要加上1900,才是现在的年份
        //时间转字符串
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");//时间格式化形式,创建一个对象
                                         //Oracle类里面时间格式(“yyyy-mm-dd hh24:mi:ss”)
        String f = sdf.format(a);    //对象去调用方法.format(),返回一个字符串f,输出f
        System.out.println(f);  
         SimpleDateFormat sddf = new SimpleDateFormat("yyyy/MM/dd hh:mm:ss");
        String ss = sddf.format(a);
        System.out.println(ss);
        //字符串转时间
        String dsd="2017-10-18 15:17:56";//字符串要定义时间格式
        SimpleDateFormat nsdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");//simpledateformat遵循String定义的格式
        Date ssss = nsdf.parse(dsd);  //调用parse方法,将字符串转为时间格式。
        System.out.println(ssss);
        
        //**********************************************************************************************
        /***
         * 接下来是calendar
         * calendar是抽象类,用于获取某个特别时间
         *
         *
         */
        Calendar ca=Calendar.getInstance();//抽象类只能用单例获取,
        Date da = ca.getTime();  //对象调用方法,获取的是当前时间
        System.out.println(da);
        ca.set(2017, 9, 15 );    //设置时间
        System.out.println(ca.getTime());//输出时间
        
        Math用的比较少,主要是他的PI,以及Math.random()来获取[0,1)的随机数。
        
        
    }
}

****************************************************************************

File文件类,方法比较多

File a=new File("地址");  地址一般指方向,表明你要在哪动手。

方法主要有:exit(),  表明文件是否存在  isFile()  判断是否是文件   idDirectory()  判断是否是文件夹    

getPath()    得到相对路径            getAbsolutePath()得到相对路径            getName() 得到文件名字

  Delete()       删除文件       CreatNewFile()    创造新的文件夹       length()得到文件的大小

对应的练习有这些

package lianxi20170805Datatime;

import java.io.File;
import java.io.IOException;



public class FileDemo {
/**
 * 这是文件类
 * @throws IOException
 */
    
    public static void main(String[] args) throws IOException {
    //File a=    new File("d:/ggg/abc.txt");
        
        File file = new File("d:/ggg");   //创建一个文件对象,并说明在哪里创建
        File file2 = new File("d:/ser.txt");
        System.out.println(file.getPath());  //得到文件的相对路径
        File[] s = file.listFiles();   //得到文件的所有文件名,并以数组的方式存放
        for(File ff:s){
            
            System.out.println(ff);   ///遍历循环,输出文件名
        }
        File f3 = new File("d:/ssd");
        f3.mkdirs();
        f3=new File("d:/ssd/123.txt");
        f3.createNewFile();
       /* File f3 = new File("d:/a/b");//创建一个对象 ,指明路径
        
        f3.mkdirs(); //创建相对应的文件夹
        f3 = new File("d:/a/b/123.txt");//指明要创建文件
        f3.createNewFile();     //创建文件
*/
        
        //*********************************
        //展现文件
        File ssds=new File("d:/eclipse");
         run(ssds);
        
    }
    //展现某路径下的全部文件
    public static void run(File f){
        if(null!=f){
            if(f.isDirectory()){
                File[] fis = f.listFiles();
                for(File ff:fis){
                    run(ff);
                    
                }
                
                
            }else{
                //如果是文件,输出文件路径
                String s = f.getAbsolutePath();
                System.out.println(s);
                        
            }         
        }    
    }
}

========================================================================================枚举

package lianxi20170805Datatime;

public enum EnumDemo {

    nan, nv

}

package lianxi20170805Datatime;

/**
 * 练习枚举 1它是一个类,在同包的EnumDemo里面,只能定义常量,
 *
 * @author 27639
 *
 */
public class Student {

    public EnumDemo sex; // 定义属性时,需要用枚举的类名来定义

    public static void main(String[] args) {

        Student s = new Student();
        s.sex = EnumDemo.nv; // 枚举赋值时,需要用类名.属性来赋值

    }

}












周二,集合框架ArrayList   LinkedList     HashSet    TreeSet

package lianxi20170805Datatime;
/**
 * 集合list,方法的使用,要导入ArrayList包
 */
import java.util.ArrayList;
import java.util.Iterator;



public class ArraylistDemo {
 String name;
 int age;
 EnumDemo sex;
public ArraylistDemo(String name, int age, EnumDemo sex) {
    this.name = name;
    this.age = age;
    this.sex = sex;
}
    public static void main(String[] args) {
        //定义对象
        ArraylistDemo a1 = new ArraylistDemo("zhangsan ", 18, EnumDemo.nan);
        ArraylistDemo a2 = new ArraylistDemo("zhangsan2 ", 18, EnumDemo.nan);
        ArraylistDemo a3 = new ArraylistDemo("zhangsan3 ", 18, EnumDemo.nan);
        ArraylistDemo a4 = new ArraylistDemo("zhangsan4", 18, EnumDemo.nan);
     //用集合构建对象
        ArrayList<ArraylistDemo> a=new     ArrayList<ArraylistDemo>();
        //a.add(),添加元素,可以是混合的,也可以是单一的,在<>里面定义,
        a.add(a1);
        a.add(a2);
        a.add(a3);
        a.add(2, a4);
        System.out.println(a.size());//输出集合的元素个数
        for(int i=0;i<a.size();i++){  //遍历
            
            System.out.println(a.get(i).toString());//输出,由于是混合的,所以重写了toString 方法
            
        }
        //************************************************
        for(ArraylistDemo sd:a){            //用foreach循环
            System.out.println(sd);
            
            
        }
        
        
        //***************************************
    //    迭代器遍历,用对象a,调用迭代方法---a.iterator(),ctrl+1--完善。
        //用迭代器来循环,可以添加元素
        Iterator<ArraylistDemo> it = a.iterator();
        while(it.hasNext()){   //当集合指针后面还有下一个时,继续
//            if(it.next().equals(sb)){    可以通过判断条件来对集合进行添加元素
//                a.add(c);                 foreach和for循环都有局限性,容易变成死循环
//            }                                因为改变了集合的个数,可能会有下标越界和条件一直满足,从而死循环的可能
            System.out.println(it.next());  //输出指针后面的元素
            
            
        }
    //  
        
        
        
    }
    @Override
    public String toString() {
        return "ArraylistDemo [name=" + name + ", age=" + age + ", sex=" + sex
                + "]";
    }
    
    
    
    
    
    
}

=====================================

LinkedList

方法主要有3个,增,删,改

增----offerFirst()在头部增加,offerLast()在尾部增加


删---pollFirst() ----- 删除第一个     polllast()--删除最后一个

获取-------peekFirst   获取第一个   peekLast   获取最后一个





set接口(唯一,无序)

package lianxi20170805Datatime;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map.Entry;
import java.util.Set;


public class MapDemo {

    String name;  //定义属性
    int age;
    String home;
    //构造方法
    public MapDemo(String name, int age, String home) {
        this.name = name;
        this.age = age;
        this.home = home;
    }

    public static void main(String[] args) {
        MapDemo m1 = new MapDemo("小花", 18, "henan");
        //构造对象
        MapDemo m2 = new MapDemo("小嗐", 18, "henan");
        MapDemo m3 = new MapDemo("小还", 18, "henan");
 /*  ArrayList<MapDemo> a1 = new    ArrayList<MapDemo>();
   a1.add(m1);
   a1.add(m2);
   a1.add(m3);*/
   //使用HashMap存储对象
        HashMap<String,MapDemo> hm = new HashMap<String,MapDemo>();
        hm.put(m1.name, m1);     //添加元素用对象.put()添加对象,并且确定其Key的内容,以及value的内容
        hm.put(m2.name, m1);
        hm.put(m3.name, m1);
        MapDemo m = hm.get("小还");  //用get,通过key来调取value的值,暂时用这个比较低级的方法
        System.out.println(m);
        System.out.println("******************三种遍历方式***************************");
        Collection<MapDemo> cc = hm.values();
        System.out.println("方法一");
        for(MapDemo e:cc){
            System.out.println(e);
        }
        
        System.out.println("方法二");
        Set<String> kk = hm.keySet();
        for(String s:kk){
            MapDemo md = hm.get(s);
            System.out.println(md);
        }
        System.out.println("方法三");
        Set<Entry<String, MapDemo>> en = hm.entrySet();
        for(Entry<String, MapDemo> sss:en){
            System.out.println(sss.getValue());
            
  }      
    }

    @Override
    public String toString() {
        return "MapDemo [name=" + name + ", age=" + age + ", home=" + home
                + "]";
    }
}


周四 

文本文件的读写

     用Fileinputstream和FileOutputStream读写文本文件

     用BufferedReader和BuffererWriter读写文本文件

二进制文件的读写

    使用DataInputStream和DataOutPutstream读写二进制和基本数据类型文本文件

  对象的读写

   使用Object Input Stream和objectOutputStream读写文件(序列化和反序列化)

package lianxi20170805Datatime;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;

public class FileInputStreamDemo {

    
    
    
    @SuppressWarnings("resource")
    public static void main(String[] args) throws Exception {
    
           FileInputStream fis = new FileInputStream("e:/我的青春谁做主.txt");
           int len=0;                                
          byte b[]= new byte[1024];                //定义数组,以数组的形式读取文件内容
           while((len=fis.read(b))!=-1){           //当读取的内容为空的时候,返回-1,循环结束
               
               System.out.println(len);            //返回内容的字节数
               System.out.println(b);              //输出内容的地址
               System.out.println(new String(b));  //将数组的内容转为字符串
           }
           
           
           fis.close();
        FileOutputStream fot = new   FileOutputStream("e:/我的青春谁做主.txt");  //在哪里写入
           
           String s="我是苏离";             //定义字符串
           fot.write(s.getBytes());        //s.getBytes()
           fot.write("我来自离山".getBytes());  //上面两步合为一部
           fot.close();
      
           System.out.println("**************将一个文件从一个盘拷贝到另一个盘***************************************");
           
           FileInputStream nfit = new FileInputStream("e:/我的青春谁做主.txt");
           File ff = new File("c:/fdd/");  //先指明要写入的路径,c:/fdd/ 是为了写好文件夹
           if(!ff.exists()){              //判断文件夹是否存在
               ff.mkdirs();               //如果不存在,那么创造一个
           }
           ff=new File("c:/fdd/o.txt");    //指明文件的路径
           if(!ff.exists()){               //判断文件是否存在
               
               ff.createNewFile();        //不存在的化,创造一个
           }                                 
                                //在这里,一定要这样写不能一次写完,否则会出现拒绝访问,或者找不到文件异常
           FileOutputStream nfos = new FileOutputStream(ff);
           int le=0;
           byte c[]=new byte[1024];
           while((le=nfit.read(c))!=-1){        //读的流程
               nfos.write(c);                    //由于有写入的流,所以在读取的时候,可以直接写入
               
           }
           
           nfos.close();                      
           nfit.close();                      //关流
           
           System.out.println("**************FileReader的用法********************************");
           
           FileReader fr = new FileReader("e:/我的青春谁做主.txt"); //构造方法没什么不同,但是这是字节流
           int lenn=0;
           char cc[]=new char[1024];                       //最小单位是字节,所以读的的2048个字节,用来读汉子比较合适
           StringBuffer sb=new StringBuffer();   //字符缓冲,在循环里面最好不要用String,占内存,StringBuffer更合适
           while((len=fr.read(cc))!=-1){
               sb.append(cc);                  
               
               
           }
           System.out.println(sb);
           fr.close();
           System.out.println("***************FileReader进化版,BufferReader**********************************************");
           FileReader nfr = new FileReader("e:/我的青春谁做主.txt");
           BufferedReader bf = new BufferedReader(nfr);
           String sss=null;
           while((sss=bf.readLine())!=null){
               
               System.out.println(sss);
               
           }
           
           System.out.println("*****************FileWriter写入*************************************");
           
           FileWriter fw = new FileWriter("e:/我的青春谁做主.txt");
           fw.write("苏离走了");
           fw.flush();
           fw.close();
           
           System.out.println("******************FileWriter进化版********************************************");
           

           FileWriter nfw = new FileWriter("e:/我的青春谁做主.txt");
           BufferedWriter nbw = new BufferedWriter(nfw);
           nbw.write("wo苏离又回来了");
           nbw.flush();
           nbw.close();
           nfw.close();          
    }      
}

周五,线程

主要讲的是创造线程的基本方法,有两个

一。继承Thread,





二,实现runnable接口,(这是一个买票的问题,解决了可能因为多线程带来的麻烦。)

package zhengze;

public class Ticket implements Runnable{

	int a=5;
	
	@Override
	public synchronized void  run() {
		if(a>0){
			System.out.println("还有"+a+"张票");
			a--;
		}else{
			System.out.println("票卖完了");
		}
		
	}
	
	public static void main(String[] args) throws InterruptedException {
		Ticket b=new Ticket();
		Thread d=new Thread(b);
		d.start();
		Thread s=new Thread(b);
		s.start();
		new Thread(b).start();
		new Thread(b).start();
		new Thread(b).start();
		Thread.sleep(1000);
		new Thread(b).start();
		
		
	}
	























  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值