更新时间:2018-1-7 10:34:05

更多请查看在线文集:http://android.52fhy.com/java/index.html


Hello World

文件名:HelloWorld.java

  1. public class HelloWorld {
  2. public static void main(String []args) {
  3. System.out.println("Hello World");
  4. }
  5. }

注意:

1、文件名需与类名一致,如果文件名和类名不相同则会导致编译错误

2、区分大小写

3、区分单引号双引号,双引号表示字符串

4、所有的方法名都应该以小写字母开头。如果方法名含有若干单词,则后面的每个单词首字母大写。

5、所有的Java 程序由public static void main(String []args)方法开始执行

源文件声明规则

当在一个源文件中定义多个类,并且还有import语句和package语句时,要特别注意这些规则。

  • 一个源文件中只能有一个public类
  • 一个源文件可以有多个非public类
  • 源文件的名称应该和public类的类名保持一致。例如:源文件中public类的类名是Employee,那么源文件应该命名为Employee.java。
  • 如果一个类定义在某个包中,那么package语句应该在源文件的首行。
  • 如果源文件包含import语句,那么应该放在package语句和类定义之间。如果没有package语句,那么import语句应该在源文件中最前面。
  • import语句和package语句对源文件中定义的所有类都有效。在同一源文件中,不能给不同的类不同的包声明。

类有若干种访问级别,并且类也分不同的类型:抽象类和final类等。

除了上面提到的几种类型,Java还有一些特殊的类,如:内部类、匿名类。

如何编译

  1. javac HelloWorld.java
  2. java HelloWorld

javac 命令用于将 java 源文件编译为 class 字节码文件,如: javac HelloWorld.java。

运行javac命令后,如果成功编译没有错误的话,会出现一个 HelloWorld.class 的文件。

java 命令可以运行 class 字节码文件,如: java HelloWorld。

注意:

java命令后面不要加.class。

如果含有包名,编译的时候需要给出相对路径,运行的时候需要带上包名。例如包名是test,代码在test目录下:

  1. javac test/HelloWorld.java
  2. java test.HelloWorld

Java标识符

Java所有的组成部分都需要名字。类名、变量名以及方法名都被称为标识符。

关于Java标识符,有以下几点需要注意:

所有的标识符都应该以字母(A-Z或者a-z),美元符($)、或者下划线(_)开始

首字符之后可以是任何字符的组合

关键字不能用作标识符

标识符是大小写敏感的

Java修饰符

像其他语言一样,Java可以使用修饰符来修饰类中方法和属性。主要有两类修饰符:

可访问修饰符 : default, public , protected, private

不可访问修饰符 : final, abstract, strictfp

Java变量

Java中主要有如下几种类型的变量

局部变量

类变量(静态变量)

成员变量(非静态变量)

Java注释

类似于C/C++,Java也支持单行以及多行注释。注释中的字符将被Java编译器忽略。

  1. //这是注释
  2. /**
  3. * 这是注释
  4. */

Java数组

数组是储存在堆上的对象,可以保存多个同类型变量。

Java中有数组(array)。数组包含相同类型的多个数据。下面方法声明一个整数数组:

  1. int[] a;

在声明数组时,数组所需的空间并没有真正分配给数组。可以在声明的同时,用new来创建数组所需空间:

  1. int[] a = new int[100];

这里创建了可以容纳100个整数的数组。相应的内存分配也完成了。

还可以在声明的同时,给数组赋值。数组的大小也同时确定。

  1. int[] a = new int[] {1, 3, 5, 7, 9};

使用int[i]来调用数组的i下标元素。i从0开始。

Java 基本数据类型

变量就是申请内存来存储值。也就是说,当创建变量的时候,需要在内存中申请空间。

内存管理系统根据变量的类型为变量分配存储空间,分配的空间只能用来储存该类型数据。

因此,通过定义不同类型的变量,可以在内存中储存整数、小数或者字符。

Java的两大数据类型:

  • 内置数据类型
  • 引用数据类型

内置数据类型

Java语言提供了八种基本类型。六种数字类型(四个整数型,两个浮点型),一种字符类型,还有一种布尔型。

byte:byte数据类型是8位、有符号的,以二进制补码表示的整数;最小值是-128(-27);最大值是`127`(27-1);默认值是0;byte类型用在大型数组中节约空间,主要代替整数,因为byte变量占用的空间只有int类型的四分之一;例子:

  1. byte a = 100, byte b = -50;

