• Java单例模式总结

    Java单例模式总结

    前言:单例模式是设计模式中常用的一种模式。 在系统中我们有时候希望只有一个实例,不希望创建多个实例。

    创建单例模式的注意要点:

    1. 构造函数私有化。 将构造函数私有化,使得用户不能自行创建实例,在C++中还要将拷贝构造函数和赋值函数私有化。
    2. 提供一个自身的静态私有成员变量。 提供私有的静态成员变量,用于存储唯一的实例。当使用到时,返回给用户。
    3. 提供一个公有的静态工厂方法。 公有的静态工厂方法,使得用户可以访问到唯一的实例。因为不能实例化,所以必须提供静态的类方法。

    具体的单例模式的实现包括两种,分别为饿汉式和懒汉式,饿汉式是在加载单例类时,就将自己实例化。 懒汉式是将单例类的实例化延迟到使用单例类时,在这时就必须使用同步化机制进行控制。 如果从速度性能来说,饿汉式是比懒汉式好的,因为在饿汉式(EagerSingleton)中只是做了简单的将引用返回,而懒汉式(LazySingleton)使用了synchronized关键字,但是饿汉式(EagerSingleton)无法控制类的实例化时间。 所以说这两种有利有弊,有么有能结合两种方法的方法呢? 回答是肯定的,在Singleton类中创建一个静态内部类SingletonHolder(在holder中new 一个StaticSingleton的实例),将单例的实例化交给内部类实现,当使用StaticSingleton时,getInstance()方法只是将内部类所持有的外部类实例返回,这样一来既保证了在使用单例类时对单例类进行创建,有使得getInstance()方法不用使用synchronized关键字,降低访问效率。

    在Java中的Runtime类中就使用了饿汉式单例模式,由于Java的类加载机制,保证在使用类之前对静态变量只初始化一次,所以饿汉式不需要加锁,就是多线程安全的。 下面就是Java.lang.Runtime类(从源码中截取):

    public class Runtime {
     private static Runtime currentRuntime = new Runtime();
    
     /**
     * Returns the runtime object associated with the current Java application.
     * Most of the methods of class <code>Runtime</code> are instance
     * methods and must be invoked with respect to the current runtime object.
     *
     * @return the <code>Runtime</code> object associated with the current
     * Java application.
     */
     public static Runtime getRuntime() {
     return currentRuntime;
     }
    
     /** Don't let anyone else instantiate this class */
     private Runtime() {}
     //省略其余代码
    }

    下面分别给出两个的实现:

    饿汉式:

     public class EagerSingleton {
     private static EagerSingleton instance = new EagerSingleton();
     private EagerSingleton(){}
     public static EagerSingleton getInstance()
     {
     return instance;
     }
    }

    懒汉式:

     public class LazySingleton {
     private static LazySingleton instance = null;
     private LazySingleton(){}
     public static synchronized LazySingleton getInstance()
     {
     if(null==instance)
     instance = new LazySingleton();
     return instance;
     }
    }

    既能控制实例化时间,又有饿汉式的性能:

     public class StaticSingleton {
     private static class SingletonHolder
     {
     private static StaticSingleton instance = new StaticSingleton();
     }
     private StaticSingleton(){}
     public static StaticSingleton getInstance()
     {
     return SingletonHolder.instance;
     }
    }

    在这里给出的三个单例模式都是线程安全的。只有第二个使用的同步方法。synchronized方法。也可以使用其他加锁方法,这里synchronied是最简单的。

    本人水平有限,如有错误请指出,转载请注明出处。

  • 关于Java内存泄漏的测试

    关于Java内存泄漏的测试

    前言:由于之前面试的时候被面试官问道关于Java内存泄漏的问题,而自己的回答很不好。 所以打算在这里对Java的内存泄漏进行总结,以及测试。首先要肯定一点虽然Java中有垃圾收集器(GC),但是不代表GC可以回收掉所有的你不会使用的对象。 所以Java是存在内存泄漏的。

    内存泄漏:内存泄漏是由于疏忽的原因导致动态申请的内存空间没有释放,而无法释放那部分空间。 具体在Java中:1.是GC认为对象不是垃圾,不应该回收;2.对象是无用的,不会使用到这个对象。

    下面给出一个Java内存泄漏的例子:

    Vector v = new Vector(10);
    for(int i=0;i<10;i++)
     {
      Object o = new Object();
      v.add(o);
      o=null;
     }

    在这个例子中,即使o置为null,但是Vector还持有是个object的引用,所以我们无法对object操作。而且,也无法释放object。

    所以要避免Java内存泄漏,我们还需要了解一些关于垃圾收集器(GC)的知识。 垃圾回收有两种形式,一种是引用计数算法,另一种是可达性分析算法(引用对象遍历)。Java采用的是后者,因为引用计数法无法处理循环引用的问题。

    引用计数算法:每个对象都会有一个计数来记录有多少指向它的引用,当引用增加是,数值增加,引用减少,数值减少。 当数值为0时,就会被标记成垃圾进行回收。

    可达性分析算法:通过GC Roots的对象作为起点,我们可以将线程对象作为起始节点,从这些节点开始向下搜索,所有能够到达的点都是有效对象,GC不会回收这些节点,所以根节点不可到达的,会被标记成垃圾,然后被清理掉。


    例子实测:

    在下面,我写了一个测试例子,例子中有两个类丈夫和妻子。分别实例化了两个对象,A丈夫、B丈夫、A妻子和B妻子。 在main中,我将A丈夫和A妻子互相引用。 B丈夫B妻子没有互相引用。分别在三个不同的地方调用GC。 第一次初始化完四个实例,没有将引用置为空。第二次将引用置为空。第三次,将引用置为空,且内存不足的情况下。

     

    package cn.hekind.forcount;
    
    public class TestForCount {
    
     static class Husband
     {
     Wife mywife;
     String name;
     
     Husband(){}
     Husband(String name)
     {
     this.name=name;
     System.out.println("new a husband:"+name);
     }
     @Override
     protected void finalize() throws Throwable {
     // TODO Auto-generated method stub
     super.finalize();
     System.out.println("husband:"+name+" dead");
     }
     }
     static class Wife
     {
     Husband myhusband;
     String name;
     
     Wife(){}
     Wife(String name)
     {
     this.name=name;
     System.out.println("new a wife:"+name);
     }
     @Override
     protected void finalize() throws Throwable {
     // TODO Auto-generated method stub
     super.finalize();
     System.out.println("wife:"+name+" dead");
     }
     }
     
     public static void main(String[] args) {
     // TODO Auto-generated method stub
     TestForCount.Husband jack = new Husband("A");
     Wife rose = new Wife("A");
     jack.mywife=rose;
     rose.myhusband=jack;
     
     Husband liming = new Husband("B");
     Wife hanmm = new Wife("B");
     /*
     System.out.println("-----call gc1-----");
     Runtime.getRuntime().gc();
     System.out.println("------------------");
     */
     
     jack=null;
     rose=null;
     liming=null;
     hanmm=null;
     /*
     System.out.println("-----call gc2-----");
     Runtime.getRuntime().gc();
     System.out.println("------------------");
     */
    
     for(int i=0;i<1024*1024;i++)
     new Integer(0);
     
     System.out.println("-----call gc3-----");
     Runtime.getRuntime().gc();
     System.out.println("------------------");
     }
    
    }

    三次的输出结果分别如下:

    第一次:由于存在引用,所以没有回收。

    new a husband:A
    new a wife:A
    new a husband:B
    new a wife:B
    -----call gc1-----
    ------------------

    第二次:由于不再使用它们,并且调用gc建议垃圾回收,所以回收了它们。

    new a husband:A
    new a wife:A
    new a husband:B
    new a wife:B
    -----call gc2-----
    ------------------
    wife:B dead
    husband:B dead
    wife:A dead
    husband:A dead

    第三次:因为内存不足,在调用gc调用前发生了垃圾回收,并且把四个都会收掉了(包括循环引用)。

    new a husband:A
    new a wife:A
    new a husband:B
    new a wife:B
    wife:B dead
    husband:B dead
    wife:A dead
    husband:A dead
    -----call gc3-----
    ------------------

    本人水平有限,如有错误请指出,转载请注明出处。

  • Java模拟售票系统—[00.初级售票系统]

    Java模拟售票系统—[00.初级售票系统]

    前言:学了一段时间的Java,我打算用Java写一个模拟售票系统,当然这个系统只是简单的模拟。 开始我会写一个比较初级的简单的模拟售票系统,然后在以后的文章里会不断对系统进行升级,改进。


    package cn.hekind.ticketing;
    
    import java.util.concurrent.locks.ReentrantLock;
    import java.util.Date;
    
    public class Main {
     // 售票站点,线程类
     // 使用的重入锁
     static class Ticket implements Runnable {
     static int ticketNum = 100;
     static private final ReentrantLock lock = new ReentrantLock(true);
     static int nextTicket = 100;
    
     private int stationID;
    
     Ticket(int stationID) {
     this.stationID = stationID;
     }
    
     @Override
     public void run() {
     while (true) {
     lock.lock();
     if (this.nextTicket <= 0) {
     System.out.println("station:" + this.stationID + " no ticket,shutdown! less:0");
     lock.unlock();
     break;
     }
     try {
     System.out.println("station:" + this.stationID + " sold ticket:" + this.nextTicket + " less:"
     + (--this.nextTicket) + " time:" + new Date());
     } finally {
     lock.unlock();
     }
     }
     }
    
     }
    
     public static void main(String[] args) {
     new Thread(new Ticket(1)).start();
     new Thread(new Ticket(2)).start();
     new Thread(new Ticket(3)).start();
     new Thread(new Ticket(4)).start();
     new Thread(new Ticket(5)).start();
     }
    
    }

    在这里呢,模拟售票线程(Ticket)采用嵌套类来实现,并且是继承自Runnable接口。 也可以直接通过Main类继承自Thread类或者Runnable接口。 Run()方法中,写了一个死循环,进行购票,如果还有票,就购买一张,否则,输出无票,退出。 关键区域由重入锁ReentrantLock来保证,ReentrantLock(true)构造的是一个公平的锁,所以结果是按顺序售票的。

    在main函数中,创建了5个线程,分别代表五个不同的站点,然后启动,进行模拟售票。

    输出结果如下:

    station:1 sold ticket:100 less:99 time:Tue Apr 04 09:10:44 CST 2017
    station:2 sold ticket:99 less:98 time:Tue Apr 04 09:10:44 CST 2017
    station:3 sold ticket:98 less:97 time:Tue Apr 04 09:10:44 CST 2017
    station:4 sold ticket:97 less:96 time:Tue Apr 04 09:10:44 CST 2017
    station:5 sold ticket:96 less:95 time:Tue Apr 04 09:10:44 CST 2017
    station:1 sold ticket:95 less:94 time:Tue Apr 04 09:10:44 CST 2017
    station:2 sold ticket:94 less:93 time:Tue Apr 04 09:10:44 CST 2017
    station:3 sold ticket:93 less:92 time:Tue Apr 04 09:10:44 CST 2017
    station:4 sold ticket:92 less:91 time:Tue Apr 04 09:10:44 CST 2017
    station:5 sold ticket:91 less:90 time:Tue Apr 04 09:10:44 CST 2017
    station:1 sold ticket:90 less:89 time:Tue Apr 04 09:10:44 CST 2017
    station:2 sold ticket:89 less:88 time:Tue Apr 04 09:10:44 CST 2017
    station:3 sold ticket:88 less:87 time:Tue Apr 04 09:10:44 CST 2017
    station:4 sold ticket:87 less:86 time:Tue Apr 04 09:10:44 CST 2017
    station:5 sold ticket:86 less:85 time:Tue Apr 04 09:10:44 CST 2017
    station:1 sold ticket:85 less:84 time:Tue Apr 04 09:10:44 CST 2017
    station:2 sold ticket:84 less:83 time:Tue Apr 04 09:10:44 CST 2017
    station:3 sold ticket:83 less:82 time:Tue Apr 04 09:10:44 CST 2017
    station:4 sold ticket:82 less:81 time:Tue Apr 04 09:10:44 CST 2017
    station:5 sold ticket:81 less:80 time:Tue Apr 04 09:10:44 CST 2017
    station:1 sold ticket:80 less:79 time:Tue Apr 04 09:10:44 CST 2017
    station:2 sold ticket:79 less:78 time:Tue Apr 04 09:10:44 CST 2017
    station:3 sold ticket:78 less:77 time:Tue Apr 04 09:10:44 CST 2017
    station:4 sold ticket:77 less:76 time:Tue Apr 04 09:10:44 CST 2017
    station:5 sold ticket:76 less:75 time:Tue Apr 04 09:10:44 CST 2017
    station:1 sold ticket:75 less:74 time:Tue Apr 04 09:10:44 CST 2017
    station:2 sold ticket:74 less:73 time:Tue Apr 04 09:10:44 CST 2017
    station:3 sold ticket:73 less:72 time:Tue Apr 04 09:10:44 CST 2017
    station:4 sold ticket:72 less:71 time:Tue Apr 04 09:10:44 CST 2017
    station:5 sold ticket:71 less:70 time:Tue Apr 04 09:10:44 CST 2017
    station:1 sold ticket:70 less:69 time:Tue Apr 04 09:10:44 CST 2017
    station:2 sold ticket:69 less:68 time:Tue Apr 04 09:10:44 CST 2017
    station:3 sold ticket:68 less:67 time:Tue Apr 04 09:10:44 CST 2017
    station:4 sold ticket:67 less:66 time:Tue Apr 04 09:10:44 CST 2017
    station:5 sold ticket:66 less:65 time:Tue Apr 04 09:10:44 CST 2017
    station:1 sold ticket:65 less:64 time:Tue Apr 04 09:10:44 CST 2017
    station:2 sold ticket:64 less:63 time:Tue Apr 04 09:10:44 CST 2017
    station:3 sold ticket:63 less:62 time:Tue Apr 04 09:10:44 CST 2017
    station:4 sold ticket:62 less:61 time:Tue Apr 04 09:10:44 CST 2017
    station:5 sold ticket:61 less:60 time:Tue Apr 04 09:10:44 CST 2017
    station:1 sold ticket:60 less:59 time:Tue Apr 04 09:10:44 CST 2017
    station:2 sold ticket:59 less:58 time:Tue Apr 04 09:10:44 CST 2017
    station:3 sold ticket:58 less:57 time:Tue Apr 04 09:10:44 CST 2017
    station:4 sold ticket:57 less:56 time:Tue Apr 04 09:10:44 CST 2017
    station:5 sold ticket:56 less:55 time:Tue Apr 04 09:10:44 CST 2017
    station:1 sold ticket:55 less:54 time:Tue Apr 04 09:10:44 CST 2017
    station:2 sold ticket:54 less:53 time:Tue Apr 04 09:10:44 CST 2017
    station:3 sold ticket:53 less:52 time:Tue Apr 04 09:10:44 CST 2017
    station:4 sold ticket:52 less:51 time:Tue Apr 04 09:10:44 CST 2017
    station:5 sold ticket:51 less:50 time:Tue Apr 04 09:10:44 CST 2017
    station:1 sold ticket:50 less:49 time:Tue Apr 04 09:10:44 CST 2017
    station:2 sold ticket:49 less:48 time:Tue Apr 04 09:10:44 CST 2017
    station:3 sold ticket:48 less:47 time:Tue Apr 04 09:10:44 CST 2017
    station:4 sold ticket:47 less:46 time:Tue Apr 04 09:10:44 CST 2017
    station:5 sold ticket:46 less:45 time:Tue Apr 04 09:10:44 CST 2017
    station:1 sold ticket:45 less:44 time:Tue Apr 04 09:10:44 CST 2017
    station:2 sold ticket:44 less:43 time:Tue Apr 04 09:10:44 CST 2017
    station:3 sold ticket:43 less:42 time:Tue Apr 04 09:10:44 CST 2017
    station:4 sold ticket:42 less:41 time:Tue Apr 04 09:10:44 CST 2017
    station:5 sold ticket:41 less:40 time:Tue Apr 04 09:10:44 CST 2017
    station:1 sold ticket:40 less:39 time:Tue Apr 04 09:10:44 CST 2017
    station:2 sold ticket:39 less:38 time:Tue Apr 04 09:10:44 CST 2017
    station:3 sold ticket:38 less:37 time:Tue Apr 04 09:10:44 CST 2017
    station:4 sold ticket:37 less:36 time:Tue Apr 04 09:10:44 CST 2017
    station:5 sold ticket:36 less:35 time:Tue Apr 04 09:10:44 CST 2017
    station:1 sold ticket:35 less:34 time:Tue Apr 04 09:10:44 CST 2017
    station:2 sold ticket:34 less:33 time:Tue Apr 04 09:10:44 CST 2017
    station:3 sold ticket:33 less:32 time:Tue Apr 04 09:10:44 CST 2017
    station:4 sold ticket:32 less:31 time:Tue Apr 04 09:10:44 CST 2017
    station:5 sold ticket:31 less:30 time:Tue Apr 04 09:10:44 CST 2017
    station:1 sold ticket:30 less:29 time:Tue Apr 04 09:10:44 CST 2017
    station:2 sold ticket:29 less:28 time:Tue Apr 04 09:10:44 CST 2017
    station:3 sold ticket:28 less:27 time:Tue Apr 04 09:10:44 CST 2017
    station:4 sold ticket:27 less:26 time:Tue Apr 04 09:10:44 CST 2017
    station:5 sold ticket:26 less:25 time:Tue Apr 04 09:10:44 CST 2017
    station:1 sold ticket:25 less:24 time:Tue Apr 04 09:10:44 CST 2017
    station:2 sold ticket:24 less:23 time:Tue Apr 04 09:10:44 CST 2017
    station:3 sold ticket:23 less:22 time:Tue Apr 04 09:10:44 CST 2017
    station:4 sold ticket:22 less:21 time:Tue Apr 04 09:10:44 CST 2017
    station:5 sold ticket:21 less:20 time:Tue Apr 04 09:10:44 CST 2017
    station:1 sold ticket:20 less:19 time:Tue Apr 04 09:10:44 CST 2017
    station:2 sold ticket:19 less:18 time:Tue Apr 04 09:10:44 CST 2017
    station:3 sold ticket:18 less:17 time:Tue Apr 04 09:10:44 CST 2017
    station:4 sold ticket:17 less:16 time:Tue Apr 04 09:10:44 CST 2017
    station:5 sold ticket:16 less:15 time:Tue Apr 04 09:10:44 CST 2017
    station:1 sold ticket:15 less:14 time:Tue Apr 04 09:10:44 CST 2017
    station:2 sold ticket:14 less:13 time:Tue Apr 04 09:10:44 CST 2017
    station:3 sold ticket:13 less:12 time:Tue Apr 04 09:10:44 CST 2017
    station:4 sold ticket:12 less:11 time:Tue Apr 04 09:10:44 CST 2017
    station:5 sold ticket:11 less:10 time:Tue Apr 04 09:10:44 CST 2017
    station:1 sold ticket:10 less:9 time:Tue Apr 04 09:10:44 CST 2017
    station:2 sold ticket:9 less:8 time:Tue Apr 04 09:10:44 CST 2017
    station:3 sold ticket:8 less:7 time:Tue Apr 04 09:10:44 CST 2017
    station:4 sold ticket:7 less:6 time:Tue Apr 04 09:10:44 CST 2017
    station:5 sold ticket:6 less:5 time:Tue Apr 04 09:10:44 CST 2017
    station:1 sold ticket:5 less:4 time:Tue Apr 04 09:10:44 CST 2017
    station:2 sold ticket:4 less:3 time:Tue Apr 04 09:10:44 CST 2017
    station:3 sold ticket:3 less:2 time:Tue Apr 04 09:10:44 CST 2017
    station:4 sold ticket:2 less:1 time:Tue Apr 04 09:10:44 CST 2017
    station:5 sold ticket:1 less:0 time:Tue Apr 04 09:10:44 CST 2017
    station:1 no ticket,shutdown! less:0
    station:2 no ticket,shutdown! less:0
    station:3 no ticket,shutdown! less:0
    station:4 no ticket,shutdown! less:0
    station:5 no ticket,shutdown! less:0

  • dos界面的基本字符命令简介及全称

    虽然现在图形界面很流行,但是还是在有些时候我们需要用到dos下的操作,此时掌握一些dos的基本命令显得十分重要。 本篇文章简单介绍了dos界面下的命令,并注有命令的英文全称,通过全称可以很便捷的记住命令的作用,在dos下默认是不区分大小写的,当目录名字出现空格时,可以用引号包含起来。另外win10下的cmd很好,加入了TAB键补全功能,这点是之前的所没有的。

    命令行的启动:1.启动运行,可以右键开始按钮;也可以使用快捷键win键+R。  2.输入cmd,回车。

    开始之前介绍一个有意思的命令:color,有的人说dos下的界面太难看了,尤其是黑底白字,情愿要白底的。可以右键顶端,属性修改,也可以使用命令进行修改,右键的方式我就不介绍了,在命令行下输入color F1,然后回车。就可以看到效果,F1是十六进制,分别对应了背景和字体的颜色。F亮白色,1指蓝色。  如果记不住的话,可以键入help命令,系统会输出各种命令的介绍。  在这里仅仅介绍几个基本的命令。    首先,向上箭头’↑’和向下箭头’↓’和向右箭头 回看上一次执行的命令,’Ctrl+C’ 组合键或’Break’键 中断操作,’/?’ 是个开关提示用法的(如:xcopy /?,就会输出xcopy的基本用法)。同时也可以使用color不带参数。

    CmdManColor

    命令 全称 作用(第一个为命令)

    attrib attribute修改文件属性命令
    cd change directory 改变当前的路径
    chkdsk check disk 检查磁盘使用情况
    cls clean screen 清屏
    copy copy 复制文件
    date日期设置命令
    del delete 删除文件
    deltree delete tree 删除整个目录(包括子目录)
    dir directory 显示文件和子目录
    md make directory 新建一个子目录(文件夹)
    mem memory 查看内存大小
    path path 添加程序执行路径
    rd remove directory 删除一个子目录(文件夹)
    ren rename 重命名
    tasklist 显示进程
    time系统时钟设置命令
    tree 显示磁盘目录结构命令
    type type 显示内容
    ver version查看系统版本号命令
    vol volume 显示磁盘卷标命令
    xcopy 目录复制命令
    命令详解
    (一)attrib——修改文件属性命令

    功能:修改指定文件的属性。

    CmdManAttri用法就像帮助所说,同理,如果需要查询具体命令的用法可以加上“ /?”开关,只输入attrib可以查询当前目录下的文件属性。
    (二)cd——改变当前目录

    1.功能:改变当前目录
    2.类型:内部命令
    3.格式:CD [/D] [drive:][path]
    4.使用说明:
    (1)如果省略路径和子目录名则显示当前目录;
    (2)如采用“cd\”格式,则退回到当前驱动器的根目录;
    (3)如采用“cd..”格式则退回到上一级目录。
    (4)使用 /D 命令行开关,除了改变驱动器的当前目录之外,还可改变当前驱动器。使用了/D开关可以在切换驱动器的同时切换文件夹。
    例:(1)进入到user子目录;(2)从user子目录退回到子目录;(3)返回到根目录。
    c:\>cd fox\user(进入fox子目录下的user子目录)
    c:\fox\user>cd.. (退回上一级根目录,注意cd后面跟着两个点’..’)。
    c:\fox>cd\ (返回到根目录)
    c:\
    (三)chkdsk——检查磁盘当前状态命令

    1.功能:显示磁盘状态、内存状态和指定路径下指定文件的不连续数目。
    2.类型:外部命令
    3.格式:chkdsk [盘符:][路径][文件名][/f][/v]
    4.使用说明:
    (1)选用[文件名]参数,则显示该文件占用磁盘的情况;
    (2)选[/f]参数,纠正在指定磁盘上发现的逻辑错误;
    (3)选用[/v]参数,显示盘上的所有文件和路径。
    (四)cls——清屏幕命令   clear screen的缩写,没有参数,直接键入即可。
    (五)copy文件复制命令

    1.功能:拷贝一个或多个文件到指定盘上。
    2.类型:内部命令
    3.格式:copy [源盘][路径](源文件名) [目标盘][路径](目标文件名)
    4.使用说明:
    (1)copy是文件对文件的方式复制数据,复制前目标盘必须已经格式化;
    (2)复制过程中,目标盘上相同文件名称的旧文件会被源文件取代;
    (3)文件名中允许使用通配符“*”“?”,可同时复制多个文件;
    (4)copy命令中源文件名必须指出,不可以省略。
    (5)复制时,目标文件名可以与源文件名相同,称作“同名拷贝”此时目标文件名可以省略;
    (6)复制时,目标文件名也可以与源文件名不相同,称作“异名拷贝”,此时,目标文件名不能省略;
    (7)复制时,还可以将几个文件合并为一个文件,称为“合并拷贝”,格式如下:copy;[源盘][路径]〈源文件名1〉〈源文件名2〉…[目标盘][路径]〈目标文件名〉;
    (8)利用copy命令,还可以从键盘上输入数据建立文件,格式如下:copy con [盘符:][路径]〈文件名〉;
    (9)注意:copy命令的使用格式,源文件名与目标文件名之间必须有空格!
    (六)del——删除文件命令

    CmdManDel
    使用说明:
    (1)选用/p参数,不询问是否删除。
    (2)该命令不能删除属性为隐含或只读的文件。
    (3)在文件名称中可以使用通配符。
    (七)dir——显示磁盘目录命令

    1.功能:显示磁盘目录的内容。
    2.类型:内部命令
    3.格式:dir [盘符][路径][/p][/w]
    4.使用说明:/p , 分屏幕显示文件信息。 /w的使用:加上/w只显示文件名。
    (八)md——建立子目录

    CmdMd

    1.功能:创建新的子目录
    2.类型:内部命令
    3.格式:md[盘符:][路径名]〈子目录名〉
    4.使用说明:
    (1)“盘符”:指定要建立子目录的磁盘驱动器字母,若省略,则为当前驱动器;
    (2)“路径名”:要建立的子目录的上级目录名,若缺省则建在当前目录下。
    (九)mem查看当前内存状况命令

    1.功能:显示当前内存使用的情况
    2.类型:外部命令
    3.格式:mem[/c][/f][/m][/p]
    4使用说明:
    (1)选用/c参数列出装入常规内存和cmb的各文件的长度,同时也显示内存空间的使用状况和最大的可用空间;
    (2)选用/f参数分别列出当前常规内存剩余的字节大小和umb可用的区域及大小;
    (3)选用/m参数显示该模块使用内存地地址、大小及模块性质;
    (4)选用/p参数指定当输出超过一屏时,暂停供用户查看。
    (十)path——路径设置命令

    1.功能:设备可执行文件的搜索路径,只对文件有效。
    2.类型:内部命令
    3.格式:path[盘符1]目录[路径名1]{[;盘符2:],〈目录路径名2〉…}
    4.使用说明:
    (1)当运行一个可执行文件时,dos会先在当前目录中搜索该文件,若找到则运行之;若找不到该文件,则根据path命令所设置的路径,顺序逐条地到目录中搜索该文件;
    (2)path命令中的路径,若有两条以上,各路径之间以一个分号“;”隔开;
    (3)path命令有三种使用方法:
    path[盘符1:][路径1][盘符2:][路径2]…(设定可执行文件的搜索路径) path:(取消所有路径)
    path:(显示目前所设的路径)
    (十一)rd——删除子目录命令

    1.功能:从指定的磁盘删除了目录。
    2.类型:内部命令
    3.格式:rd[盘符:][路径名][子目录名]
    4.使用说明:
    (1)子目录在删除前必须是空的,也就是说需要先进入该子目录,使用del(删除文件的命令)将其子目录下的文件删空,然后再退回到上一级目录,用rd命令删除该子目录本身;
    (2)不能删除根目录和当前目录。

    (十二)ren——文件改名命令

    1.功能:更改文件名称
    2.类型:内部命令
    3.格式:ren[盘符:][路径]〈旧文件名〉〈新文件名〉
    4.使用说明:
    (1)新文件名前不可以加上盘符和路径,因为该命令只能对同一盘上的文件更换文件名;
    (2)允许使用通配符更改一组文件名或扩展名。
    (十三)tasklist——显示进程

    1.功能:将整个计算机的进程显示出来,同任务管理器。
    2.类型:外部命令
    3.格式:tasklist
    4.使用说明:运行 cmd tasklist
    (十四)time系统时钟设置命令

    1功能:设置或显示系统时期。
    2类型:内部命令
    3格式:time[hh:mm:ss:xx]
    4使用说明:
    (1)省略[hh:mm:ss:xx],显示系统时间并提示输入新的时间,不修改则可直接按回车键,[hh:mm:ss:xx]为“小时:分钟:秒:百分之几秒”格式;
    (2)当机器开始启动时,有自动处理文件(autoexec.bat)被执行,则系统不提示输入系统日期。否则,提示输入新日期和时间。
    (十五)tree——显示磁盘目录结构命令

    1.功能:显示指定驱动器上所有目录路径和这些目录下的所有文件名。
    2.类型:外部命令
    3.格式:tree[盘符:][/f][>prn]
    4.使用说明:
    (1)使用/f参数时显示所有目录及目录下的所有文件,省略时,只显示目录,不显示目录下的文件;
    (2)选用>prn参数时,则把所列目录及目录中的文件名打印输出。
    (十六)type——显示文件内容命令

    1.功能:显示ascii码文件的内容。
    2.类型:内部命令。
    3.格式:type[盘符:][路径]〈文件名〉
    4.使用说明:
    (1)显示由ascii码组成的文本文件,对。exe.com等为扩展名的文件,其显示的内容是无法阅读的,没有实际意义2;
    (2)该命令一次只可以显示一个文件的内容,不能使用通配符;
    (3)如果文件有扩展名,则必须将扩展名写上;
    (4)当文件较长,一屏显示不下时,可以按以下格式显示;type[盘符:][路径]〈文件名〉|more,more为分屏显示命令,使用些参数后当满屏时会暂停,按任意键会继续显示。
    (5)若需将文件内容打印出来,可用如下格式:
    type[盘符:][路径]〈文件名〉,>prn
    此时,打印机应处于联机状态。

    (十七)ver查看系统版本号命令

    1功能:显示当前系统版本号
    2类型:内部命令
    3格式:ver
    (十八)vol——显示磁盘卷标命令

    1.功能:查看磁盘卷标号。
    2.类型:内部命令
    3.格式:vol[盘符:]
    4.使用说明:省略盘符,显示当前驱动器卷标。

    最后展示一下一系列dos下的操作的演示:

    1.创建一个文件夹,并显示

    2.进入该文件夹

    3.在该文件夹创建一个测试文件

    4.输出测试文件的内容

  • VMware装OS X,Mac

    前言:由于使用Xcode,所以在VMware下装os x的虚拟机,但是网上有的教程由于太零散,或者不能提供可用工具,所以很是不方便,我在安装的过程中,遇到一些问题,有解锁工具,镜像问题等。下了好几个镜像vmware都是找不到,最后经过论坛提问找到了这个懒人版镜像,经过使用,很方便,所以分享到博客,给那些需要的人,奉上启动图QQ截图20160327191745

     

    工具:vmware11,unlock工具,os x镜像

    VMware:可以从百度软件中心下载,网上有些网站可以提供盗版软件,盗版软件不可靠,有时候装不了,是软件破解 的原因。

    unlock工具:由本人上传至百度云,链接如下unlock

    os x镜像:本版本不能安装Xcode,需要在应用商店升级,如果有人有好的镜像,欢迎评论,我留替换这个链接懒人版镜像

    具体步骤:

    1. 进入任务管理器,关闭所有和vmware有关的进程2EDJ9`FIXFI(ZK2L9@5K~A3
    2. 进入百度软件中心,下载python2.7,安装
    3. 解压unlock工具,右键,以管理员身份运行“win-install.cmd”,这一步需要python2.7的环境。如果不解锁的话,vmware默认是不能安装os x的。运行之后后出现mac os的选项VDL_~6%3)T20(K_}UO9YVB8
    4. 下载os x的懒人版镜像。然后按照默认vmware安装的方式安装。
    5. 启动虚拟机是会出现问题,启动不了,需要修改配置文件,在虚拟机安装目录中有一个格式为.vmx的文件,我的虚拟机名字是OS X,所以配置文件是OS X.vmx。右键用记事本打开,在最后一行(其实哪一行没关系,最后一行比较符合习惯),添加smc.version = “0”
    6. 然后要是还是不能启动,需要在bios界面下开启虚拟化。bbe0d311728b4710bf2b69c8c1cec3fdfc03236a或者叫做Hyper-V的,设置成enable。重启。
    7. 进入虚拟机,默认会出现安装界面,按照提示进行分区即可,我安装的完操作系统,大小不到20G。分区大小自己定。

    本人水平有限,如有错误请指出,转载请注明出处。