精华内容
下载资源
问答
  • 什么是JSDocJSDoc是一个根据javascript文件中注释信息,生成JavaScript应用程序或库、模块的API文档 的工具。你可以使用他记录如:命名空间,类,方法,方法参数等。类似JavaDoc和PHPDoc。现在很多编辑器或IDE中还...

    什么是JSDoc

    JSDoc是一个根据javascript文件中注释信息,生成JavaScript应用程序或库、模块的API文档 的工具。你可以使用他记录如:命名空间,类,方法,方法参数等。类似JavaDoc和PHPDoc。现在很多编辑器或IDE中还可以通过JSDoc直接或使用插件生成智能提示。从而使开发者很容易了解整个类和其中的属性和方法,并且快速知道如何使用,从而提高开发效率,降低维护成本。

    使用JSDoc

    JSDoc本质是代码注释,所以使用起来非常方便,但是他有一定的格式和规则,只要了解这些,那么后面的事情,比如生产文档,生成智能提示都可以通过工具来完成。

    JSDoc注释

    JSDoc注释一般应该放置在方法或函数声明之前,它必须以/ **开始,以便由JSDoc解析器识别。其他任何以/*,/***或者超过3个星号的注释,都将被JSDoc解析器忽略。例如一下代码:

    /**

    * Book类,代表一个书本.

    * @constructor

    * @param {string} title - 书本的标题.

    * @param {string} author - 书本的作者.

    */

    function Book(title, author) {

    this.title=title;

    this.author=author;

    }

    Book.prototype={

    /**

    * 获取书本的标题

    * @returns {string|*}

    */

    getTitle:function(){

    return this.title;

    },

    /**

    * 设置书本的页数

    * @param pageNum {number} 页数

    */

    setPageNum:function(pageNum){

    this.pageNum=pageNum;

    }

    };

    JSDoc注释标签

    看了上面的代码注释是不是一目了然呢,获取你会疑惑上面以@开头的标签是什么意思。

    在JSDoc 注释有一套标准的注释标签,一般以@开头。这里解释一下每个标签的意思。

    关于别名

    因为JSDoc也经历好几个版本,所以考虑向后兼容,所以存在别名,另一个方面,别名对于一部分人来说更加直观。

    比如@param有两个别名:

    @arg

    @argument

    关于别名详细说明可以查看上面描述。

    JSDoc注释标签的使用

    展开全文
  • JAVA初级小知识

    2018-06-19 22:40:54
    弄清楚什么是JAVAJDK是开发JAVA程序的一种工具包,JRE是运行JAVA的环境,JVM是JAVA虚拟机,JDK包含了JRE,JRE包含了JVM 不区分操作系统,程序不用改变都能运行,因为JAVA的虚拟机JVM,JVM类似于翻译可以使不同的...

    弄清楚什么是JAVA
    JDK是开发JAVA程序的一种工具包,JRE是运行JAVA的环境,JVMJAVA虚拟机,JDK包含了JRE,JRE包含了JVM

     不区分操作系统,程序不用改变都能运行,因为JAVA的虚拟机JVM,JVM类似于翻译,可以使不同的系统都能运行JAVA。

    使用notepad++

    写完命令要记得保存

    用cmd编译运行
    注释分类1 单行注释 //  可嵌套   2 多行注释  /*  不可嵌套*/
    关键字有特殊含义的被保留的不能随意使用的字符
    关键字的特征完全小写的字母, 在增强版本的记事本当中(比如notepad++)有特殊颜色
    几个常见的关键字Public  class  static  void
    标识符程序当中自定义的名称(类或方法,变量的名称)
    标识符的组成规则和注意事项
    规则: 可以包含英文字母,0-9数字,美元符号和下划线——
    不能以数字开头
    不能是关键字
    注意: 类名规范-首写字母大写,后面的每个单词首写字母都要大写
               变量名规范-首字母小写,后面每个单词字母大写
               方法名规范-同变量名
    启动命令提示符(cmd)方法

    1. WIN+R -- 输入cmd --回车

    2.按住shife键桌面鼠标右击-在此处打开cmd命令

    (win10系统)按住shife键桌面鼠标右击-在此处打开powershell命令--输入start cmd-回车打开cmd命令窗口

    切换盘符:盘符名称:---回车(如D:-回车)

    进入盘中JAVA文件夹:cd JAVA\授课视频\双元视频

    cd 文件夹:进入文件夹

    cd.. :退出当前文件夹--最多退出到盘符

    在曾经用过的命令之间切换  上键  下键  选中需要额-回车

    返回根目录:CD\--回车

    查看文件夹内容:dir--回车

    清空屏幕 cla--回车

    退出cmd :exit--回车

    JAVAC 文件夹名.java :编译java类型的文件夹

    JAVA  文件夹名      :运行java类型的文件夹

    定义字符串 String 

    定义字符   char   赋值

    程序编译   javac 文件名.java

    程序运行   java  文件名

    输出字符常量(char)需要加单引符号    ''

    输出字符串常量(String)需要加双引符号  ""

    注意事项:

    1字符串不是基本类型 而是引用类型

    2浮点型可能只是一个近似值,并非精确的值

    3数据范围和字节数不一定相关,例如FLOAT数据范围比long更广泛,单字节没有long长

    4默认是double非要用float则加上一个后缀L

    byte short int long  float double char boolean  

    变量

    变量:程序运行期间,内容可以发生改变的量

    变量的生命周期:(作用域)(作用范围)

    数据类型 变量名称---创建了一个变量

    变量名称 = 数据值----放入值

    定义变量

    一步到位的格式

    数据类型 变量名称=数据值

    案例

    完整代码不要忘记{ }要完整

     

    public class 文件名{

    public static void main(String[] args){

    System.out.println(输出内容);

    }

    }

    单精度和双精度取值范围弄清楚(float  double)

    开发环境用稳定的不是最新的

    计算机能识别的进制是二进制(逢二进一)

    二进制B

    八进制Q

    十进制D

    十六进制H

    JAVA中写数字的时候,如果是以0b开头,那么此时JAVA默认为是二进制数字

    JAVA中写数字的时候,如果是以0开头,那么此时JAVA默认为是八进制数字

    JAVA中写数字的时候,如果是以0x开头,那么此时JAVA默认为是十六进制数字

    进制转化比较简单--位权

    计算机存储单元是1024

    Byte

    KB

    MB

    GB

    TB

     

    JDK (开发)> JRE (运行写好的JAVA代码)> JVM(虚拟机-跨平台)

    安装JAV软件建议

    路径不要放在系统盘

    安装目录不要包含中文及空格

     

    JAVA是跨平台的,但是虚拟机不是跨平台的

    安装JDK要根据自己的计算机系统来安装不同的版本

     

    程序开发步骤

    编写代码

    编译代码javac 文件名.java(包含后缀名)

    运行代码(Hello World!!!)java 文件名(不包含后缀名)---cmd

     

    关键字:有特殊意义的被保留的单词

    main是主方法的方法名,不是关键字

    public:

    类名:类是JAVA中最小的组成单元

    JAVA是由一个又一个类组成的

     

    双引号:在JAVA中双引号不仅仅是一个简单的引号是有特殊含义的,字符串开头和字符串结尾,碰到第一个双引就是开头,最近的那个就是结尾.可以用转义符号\.例如"\"L LOVE YOU"\",输出为"L LOVE YOU"

    \:转义字符,改变距离他最近的那个字符的原本的意思,变成了简简单单的双引号


    展开全文
  • java环境搭建.docx

    2020-03-26 14:12:12
     java开发工具。 JDK包含JRE,我们直接安装JDK就可以了。   安装JDK 从oracle官网下载对应的JDK安装包(不要安装到中文目录,最好安装到c盘)。     JDK是通过命令行来使用的。   JDK目录 bin...
  • JAVA上百实例源码以及开源项目

    千次下载 热门讨论 2016-01-03 17:37:40
     用JAVA开发的一个小型的目录监视系统,系统会每5秒自动扫描一次需要监视的目录,可以用来监视目录中文件大小及文件增减数目的变化。 Java日期选择控件完整源代码 14个目标文件 内容索引:JAVA源码,系统相关,日历,...
  • 从JDK5开始,Java增加了对元数据的支持,也就是Annotation(即注解也被翻译注释)。 这里的Annotation和普通的注释有一定的区别,它是...而代码分析工具、开发工具和部署工具可以通过这些补充信息进行验证或者...

    从JDK5开始,Java增加了对元数据的支持,也就是Annotation(即注解也被翻译为注释)。

    这里的Annotation和普通的注释有一定的区别,它是代码中的特殊标记,这些标记可以在编译、类加载或者运行时被读取,并执行相应的处理。通过这样的注解,可以帮助开发人员在不改变原有的逻辑的情况下,在源文件中补充一些信息。而代码分析工具、开发工具和部署工具可以通过这些补充信息进行验证或者进行部署。

    Annotation可以用来为程序元素(类、方法、成员变量等)设置元数据,值得一提的是,它不会影响代码的执行。

    Java提供了5个基本Annotation的用法——使用Annotation时要在其前面增加@符号,并把该Annotation当成一个修饰符来使用。

    5个基本的Annotation如下:

    1. @Override
    2. @Deprecated
    3. @SuppressWarnings
    4. @SafeVarargs
    5. @FunctionalInterface

    @Override

    @Override用来指定子类必须覆盖父类的方法

    public class Fruit {
        public void info(){
            System.out.println("Fruit");
        }
    }
    class Apple extends Fruit{
        @Override
        public void info(){
            System.out.println("Apple");
        }
    }

    编译上面的程序,可能丝毫看不出@Override的用处所在,因为它的作用是告诉编译器检查这个方法,保证父类要包含一个被该方法重写的方法,否则会编译出错。

    使用@Override可以避免开发人员不小心将info方法写成了inf0方法,这样的低级错误可能会成为后期排错时的巨大障碍。

    @Deprecated

    @Deprecated用来表示某个程序元素(类、方法等)已经过时,当其他程序使用已经过时的类或者方法时,编译器将会给出警告。

    @SuppressWarnings

    @SuppressWarnings指示由它修饰的程序元素以及该元素中的所有子元素取消显示指定的编译器警告。

    @SuppressWarnings(value="all")
    public class Fruit {
        public static void main(String[] args){
            Fruit.info();
        }
        @Deprecated
        public static void info(){
            System.out.print("Fruit");
        }
    }

    参考上面的代码,当使用了“@SuppressWarnings(value=”all”)”之后,编译器会取消使用了已经被弃用的方法的警告。value变量的值为你希望抑制的警告。

    “堆污染”警告与@SafeVarargs

    List ls = new ArrayList<Integer>();
    ls.add(20);//添加元素时会引发unchecked警告
    //下面的代码会引发“未经检验的转换”的警告,但是编译、运行时完全正常
    List<String> list = ls;
    //但是只要访问其中的元素,下面代码就会引起运行时异常
    System.out.print(list.get(0));

    Java将引发这种错误的原因称为“堆污染”。当把一个不带泛型的对象赋给一个带泛型的对象时,往往就会产生这种“堆污染”。

    class UnSafeVarargs
    {
        static <T> T[] foo(T... args) {
            return args;
        }
        
        static <T> void bar(T... args) {
            for(T x : args) {
                System.out.print(x);
            }
        }
    }

    考虑上面这段程序,编译器会在方法定义处提示“Possible heap pollution from parameterized vararg type”。这是因为对于形参的个数可变且又是泛型时,当后续的代码依赖于传入的args中的每个元素的话,它是安全的。如果后续的代码依赖于args整体是T类型的数组的话,它将是不安全的。因为其中的元素可能是整型,也可能是字符串。程序会尝试将它转换成一个T类型的数组并且失败。

    因此上面的两个方法中,前者是不安全的,后者是安全的。

    在有些时候,开发者不希望看到这个“堆污染”的警告,那么就可以使用以下三种方式来抑制这个警告:

    1. 使用@SafeVarargs修饰引发该警告的方法或者构造器
    2. 使用@SuppressWarnings(“unchecked”)修饰。
    3. 编译时使用-Xlint:varargs选项

    显然第三种方式很少用到,通常选择前两种,尤其是第一种,因为它是专门为抑制“堆污染”警告而提供的。

    @FunctionalInterface

    如果接口中只有一个抽象方法(可以包括多个默认方法或者多个static方法),该接口就是函数式接口。@FunctionalInterface就是用来指定某个接口必须是函数式接口的。

    如果使用了@FunctionalInterface的接口不是函数式接口,那么编译就会出错。它和@Override一样,都是为了帮助程序员避免一些低级错误的。

    转载于:https://www.cnblogs.com/AmosH/p/10220542.html

    展开全文
  • Java目录监视器源程序 9个目标文件 内容索引:JAVA源码,综合应用,目录监视 用JAVA开发的一个小型的目录监视系统,系统会每5秒自动扫描一次需要监视的目录,可以用来监视目录中文件大小及文件增减数目的变化。...
  • Java2核心技术第7版全两卷.pdf中文高清

    千次下载 热门讨论 2012-09-14 14:22:28
    2.1 安装java开发工具箱 2.2 选择开发环境 2.3 使用命令行工具 2.4 使用集成开发环境 2.5 使用文本编辑器编译并运行程序 2.6 运行图形化应用程序 2.7 建立并运行applet 第3章 java基本的程序设计结构 ...
  • 其实把注释翻译一遍就可以懂个七七八八的了 打开Thread类 线程是程序中的执行线程。java虚拟机允许应用程序有多个线程并发执行。每个线程都有优先级。优先级较高的线程是优先于优先级较低的线程执行。每个线程也...

    描述:此文仅是自己的见解,有哪里不对的地方大家请给予指点。

    环境:

    JDK1.8(其他版本可供参考)  开发工具: idea

    其实把注释翻译一遍就可以懂个七七八八的了

    打开Thread类

          线程是程序中的执行线程。java虚拟机允许应用程序有多个线程并发执行。每个线程都有优先级。优先级较高的线程是优先于优先级较低的线程执行。每个线程也可以标记为守护进程,也可以不标记为守护进程。

    每个线程都有一个用于标识的名称。多个线程可能具有相同的名称。如果在未指定名称的情况下创建一个线程,会为其默认生成一个新名称。 

    public class Thread implements Runnable {}

    通过看源码分析 Thread 类也是实现了Runnable 接口;在Thread的注释还给出了创建线程的两种方式。

    /** ------ 1. Thread常用属性 ------ **/
     
    //线程名字
    private volatile String name;
    //优先级
    private int  priority;
    //是否是守护线程
    private boolean     daemon = false;
    //将会被执行的Runnable.
    private Runnable target;
    //所属的线程组
    private ThreadGroup group;
    //当前线程的指定栈大小,如果线程的创建者不指定大小,那默认值就是0
    //对这个数如何进行操作取决于JVM,有些JVM会忽略掉这个参数
    private long stackSize;
    //线程id
    private long tid;
    //用来生成thread ID
    private static long threadSeqNumber;
    //标识线程状态,默认是线程未启动
    private int threadStatus = 0;
    //得到下个thread ID
    private static synchronized long nextThreadID() {
    	return ++threadSeqNumber;
    }
    //当前线程附属的ThreadLocal,而ThreadLocalMap会被ThreadLocal维护)
    ThreadLocal.ThreadLocalMap threadLocals = null;
    // 主要作用:为子线程提供从父线程那里继承的值
    //在创建子线程时,子线程会接收所有可继承的线程局部变量的初始值,以获得父线程所具有的值
    //如果一个子线程调用 InheritableThreadLocal 的 get() ,那么它将与它的父线程看到同一个对象
    ThreadLocal.ThreadLocalMap inheritableThreadLocals = null;
    //为java.util.concurrent.locks.LockSupport.park提供的变量
    volatile Object parkBlocker;
    //阻塞器锁,主要用于处理阻塞情况
    private volatile Interruptible blocker;
    //阻断锁
    private Object blockerLock = new Object();
    //线程的最低优先级
    public final static int MIN_PRIORITY = 1;
    //线程的默认优先级
    public final static int NORM_PRIORITY = 5;
    //线程的最高的优先级
    public final static int MAX_PRIORITY = 10;

    继续看一下 Thread 类的构造器

    /** Thread构造器 */
    // 无参构造
    public Thread() {
        init(null, null, "Thread-" + nextThreadNum(), 0);
    }
    // 用Runnable作为参数的构造器
    public Thread(Runnable target) {
        init(null, target, "Thread-" + nextThreadNum(), 0);
    }
    Thread(Runnable target, AccessControlContext acc) {
        init(null, target, "Thread-" + nextThreadNum(), 0, acc, false);
    }
    public Thread(ThreadGroup group, Runnable target) {
        init(group, target, "Thread-" + nextThreadNum(), 0);
    }
    public Thread(String name) {
        init(null, null, name, 0);
    }
    public Thread(ThreadGroup group, String name) {
        init(group, null, name, 0);
    }
    public Thread(Runnable target, String name) {
        init(null, target, name, 0);
    }
    public Thread(ThreadGroup group, Runnable target, String name) {
        init(group, target, name, 0);
    }
    public Thread(ThreadGroup group, Runnable target, String name,
                  long stackSize) {
        init(group, target, name, stackSize);
    }

    每个构造器都是调用了  init()  方法:创建线程就是在这个方法里完成的(非常重要)

    /**
         * 初始化线程。
         *
         * @param 线程组
         * @param 目标对象的run()方法被调用
         * @param 命名新线程的名称
         * @param stack size新线程所需的堆栈大小,或
         *        零表示该参数将被忽略
         * @param acc要继承的AccessControlContext,或
         *          AccessController.getContext()为空
         * @param inheritThreadLocals如果{@code true},则继承
         *          构造线程的可继承线程局部变量
         */
        private void init(ThreadGroup g, Runnable target, String name,
                          long stackSize, AccessControlContext acc,
                          boolean inheritThreadLocals) {
            //线程名不能为空
            if (name == null) {
                //线程名称为空则抛出空指针异常
                throw new NullPointerException("name cannot be null");
            }
            //设置线程名
            this.name = name;
     
            Thread parent = currentThread();
            //获得系统的安全管理器
            SecurityManager security = System.getSecurityManager();
            if (g == null) {
                /* Determine if it's an applet or not */
                /* If there is a security manager, ask the security manager
                   what to do. */
                //安全检查
                if (security != null) {
                    g = security.getThreadGroup();
                }
     
                /* If the security doesn't have a strong opinion of the matter
                   use the parent thread group. */
                //设置线程组
                if (g == null) {
                    g = parent.getThreadGroup();
                }
            }
     
            /* checkAccess regardless of whether or not threadgroup is
               explicitly passed in. */
            g.checkAccess();
     
            /*
             * Do we have the required permissions?
             */
            if (security != null) {
                if (isCCLOverridden(getClass())) {
                    security.checkPermission(SUBCLASS_IMPLEMENTATION_PERMISSION);
                }
            }
            //记录线程组未启动线程个数
            g.addUnstarted();
            this.group = g;
            //是否守护线程
            this.daemon = parent.isDaemon();
            this.priority = parent.getPriority();
            if (security == null || isCCLOverridden(parent.getClass()))
                this.contextClassLoader = parent.getContextClassLoader();
            else
                this.contextClassLoader = parent.contextClassLoader;
            this.inheritedAccessControlContext =
                    acc != null ? acc : AccessController.getContext();
            //线程执行体
            this.target = target;
            setPriority(priority);
            if (inheritThreadLocals && parent.inheritableThreadLocals != null)
                // 为子线程提供从父线程那里继承的值
                this.inheritableThreadLocals =
                        ThreadLocal.createInheritedMap(parent.inheritableThreadLocals);
            /* Stash the specified stack size in case the VM cares */
            this.stackSize = stackSize;
     
            /* Set thread ID */
            /* 设置线程id */
            tid = nextThreadID();
        }

    调用  start()  :使线程可运行状态(这里会调用 start0 本地方法),当分配到CPU时间片段时可以执行

        /**
         * 使此线程开始执行;Java虚拟机
         * 调用此线程的  run  方法
         * <p>
         * 结果是两个线程同时运行
         * 当前线程(从调用 start() 方法和另一个线程(它执行
         *
         *   run()  方法)
         * <p>
         * 多次启动线程是不合法的。
         * 注意,线程一旦完成就不能重新启动
         * @see        #run()
         * @see        #stop()
         */
        public synchronized void start() {
            /**
             * 线程状态校验,线程必须是0即新建态才能启动
             * 一次以上调用会抛出异常:IllegalThreadStateException
             */
            if (threadStatus != 0)
                throw new IllegalThreadStateException();
     
            //通知线程组当前线程即将执行,同时线程组中未启动线程数-1
            //线程组会做一些统计的操作
            group.add(this);
     
            boolean started = false;
            try {
                //调用本地方法
                //使线程进入可执行(runnable状态)的状态
                start0();
                started = true;
            } finally {
                try {
                    if (!started) {
                        //启动失败后,修改线程组未启动线程数+1
                        group.threadStartFailed(this);
                    }
                } catch (Throwable ignore) {
                    /* do nothing. If start0 threw a Throwable then
                      it will be passed up the call stack */
                }
            }
        }
        
        //本地方法
        //start0()会新运行一个线程,新线程会调用run()方法
        private native void start0();

    1. run()  方法

     start0()会新运行一个线程,新线程会调用run()方法(yej)

    @Override
    public void run() {
        if (target != null) {
            target.run();
        }
    }

    2. 线程真正退出前执行一些清理工作

    private void exit() {
        if (group != null) {
            group.threadTerminated(this);
            group = null;
        }
        /* Aggressively null out all reference fields: see bug 4006245 */
        target = null;
        /* Speed the release of some of these resources */
        threadLocals = null;
        inheritableThreadLocals = null;
        inheritedAccessControlContext = null;
        blocker = null;
        uncaughtExceptionHandler = null;
    }

     

    展开全文
  • JAVA 正则表达式

    热门讨论 2010-01-15 11:16:37
    正则表达式是一种可以用于模式匹配和替换的强有力的工具,一个正则表达式就是由普通的 字符(例如字符 a 到 z)以及特殊字符(称为元字符)组成的文字模式,它描述在查找文 字主体时待匹配的一个或多个字符串。...
  • Java EE常用框架.xmind

    2020-06-19 16:08:35
    这种方法会将WebService翻译Java类,我们使用类一样去访问WebService就行了。非常好用。 三、除了调用别人发布的webService,也可以自己发布WebService服务 四、CXF框架可以与spring无缝连接,就不用我们...
  • CodeChecker是建立在工具链上的静态分析基础结构,取代了Linux或macOS(OS X)开发环境中的 。 CodeChecker已移植到Python3! 没有计划提供Python2支持。 所需的最低Python3版本是3.6。 旧的虚拟环境需要删除! :...
  • 尽管Java是Android的主要开发语言,但Google意识到,作为一个游戏平台,Android要想取得成功,非常需要混合Java/C开发,正因如此,他们发布了NDK。Google逐渐认识到,为其他移动平台(如iPhone)编写的本地游戏非常...
  • 心得27--JDK新特性11-注解

    千次阅读 2012-09-21 14:19:27
    1. JDK5.0以上的版本引入了一项新特性:Annotation,中文翻译成注解,是用来为程序元素(类、方法、成员变量等)设置说明和解释的一种元数据,Java开发和部署工具可以读取这些注解,并以某种形式处理这些注解。...
  • 其实把注释翻译一遍就可以懂个七七八八的了 打开Thread类 线程是程序中的执行线程。java虚拟机允许应用程序有多个线程并发执行。每个线程都有优先级。优先级较高的线程是优先于优先级较低的线程执行。每个线程也...
  • 01 AQS解析 文档解析

    2020-09-03 16:33:18
    Java为我们提供了一系列的可用于并发编程的同步组件,利用这些可以简化我们的开发,而要了解这些组件,AQS是一个无法绕开的话题。 AQS全称AbstractQueuedSynchronizer,翻译过来就是抽象队列化的同步器,我们必须要...
  • 浏览器开发工具的秘密 Chrome 开发者工具中文手册 Chrome扩展开发文档 Grunt中文文档 gulp中文文档 Gulp 入门指南 移动Web前端知识库 正则表达式30分钟入门教程 前端开发体系建设日记 移动前端开发收藏夹 JSON风格...
  • Apache Hive: 是基于Hadoop的一个数据仓库工具可以将结构化的数据文件映射为一张数据库表,通过类SQL语句快速实现简单的MapReduce统计,不必开发专门的MapReduce应用,十分适合数据仓库的统计分析 笔记 Hive篇 ...
  • 本书为中南大学精品教材立项项目,分为上下两篇共21章,涵盖了面向对象技术中Java开发环境配置、程序设计基础、面向对象原理以及UML的知识。本书使用的开发环境是JDK 1.6+Eclipse 3.3+Rational Rose 2003,逐步引领...
  • C#微软培训资料

    2014-01-22 14:10:17
    <<page 1>> page begin==================== 目 目目 目 录 录录 录 第一部分 C#语言概述.4 第一章 第一章第一章 第一章 .NET 编 编 ... 比尔....这一天 微软公司正式推出了其下一代...
  • 1.5.4 MySQL客户软件开发库(Connector/ODBC、Connector/J等)的商用许可证 12 1.5.5 PHP项目的客户许可证问题——F(L)OSS特例 12 1.5.6 MySQL软件的版本名称 13 1.5.7 MySQL软件的技术支持合同 14 1.6 MySQL...
  • ✅ PHP中文站:最专业的PHP资源网站:PHP教程, PHP中文手册, PHP开发工具, PHP框架文档大全!- 更多介绍 2020年7月23号添加 功夫熊猫(北京) - Github ✅ 名校讲座: 收集发布北京上海等地名校的公开讲座,让更...
  • asp.net知识库

    2015-06-18 08:45:45
    在.NET 2.0中,让你的组件也可以绑定 .NET20 一种简单的窗口控件UI状态控制方法 翻译MSDN文章 —— 泛型FAQ:最佳实践 Visual C# 3.0 新特性概览 C# 2.0会给我们带来什么 泛型技巧系列:如何提供类型参数之间的转换 ...
  • C#微软培训教材(高清PDF)

    千次下载 热门讨论 2009-07-30 08:51:17
    C#--微软.NET的第一语言 本书着重介绍语言本身,比较少涉及应用,不错的入门书,从头讲起,不怕不明白。 <<page 1>> page begin==================== 目 目目 目 录 ... 比尔.... 2000 年 6 月 ...
  • Go 开发工具 1. Vim MacVim + vim-go Golang 开发环境搭建-Vim 篇 by Tonybai 2. 文本编辑器 + 插件 Visual Studio Code、Sublime Text 3、Atom VSCode 插件列表(欢迎大家补充): 插件名称 插件描述 Git...

空空如也

空空如也

1 2
收藏数 35
精华内容 14
关键字:

java开发工具可以翻译注释

java 订阅