short:short数据类型是16位、有符号的以二进制补码表示的整数最小值是-32768(-215);最大值是`32767`(215 - 1);Short数据类型也可以像byte那样节省空间。一个short变量是int型变量所占空间的二分之一;默认值是0;例子:

  1. short s = 1000, short r = -20000;

int:int数据类型是32位、有符号的以二进制补码表示的整数;最小值是-2,147,483,648(-231);最大值是`2,147,485,647`(231 - 1);一般地整型变量默认为int类型;默认值是0;例子:

  1. int a = 100000, int b = -200000;

long:long数据类型是64位、有符号的以二进制补码表示的整数;最小值是-9,223,372,036,854,775,808(-263);最大值是`9,223,372,036,854,775,807`(263 -1);这种类型主要使用在需要比较大整数的系统上;默认值是0L;例子:

  1. long a = 100000L, Long b = -200000L;

float:float数据类型是单精度、32位、符合IEEE 754标准的浮点数;float在储存大型浮点数组的时候可节省内存空间;默认值是0.0f;浮点数不能用来表示精确的值,如货币;例子:

  1. float f1 = 234.5f;

double:double数据类型是双精度、64位、符合IEEE 754标准的浮点数;浮点数的默认类型为double类型;

double类型同样不能表示精确的值,如货币;默认值是0.0d;例子:

  1. double d1 = 123.4;

boolean:boolean数据类型表示一位的信息;只有两个取值:truefalse;这种类型只作为一种标志来记录true/false情况;默认值是false;例子:

  1. boolean one = true;

char:char类型是一个单一的16位Unicode字符;最小值是\u0000(即为0);最大值是\uffff(即为65,535);char数据类型可以储存任何字符;例子:

  1. char letter = 'A';

示例:

  1. public class PrimitiveTypeTest {
  2. public static void main(String[] args) {
  3. // byte
  4. System.out.println("基本类型:byte 二进制位数:" + Byte.SIZE);
  5. System.out.println("包装类:java.lang.Byte");
  6. System.out.println("最小值:Byte.MIN_VALUE=" + Byte.MIN_VALUE);
  7. System.out.println("最大值:Byte.MAX_VALUE=" + Byte.MAX_VALUE);
  8. System.out.println();
  9. // short
  10. System.out.println("基本类型:short 二进制位数:" + Short.SIZE);
  11. System.out.println("包装类:java.lang.Short");
  12. System.out.println("最小值:Short.MIN_VALUE=" + Short.MIN_VALUE);
  13. System.out.println("最大值:Short.MAX_VALUE=" + Short.MAX_VALUE);
  14. System.out.println();
  15. // int
  16. System.out.println("基本类型:int 二进制位数:" + Integer.SIZE);
  17. System.out.println("包装类:java.lang.Integer");
  18. System.out.println("最小值:Integer.MIN_VALUE=" + Integer.MIN_VALUE);
  19. System.out.println("最大值:Integer.MAX_VALUE=" + Integer.MAX_VALUE);
  20. System.out.println();
  21. // long
  22. System.out.println("基本类型:long 二进制位数:" + Long.SIZE);
  23. System.out.println("包装类:java.lang.Long");
  24. System.out.println("最小值:Long.MIN_VALUE=" + Long.MIN_VALUE);
  25. System.out.println("最大值:Long.MAX_VALUE=" + Long.MAX_VALUE);
  26. System.out.println();
  27. // float
  28. System.out.println("基本类型:float 二进制位数:" + Float.SIZE);
  29. System.out.println("包装类:java.lang.Float");
  30. System.out.println("最小值:Float.MIN_VALUE=" + Float.MIN_VALUE);
  31. System.out.println("最大值:Float.MAX_VALUE=" + Float.MAX_VALUE);
  32. System.out.println();
  33. // double
  34. System.out.println("基本类型:double 二进制位数:" + Double.SIZE);
  35. System.out.println("包装类:java.lang.Double");
  36. System.out.println("最小值:Double.MIN_VALUE=" + Double.MIN_VALUE);
  37. System.out.println("最大值:Double.MAX_VALUE=" + Double.MAX_VALUE);
  38. System.out.println();
  39. // char
  40. System.out.println("基本类型:char 二进制位数:" + Character.SIZE);
  41. System.out.println("包装类:java.lang.Character");
  42. // 以数值形式而不是字符形式将Character.MIN_VALUE输出到控制台
  43. System.out.println("最小值:Character.MIN_VALUE="
  44. + (int) Character.MIN_VALUE);
  45. // 以数值形式而不是字符形式将Character.MAX_VALUE输出到控制台
  46. System.out.println("最大值:Character.MAX_VALUE="
  47. + (int) Character.MAX_VALUE);
  48. }
  49. }

引用类型

引用类型变量由类的构造函数创建,可以使用它们访问所引用的对象。这些变量在声明时被指定为一个特定的类型,比如String、Employee、Pubby等。变量一旦声明后,类型就不能被改变了。

对象、数组都是引用数据类型。

所有引用类型的默认值都是null。

一个引用变量可以用来引用与任何与之兼容的类型。

例子:

  1. Site site = new Site("Runoob");

注意:8个基本类型是值类型,其他都是引用。String类型是引用类型,然而这个引用类型比较特殊,它指向一个字符串,这个字符串的值不能够改变。

Java常量

常量在程序运行时,不会被修改的量。

在 Java 中使用 final 关键字来修饰常量,声明方式和变量类似:

  1. final double PI = 3.1415927;

虽然常量名也可以用小写,但为了便于识别,通常使用大写字母表示常量。

和其他语言一样,Java的字符串常量也是包含在双引号之间的字符序列。下面是字符串型字面量的例子:

  1. "Hello World"
  2. "two\nlines"
  3. "\"This is in quotes\""

字符串常量和字符常量都可以包含任何Unicode字符。例如:

  1. char a = '\u0001';
  2. String a = "\u0001";

Java枚举

Java 5.0引入了枚举,枚举限制变量只能是预先设定好的值。使用枚举可以减少代码中的bug。

例如,我们为果汁店设计一个程序,它将限制果汁为小杯、中杯、大杯。这就意味着它不允许顾客点除了这三种尺寸外的果汁。

FreshJuiceTest.java

  1. class FreshJuice{
  2. enum FreshJuiceSize {S,M,L}
  3. FreshJuiceSize size;
  4. }
  5. public class FreshJuiceTest{
  6. public static void main(String[] args){
  7. FreshJuice juice = new FreshJuice();
  8. juice.size = FreshJuice.FreshJuiceSize.M;
  9. System.out.print(juice.size);
  10. }
  11. }

Java 空行

空白行,或者有注释的的行,Java编译器都会忽略掉。

Java 对象和类

Java作为一种面向对象语言。支持以下基本概念:

多态

继承

封装

抽象



对象

实例

方法

重载

Java中的类

通过下面一个简单的类来理解下Java中类的定义:

  1. public class Dog{
  2. String breed;
  3. int age;
  4. String color;
  5. static int a = 0;
  6. void barking(){
  7. int b;
  8. }
  9. void hungry(){
  10. }
  11. void sleeping(){
  12. }
  13. }

一个类可以包含以下类型变量:

局部变量:在方法、构造方法或者语句块中定义的变量被称为局部变量。变量声明和初始化都是在方法中,方法结束后,变量就会自动销毁。例如b

成员变量(实例变量):成员变量是定义在类中,方法体之外的变量。这种变量在创建对象的时候实例化。成员变量可以被类中方法、构造方法和特定类的语句块访问。例如breed,age,color

类变量(或静态变量):类变量也声明在类中,方法体之外,但必须声明为static类型。例如a

构造方法

每个类都有构造方法。如果没有显式地为类定义构造方法,Java编译器将会为该类提供一个默认构造方法。

在创建一个对象的时候,至少要调用一个构造方法。构造方法的名称必须与类同名,一个类可以有多个构造方法。

下面是一个构造方法示例:

  1. public class Puppy{
  2. public Puppy(){
  3. }
  4. public Puppy(String name){
  5. // 这个构造器仅有一个参数:name
  6. }
  7. //普通方法
  8. public void say(){
  9. System.out.println("hello");
  10. }
  11. }

创建对象

对象是根据类创建的。在Java中,使用关键字new来创建一个新的对象。创建对象需要以下三步:

声明:声明一个对象,包括对象名称和对象类型。

实例化:使用关键字new来创建一个对象。

初始化:使用new创建对象时,会调用构造方法初始化对象。

下面是一个创建对象的例子:

  1. public class Puppy{
  2. public Puppy(String name){
  3. //这个构造器仅有一个参数:name
  4. System.out.println("Passed Name is :" + name );
  5. }
  6. public static void main(String []args){
  7. // 下面的语句将创建一个Puppy对象
  8. Puppy myPuppy = new Puppy( "tommy" );
  9. }
  10. }

编译并运行上面的程序,会打印出下面的结果:

  1. Passed Name is :tommy

通过.符号访问实例变量和方法:

  1. myPuppy.say();

实例:

  1. public class Puppy{
  2. int puppyAge;
  3. public Puppy(String name){
  4. // 这个构造器仅有一个参数:name
  5. System.out.println("Passed Name is :" + name );
  6. }
  7. public void setAge( int age ){
  8. puppyAge = age;
  9. }
  10. public int getAge( ){
  11. System.out.println("Puppy's age is :" + puppyAge );
  12. return puppyAge;
  13. }
  14. public static void main(String []args){
  15. /* 创建对象 */
  16. Puppy myPuppy = new Puppy( "tommy" );
  17. /* 通过方法来设定age */
  18. myPuppy.setAge( 2 );
  19. /* 调用另一个方法获取age */
  20. myPuppy.getAge( );
  21. /*你也可以像下面这样访问成员变量 */
  22. System.out.println("Variable Value :" + myPuppy.puppyAge );
  23. }
  24. }

编译时如果提示:警告:编码GBK的不可映射字符

可以加编码:

  1. javac Puppy.java -encoding UTF-8
  2. java Puppy

注意本例中成员变量没有加this

this是指的对象本身,通过this可以调用本对象拥有的所有方法和属性,当然不加this也可以调用。

一般用this的情况:

当局部变量与成员变量相同名时,例如 this,x = x;this.x 是个成员变量,而x是个局部变量

在myeclipse下用this可以提示后面的方法或者成员变量

在内部类或匿名内部类中使用this来指向内部类本身

将类本省作为参数传递

Java包

包主要用来对类和接口进行分类。当开发Java程序时,可能编写成百上千的类,因此很有必要对类和接口进行分类。

使用import导入包,使用package定义包。

如果一个类定义在某个包中,那么package语句应该在源文件的首行。

如果源文件包含import语句,那么应该放在package语句和类定义之间。如果没有package语句,那么import语句应该在源文件中最前面。

例如,下面的命令行将会命令编译器载入java_installation/java/io路径下的所有类

  1. import java.io.*;

Java 修饰符

Java语言提供了很多修饰符,主要分为以下两类:

访问修饰符

非访问修饰符

修饰符用来定义类、方法或者变量,通常放在语句的最前端。

访问控制修饰符

Java中,可以使用访问控制符来保护对类、变量、方法和构造方法的访问。Java支持4种不同的访问权限。

默认的,也称为 default,在同一包内可见,不使用任何修饰符。

私有的,以 private 修饰符指定,在同一类内可见。

共有的,以 public 修饰符指定,对所有类可见。

受保护的,以 protected 修饰符指定,对同一包内的类和所有子类可见。

访问控制和继承

请注意以下方法继承的规则:

父类中声明为public的方法在子类中也必须为public。

父类中声明为protected的方法在子类中要么声明为protected,要么声明为public。不能声明为private。

父类中声明为private的方法,不能够被继承。

非访问修饰符

为了实现一些其他的功能,Java也提供了许多非访问修饰符。

static修饰符,用来创建类方法和类变量。

Final修饰符,用来修饰类、方法和变量,final修饰的类不能够被继承,修饰的方法不能被继承类重新定义,修饰的变量为常量,是不可修改的。

Abstract修饰符,用来创建抽象类和抽象方法。一个类不能同时被abstract和final修饰。如果一个类包含抽象方法,那么该类一定要声明为抽象类,否则将出现编译错误。抽象类可以包含抽象方法和非抽象方法。

Synchronized和volatile修饰符,主要用于线程的编程。Synchronized关键字声明的方法同一时间只能被一个线程访问。

继承

在Java中,一个类可以由其他类派生。如果你要创建一个类,而且已经存在一个类具有你所需要的属性或方法,那么你可以将新创建的类继承该类。

利用继承的方法,可以重用已存在类的方法和属性,而不用重写这些代码。被继承的类称为超类(super class),派生类称为子类(subclass)。

接口

在Java中,接口可理解为对象间相互通信的协议。接口在继承中扮演着很重要的角色。

接口只定义派生要用到的方法,但是方法的具体实现完全取决于派生类。

Java 运算符

计算机的最基本用途之一就是执行数学运算,作为一门计算机语言,Java也提供了一套丰富的运算符来操纵变量。我们可以把运算符分成以下几组:

算术运算符: + - * / % ++ --

关系运算符: == != > < >= <=

位运算符: & | ^ ~ << >> >>>

逻辑运算符: && || !

赋值运算符: = += -= *= /= (%)= <<= >>= &= |= ^=

其他运算符: ( ? : ) instanceOf

Java 循环结构

Java中有三种主要的循环结构:

while循环

do…while循环

for循环

while循环

while是最基本的循环,它的结构为:

  1. while( 布尔表达式 ) {
  2. //循环内容
  3. }

do…while循环

do…while循环和while循环相似,不同的是,do…while循环至少会执行一次。

  1. do {
  2. //代码语句
  3. }while(布尔表达式);

for循环

for循环执行的次数是在执行前就确定的。语法格式如下:

  1. for(初始化; 布尔表达式; 更新) {
  2. //代码语句
  3. }

Java增强for循环

Java5引入了一种主要用于数组的增强型for循环。

Java增强for循环语法格式如下:

  1. for(声明语句 : 表达式)
  2. {
  3. //代码句子
  4. }

示例:

  1. public class Test {
  2. public static void main(String args[]){
  3. int [] numbers = {10, 20, 30, 40, 50};
  4. for(int x : numbers ){
  5. System.out.print( x );
  6. System.out.print(",");
  7. }
  8. System.out.print("\n");
  9. String [] names ={"James", "Larry", "Tom", "Lacy"};
  10. for( String name : names ) {
  11. System.out.print( name );
  12. System.out.print(",");
  13. }
  14. }
  15. }

break关键字

break主要用在循环语句或者switch语句中,用来跳出整个语句块。

break跳出最里层的循环,并且继续执行该循环下面的语句。

continue关键字

continue适用于任何循环控制结构中。作用是让程序立刻跳转到下一次循环的迭代。

在for循环中,continue语句使程序立即跳转到更新语句。

在while或者do…while循环中,程序立即跳转到布尔表达式的判断语句。

Java 分支结构

顺序结构只能顺序执行,不能进行判断和选择,因此需要分支结构。

Java有两种分支结构:

if语句

switch语句

if语句

一个if语句包含一个布尔表达式和一条或多条语句。

If语句的用语法如下:

  1. if(布尔表达式)
  2. {
  3. //如果布尔表达式为true将执行的语句
  4. }

if...else语句

if语句后面可以跟else语句,当if语句的布尔表达式值为false时,else语句块会被执行。

if…else的用法如下:

  1. if(布尔表达式){
  2. //如果布尔表达式的值为true
  3. }else{
  4. //如果布尔表达式的值为false
  5. }

if...else if...else语句

  1. if(布尔表达式 1){
  2. //如果布尔表达式 1的值为true执行代码
  3. }else if(布尔表达式 2){
  4. //如果布尔表达式 2的值为true执行代码
  5. }else if(布尔表达式 3){
  6. //如果布尔表达式 3的值为true执行代码
  7. }else {
  8. //如果以上布尔表达式都不为true执行代码
  9. }

switch语句

switch语句判断一个变量与一系列值中某个值是否相等,每个值称为一个分支。

switch语法格式如下:

  1. switch(expression){
  2. case value :
  3. //语句
  4. break; //可选
  5. case value :
  6. //语句
  7. break; //可选
  8. //你可以有任意数量的case语句
  9. default : //可选
  10. //语句
  11. }

Java笔记:语法基础的更多相关文章

  1. Java笔记(基础第一篇)

    一.初识java 1.Java是一种可以编写跨平台的.面向对象的程序设计语言. Java开发分成以下3个方向: (1). java SE:主要用于桌面程序的开发.是java EE和java ME的基础 ...

  2. Java笔记(三)……基础语法

    关键字 标识符 在程序中自定义的一些名称 由26个英文字母大小写,数字:0-9,符号:_ $组成 定义合法标识符规则: 数字不可以开头. 不可以使用关键字. Java中严格区分大小写. 注意:在起名字 ...

  3. 我的Java之旅 第四课 JAVA 语言语法 基础

    1  整型           int num = 1_000_000; //从java 7开始支持的语法 ,只是让人更易读,java编绎器会去除   2  字符串        一定不能使用==运算 ...

  4. Java笔记(基础第四篇)

    Java集合类 集合类概述 Java 语言的java.util包中提供了一些集合类,这些集合类又被称为容器.常用的集合有List集合.Set集合.Map集合,其中List与Set实现了Collecti ...

  5. Java笔记(基础第三篇)

    面向对象的特点: 封装 继承 多态 类的构造方法 如果在类中定义的构造方法都不是无参的构造方法,则编译器不会为类设置一个默认的无参构造方法,当视图调用无参构造方法实例化一个对象时,编译器会报错,所以只 ...

  6. java笔记--多线程基础

    多线程技术 --如果朋友您想转载本文章请注明转载地址"http://www.cnblogs.com/XHJT/p/3889579.html  "谢谢-- 在java中实现多线程技术 ...

  7. Java笔记(基础第二篇)

    声明数组 数组元素类型 数组名字[]; 数组元素类型[] 数组名字; 分配内存空间 数组名字 = new 数组元素类型[数组元素的个数] 其中使用new关键字为数组分配内存时,数组中各个元素的初始化值 ...

  8. MOOC JAVA笔记

    MOOC JAVA笔记 1.基础了解 JDK是开发人员安装的,它提供了开发java程序的必须工具 JRE是普通用户安装的,它提供了java的运行环境 JVM是java虚拟机运行程序的核心 2.程序的移 ...

  9. Java学习笔记之---基础语法

    Java学习笔记之---基础语法 一. Java中的命名规范 (一)包名 由多个单词组成时,所有字母小写(例如:onetwo) (二)类名和接口 由多个单词组成时,所有单词首字母大写(例如:OneTw ...

  10. 《Java笔记——基础语法》

    Java笔记--基础语法       一.字符串的拼接: 例如: System.out.println(""+"");     二.换行语句: 例如: Syst ...

随机推荐

  1. 【算法】字典的诞生:有序数组 PK 无序链表

    参考资料 <算法(java)>                           — — Robert Sedgewick, Kevin Wayne <数据结构>       ...

  2. Python的字符编码

    Python的字符编码 1. Python字符编码简介 1. 1  ASCII Python解释器在加载.py文件的代码时,会对内容进行编码,一般默认为ASCII码.ASCII(American St ...

  3. form表单提交和ajax提交优先级

    form中若定义action,那么,ajax将不能执行.form默认提交的请求优先级高于ajax

  4. quzrtz的使用

    Quartz是一个大名鼎鼎的Java版开源定时调度器,功能强悍,使用方便. 一.核心概念 1.Job 表示一个工作,要执行的具体内容,此接口只有一个方法 void execute(JobExecuti ...

  5. Oracle学习笔记(7)——高级查询(1)

    在学习高级查询之前,我们先了解一下怎样查看Oracle数据库中的全部表.由于我们要使用到Oracle数据库中SCOTT用户下的几张表(这些表是Oracle数据库自带的表). 分组查询 分组函数的概念: ...

  6. Django配置session

    在settings.py文件里加入 #配置失效时间为半个小时 SESSION_COOKIE_AGE = 60*30 #关闭浏览器清除cookie SESSION_EXPIRE_AT_BROWSER_C ...

  7. [UI列表]LoopScrollRect无限滑动不卡顿

    应用场景 对于背包界面,排行榜列表,聊天消息,等有大量的UI列表的界面,常规做法是为每一条数据生成一个格子,在数据量越大的情况下,会生成越来越多的Gameobject,引起卡顿. 这篇文章讲述的就是解 ...

  8. Mybatis中的模糊查询

    今天下午做的一个功能,要用到模糊查询,字段是description,刚开始我的写法用的是sql中的模糊查询语句, 但是这个有问题,只有将字段的全部值传入其中,才能查询,所以不是迷糊查询. 后来经过搜索 ...

  9. linux使用freetds 连接连远程服务器sqlservser2012

    1.下载:freetds-patched.tar.gz  http://www.freetds.org/software.html http://www.freetds.org/userguide/c ...

  10. Vagrant安装完lnmp后,配置linux和windows共享文件并配置虚拟主机访问项目

    虚拟机目录下的Vagrantfile文件是vagrant的配置文件,如果想把虚拟机当作一台服务器,可以通过ip访问,需要修改配置文件进行配置. (1)第一步:打开虚拟机目录下的Vagrantfile文 ...