当前位置: 首页 > 编程日记 > 正文

黑马程序员___Java基础[02-Java基础语法](一)

Java语言基础组成

一、关键字

1)定义:被Java语言赋予了特殊含义的单词

2)特点:关键字中所有字母均为小写

3)作用及分类:

下面是Java语言保留专用的50个关键字:

用于定义数据类型的关键字(12个):

  • class:用于定义类

  • interface:用于定义接口

  • byte:用于定义字节型基本数据类型

  • short:用于定义短整型基本数据类型

  • int:用于定义整型基本数据类型

  • long:用于定义长整型基本数据类型

  • float:用于定义单精度浮点型基本数据类型

  • double:用于定义双精度浮点型基本数据类型

  • char:用于定义字符型基本数据类型

  • boolean:用于定义布尔型基本数据类型

  • enum(JDK1.5新增):用于定义枚举类型

  • void:用于定义空返回值类型

用于定义流程控制的关键字(11个):if、else、switch、case、default、while、do、for、break、continue、return

用于定义访问权限修饰符的关键字(3个):private、protected、public

用于定义类,函数,变量修饰符的关键字(4个):abstract、final、static、synchronized

用于定义类与类之间关系的关键字(2个):extends、implements

用于定义建立实例及引用实例,判断实例的关键字(4个):new、this、super、instanceof

用于异常处理的关键字(5个):try、catch、finally、throw、throws

用于包的关键字(2个):package、import

其他修饰符关键字(5个):native、strictfp、transient、volatile、assert(JDK1.4新增)

不能使用的关键字(2个):gotoconst是C++保留的关键字,目前在Java中不能使用。如果它们出现在Java程序中,Java编译器能够识别它们,并产生错误信息。

注意:

main不是关键字,但它能被java虚拟机所识别(初学者易犯的错误)。

字面常量true、false、null如同字面值100一样,它们不是关键字,但它们也不能用作标识符,就如同100不能用作标识符一样。

二、标识符

1)定义:在程序中自定义的一些名称。

2)命名规则:

  • 由26个英文字母大小写,数字:0-9,符号:_ $ 组成。
  • 定义合法标识符规则:

1,数字不可以开头。

2,不能是关键字。

3,不能是true、false或null。

  • Java中严格区分大小写。

注意:

1)在起名字的时候,为了提高阅读性,要尽量有意义。

2)不要用字符$命名标示符,习惯上字符$只在机械地产生源代码时使用。

3)Java中的名称规范:

  • 包名:多单词组成时所有字母都小写。

xxxyyyzzz

  • 类名接口名:多单词组成时,所有单词的首字母大写。

XxxYyyZzz

  • 变量名和函数名:多单词组成时,第一个单词首字母小写,第二个单词开始每个单词首字母大写。

xxxYyyZzz

  • 常量名:所有字母都大写。多单词时每个单词用下划线连接。

XXX_YYY_ZZZ

三、注释

1)定义:用于注解说明程序的文字。

2)优点:提高了代码的阅读性。

3)Java中的注释格式:

  • 单行注释(代码中某几句关键或难懂的程序加单行注释)
格式: //注释文字
  • 多行注释(类修饰符有改变时可能会加多行注释)
格式: /*  注释文字  */
  • 文档注释(类和函数上加文档注释)(java特有的注释

格式:/** 注释文字 */

注:单行注释中可以有单行注释,也可以出现在文档注释和多行注释中,但多行注释和文档注释既不可以自行嵌套,也不可以相互嵌套。

4)注释的作用

  • 单、多行注释:1,注解说明程序 2,用于调试程序

  • 文档注释:对程序说明,可通过javadoc.exe工具将程序中的文档注释都提取出来形成网页,这个网页就是所写程序的说明书,供程序开发者使用。

注:“程序说明书”是提供给开发者使用的,“软件使用说明书”是提供给客户使用的,注意区分。

5)不同注释间的区别:

  • 注释与单行多行注释的区别:对于单行和多行注释,被注释的文字,不会被JVM(java虚拟机)解释执行。
  • 对于文档注释,是java特有的注释,其中注释内容可以被JDK提供的工具 javadoc 所解析,生成一套以网页文件形式体现的该程序的说明文档。

6)养成好的编程习惯:

注释是一个程序员必须要具有的良好编程习惯。初学者编写程序可以养成习惯:先写注释再写代码

代码是思想的一种体现形式而已。在以后的编程中养成将自己的思想通过注释先整理出来,再用代码去体现的习惯。

四、常量

1)定义:常量表示不能改变的数值。

2)Java中常量的分类:(常量也叫直接量)

  • 整型常量(默认为int型):所有整数(其中长整型常量为:整数后加大写或小写的L)

  • 浮点型常量(默认为double型):所有小数(其中单精度浮点型常量为:小数后加大写或小写的F)(双精度浮点型常量为:小数后加大写或小写的D)

  • 布尔型常量:较为特有,只有两个数值,true和false。

  • 字符型常量:将一个数字、字母或者符号用单引号('')标识,单引号中符号不能为空(空格也算字符,所以' '是可以的)

  • 字符串型常量:将0个、一个或者多个字符用双引号("")标识,双引号中符号可以为空

  • null常量:只有一个值,null。

3)对于整数:java有四种表现形式。

  • 十进制:0-9 ,满10进1,没有前缀。

  • 二进制:0-1,满2进1,用0b("零b"或"零B"而非"ob",编程易写错)开头表示(这是1.7的新特性)。

  • 八进制:0-7 ,满8进1, 用0(""而非"o",编程易写错)开头表示。

  • 十六进制:0-9,A-F,满16进1, 用0x("零x"或"零X"而非"ox",编程易写错)开头表示。

在计算机原理中(不要同java中的表示混淆):

  • 八进制的数是这种表示:(386)Q

  • 十六进制数是这种表示:(6C89)H

  • 二进进制的是这种表示:(1101001)B

  • 十进制是:(6438)D,D可以省略的

4)计算机中数据的存储:

计算机中的数据都是以二进制的形式进行存储的,字节是计算机中的最小存储单位。

常见的存储单位及换算:

1位=1bit(比特),1byte(字节)=8bits,1M=,1G=,1T=

注意:“bit”的中文翻译为“比特”,“byte”的中文翻译为“字节”,初学者易混淆。

5)编码表:

  • 编码表的由来:为了让计算机识别人类的语言,将不同的字符用对应的二进制数进行表示,这样就形成了编码表。

  • 常见编码表间的区别:

6)进制的出现及转换:

  • 进制的由来:用0、1表示电信号形成了二进制;如果数据过大,用二进制表示数据时数据就会很长,为了避免这种麻烦,把数据缩短一点,将二进制用三位表示成一位,形成了八进制;还是过长,于是出现了用四位表示一位,形成了十六进制(java中的地址值就是用十六进制表示的)。
  • 进制的转换:

a、十进制——>R进制(基数R=2、8、16):除基数取余,直到商为0,最后将余数反转(倒序取余法)

b、R进制——>十进制(基数R=2、8、16):数据每一位上的系数乘以对应基数的次幂(低位从零开始),然后求和即可

其中:二进制到十进制的技巧(查8421码)

c、二进制——>R进制(基数R=8、16):R=2m可以用m个二进制数表示出来(例如3个二进制位可以表示0~7的范围,一   个八进制位)

R=8:把二进制数据每三位组合,左边不够三位用0补位,然后把每个组合计算成对应的十进制数据,最后从左到右把数据相连即可

R=16:把二进制数据每四位组合,左边不够四位用0补位,然后把每个组合计算成对应的十进制数据,最后从左到右把数据相连即可

d、R进制——>二进制(基数R=8、16):

R=8:把每一个八进制数转换成三位二进制数,不够三位的用0补,最后从左到右把数据相连即可

R=16:把每一个十六进制数转换成四位二进制数,不够四位的用0补,最后从左到右把数据相连即可

  • 负数的二进制表现形式:对应正数二进制(32位)取反+1(取反:将二进制的1变成0,0变成1)。

  • 负数的二进制最高位都是1,正数二进制最高位都是0

五、变量

1)变量的概念:(相当于数学中的未知数)

  • 内存中的一个存储区域
  • 该区域有自己的名称(变量名)和类型(数据类型)
  • 该区域的数据可以在同一类型范围内不断变化

2)变量的作用及好处:用来不断的存放同一类型的常量,可以重复使用。

3)使用时需要注意的事:

  • 变量的作用范围(在声明所在的一对{}内有效)

  • 使用前是否需要初始化

4)定义变量的基本格式:数据类型    变量名  =  初始化值;

5)使用方式

  • 第一种,在声明的时候,就初始化值

数据类型 变量名 = 初始化值;

例如:byte b = 100;

  • 第二种在使用前赋值:

声明

赋值

使用

  • 如果几个变量为同一类型,那么可以一起声明,变量之间用逗号隔开

例如:int i,j = 3,k;

六、数据类型

Java语言是强类型语言(好处:节约空间),对于每一种数据都定义了明确的具体数据类型,在内存中分配了不同大小的内存空间

1)java语言分为两种数据类型

A:基本数据类型

B:引用数据类型(类,接口,数组)

2)基本数据类型

A:区别:在内存中分配的空间大小不同,从而导致它们表示的数据范围不同

B:4类8种

  • 整数型

  • byte——占1个字节,范围-27~27-1(-128~127)

  • short——占2个字节,范围-215~215-1(-32768~32767)

  • int——占4个字节,范围-231~231-1

  • long——占8个字节,其后加L或l(最好用大写的,小写与数字"1"容易分不清)标识,范围-263~263-1

  • 浮点型

  • float——占4个字节 其后必须加F或f标识

注意:float型所占存储空间虽然比long型小,但存储的数值范围比long大,这跟float在内存中的存储方式有关

32个二进制位,其中:1位符号位,8位指数位,23位尾数位

  • double——占8个字节
  • 字符型

char——占2个字节,范围0~65535(此范围是字符所对应码表的范围)

  • 布尔型

boolean——占几个字节不确定:这个数据类型代表一个比特的信息,但它的“大小”不是精确定义的东西。

只有两个值:true,false

C:默认情况下:

整数是int类型

浮点数是double类型

3)数据类型转换

A:不同类型数据进行混合运算时要进行类型转换,类型转换有以下两种:

自动类型转换(也叫隐式类型转换)

强制类型转换(也叫显式类型转换)

B:整型,字符型,浮点型的数据在进行混合运算时会自动转换运算对象的类型,转换时遵循以下原则:

容量小的类型与容量大的类型进行计算,默认转换为容量大的数据类型(容量是指容纳数据的范围而非存储空间);

数据类型按容量大小排序为:

byte,short,char->int->long->float->double

当两个类型不同的运算对象进行二元运算时,表达式数据类型自动提升的具体规则如下 :

•如果一个操作数是double型,就将另一个转换为double型。

•否则,如果一个操作数是float型,就将另一个转换为float型;

•否则,如果一个操作数是long型,就将另一个转换为long型;

•否则,两个运算对象都转换为int型;这也就意味着所有的byte型、short型和char的值将被自动提升到int型(这个是即使只有自身数据类型参与运算时也执行的)。

注意:

byte、short、char之间不能进行自动类型转换,他们三者在计算时首先会转换为int类型;

其中,byte可以直接赋值给short(因为byte的范围在short范围内),但byte a = 55,b = 18;short s = a+b;这种操作是错误的。

什么时候要用强制类型转换:

有多种类型的数据混合运算时,系统首先自动的将容量小的数据转换成容量大的那一种数据类型,然后再进行计算。

而容量大的数据类型转换为容量小的数据类型时,需要进行强制类型转换,但可能造成精度降低或溢出,使用时要格外注意。

C:强制转换符

格式:(数据类型)要被转换的数据

例如:byte b = (byte)130;

D:字符型参与运算

首先会去找对应字符的unicode码值,然后运算。

能不能把整数直接赋值给char类型的变量?

可以,只要这个整数在char类型对应的码表取值范围内,char 类型取值范围0~216-1(0~65535)。

E:布尔型参与运算:不影响参与运算的其他数据的类型,常见于三元运算符中。

F:字符串参与运算

字符串会和参与运算的数据相连接组成一个新的字符串。

这个时候,"+"是作为连接符使用的,Java中经常会使用这个特性。

G:Java的常量优化机制

思考:

byte b1=3,b2=4,b;

b=b1+b2;

b=3+4;

哪句会编译失败呢?为什么呢?

答:b=b1+b2;会编译失败,原因如下:

(1)byte,short,char三种数据类型在内存中运算的时候会自动类型提升为int去运算

(2)b1和b2是两个变量值,jvm无法判断里面值的大小

b=3+4;为什么能编译通过呢?

答:Java的常量优化机制,在编译的时候,会判断这个常量值或常量的和是否在变量数据类型的取值范围内,在,就会自动转换成变量数据类型进行赋值(包括char类型,如:char d = 5;),就可以编译通过,否则,编译失败。

七、运算符

1、算术运算符

符号:+、—、*、/、%、++、--

A:+

•作为数据的符号(正号)

•做加法运算(加号)

•字符串连接符

B:—

•作为数据的符号(负号)

•做减法运算(减号)

C:*

•做乘法运算(乘号)

D:/

•做除法运算(除号)

注意:如果除号两边都是整数,则结果也是整数,和日常生活的计算有所不同,计算机中除法计算得出的是近似值。

E:%

•求余运算(取模):得出除法的余数,左边是被除数,右边是除数

•运算结果取决于左边的数的符号与右边无关:左边为正,结果为正;左边为负,结果为负。

•作用:偶数%2总是0,奇数%2总是1,所以,能利用这一属性来判断一个数是奇数还是偶数。判断星期中的那一天,时分秒之间的转化等。

F:++,--

•递增++:就是加1;递减--就是减1

•单独存在,放在操作数的前面或者后面,结果一样

•参与运算时:

放在操作数的前面,先自身加1或者减1,然后再参与运算

如:j = ++ i;(假设i,j均为int型)

相当于:

i = i + 1;  //i自身先加1

j = i;    //然后参与运算

放在操作数的后面,先参与运算,然后再自身加或者减1

如:j = i ++;(假设i,j均为int型)

相当于:

int temp = i;   //用temp记录住i最初的值

i = i + 1;    //i自身加1

j = temp;   //参与计算的是i自增前的值

典型例题:

 1 class ZiZeng {
 2     public static void main(String[] args) {
 3         int i = 0;
 4         for(int j = 0;j < 10;j++)
 5             i = i++;
 6         System.out.println(i);
 7     }
 8 }
 9 
10 /*
11   程序的打印结果为0
12 
13   原因:
14     i = i++;
15     相当于:
16         int temp = i;
17         i = i + 1;
18         i = temp;
19 */
View Code

2、赋值运算符

符号:=、+=、—=、*=、/=、%=

A:=(赋值)

作用:将符号右边的数值赋给左边。

注意:是赋值不是等号,Java中等号用==表示。

B:简捷赋值运算符:+=、—=、*=、/=、%=

•+=(加等):把左边和右边的和赋给左边

举例:x+=2;等同于 x = x + 2;

•其它几个类似:

—=(减等):把左边和右边的差赋给左边

*=(乘等):把左边和右边的积赋给左边

/=(除等):把左边和右边的商赋给左边

%=(模等):把左边和右边的模赋给左边

•问个问题:

byte b = 5;

b = b + 2;

b += 2;  //相当于b = (byte)(b+2);

System.out.println(b);  会不会报错?

答:不会,因为+=运算符在给b赋值时,自动完成了强转(强制类型转换)操作。

注意:简捷赋值运算符在给左边变量赋值时,自动完成了强转操作。

3、比较运算符

符号:==(等于)、!=(不等于)、>(大于)、>=(大于等于)、<(小于)、<=(小于等于)

比较运算符的结果都是boolean型,要么是true,要么是false。

注意:判断两个数是否相等时,用比较运算符“==”不能误写成“=”,这是初学者,甚至是很多老程序员易犯的错误。

4、逻辑运算符

符号:&(与)、|(或)、^(异或)、!(非)、&&(短路与)、||(短路或)

作用:逻辑运算符用于连接布尔型表达式,在Java中不可以写成3<x<6,应该写成x>3 & x<6 。

A:逻辑与运算符 &:当且仅当左右两边都为true时,结果才为true。

B:逻辑或运算符 |:当且仅当左右两边都为false时,结果才为false。

C:逻辑异或运算符 ^:左右两边相同,结果为false。

D:逻辑非运算符 !:左边为true,结果为false;左边为false,结果为true。

E:短路与 &&:

•当且仅当左右两边都为true时,结果才为true。

和&的区别:

&:左边无论什么结果,右边都执行。

&&:左边为false,右边不执行,结果为false。

F:短路或 ||:

•当且仅当左右两边都为false时,结果才为false。

和|的区别:

|:左边无论什么结果,右边都执行。

||:左边为true,右边不执行,结果为true。

5、位运算符

符号:<<(左移)、>>(右移)、>>>(无符号右移)、&(与运算)、|(或运算)、^(异或运算)、~(反码)

作用:位运算是直接对二进制进行运算。(由于是直接对二进制进行操作,位运算的计算效率很快。)

A:左移运算符:<<

•将一个数的二进制向左移:被移除的高位丢弃,空缺位补0。

一个正整数向左移动几位就乘以2的几次幂

经典面试题:最有效率的方式算出2乘以8等于几?  答:2<<3;

B:右移运算符:>>

•将一个数的二进制向右移:高位是0,空缺位就补0;高位是1,空缺位就补1。

一个正整数向右移动几位就除以2的几次幂

经典面试题:最有效率的方式算出128除以16等于几?  答:128>>4;

C:无符号右移:>>>

将一个数的二进制向右移:无符号右移无论最高位的符号位无论是0还是1,空缺位都补0。

D:与运算:&

将两个数的二进制位上下对齐,将每个二进制位进行 & 运算,只有1&1时结果是1,否则是0。

E:或运算:|

将两个数的二进制位上下对齐,将每个二进制位进行 | 运算,只有0 | 0时结果是0,否则是1。

F:异或运算:^

•将两个数的二进制位上下对齐,将每个二进制位进行 ^ 运算,任何相同二进制位进行 ^ 运算,结果是0,1^1=0 ,

0^0=0;不相同二进制位 ^运算结果是1,1^0=1 , 0^1=1。

•特点:一个数异或同一个数两次,结果还等于这个数。

•原理:当一个数异或另一个数两次,即相当于这个数的二进制位和另一个数的每个对应二进制位异或两次,因为

1^1^1=1,1^0^0=1,0^1^1=0,0^0^0=0,所以,这个数的每个二进制位都不变,结果还是这个数。

•应用:数据加密

典型例题:如何对两个整数变量的值进行互换(不需要第三方变量)?

答:

1 int n = 3,m = 8;
2 System.out.println("n="+n+",m="+m);
3 
4 n = n ^ m;
5 m = n ^ m;//(n^m)^m;
6 n = n ^ m;//n ^ (n ^ m)
7 
8 System.out.println("n="+n+",m="+m);
View Code

G:总结:

  • 位运算符只能用于整数类型(byte、short、int、long 和 char

  • 位运算中涉及的字符应该转换成整数

  • 所有的位运算符都能构成位赋值运算符,如 &=、|=、<<=、>>=、>>>= 等。

注意:&、|、^既能作位运算符也能作逻辑运算符,当他们操作布尔型表达式的时候就是逻辑运算符,当他们直接操作数值的时候就是位运算符。

反码运算:~

将一个数的二进制位,1变成0,0变成1。

6、条件运算符(Java中唯一的三元运算符)

格式:

(条件表达式)?表达式1:表达式2;

•如果条件为true,运算后的结果是表达式1,表达式2不执行

•如果条件为false,运算后的结果是表达式2,表达式1不执行

•分号":"两边表达式运算结果的数据类型不同时会进行数据类型提升;

例如:

 1 class SanYuan {
 2     public static void main(String[] args) {
 3         int n = 13;
 4         System.out.println(n>9?(char)(n-10+'A'):n);
 5         System.out.println(n>9?(char)(n-10+'A'):n++);
 6         System.out.println(n);
 7         /*
 8             运行结果:68
 9                     68
10                     13
11             原因:因为三元运算符的表达式2是int型,
12                  虽然因为条件表达式结果为true,表达式2不执行。
13                  但表达式1的数据类型会被提升回int型。
14         */
15     }
16 }
View Code

特点:条件运算符运算完之后一定有一个结果。

7、运算符的优先级

A:问题:int a = 3,b = 4;  System.out.println("a + b = " + 3 + 4);  会输出什么呢?

答:输出a + b =34,原因是运算是从左到右进行的,所以3和4之间的“+”号会作为连接符而非加号,这涉及到了运算符的优先级。

B:运算符的优先级和结合方向

8、转义字符

A:定义:通过\ 来转变后面字母或者符号的含义。

B:常见转义字符的含义:

\n:换行

\b:退格,相当于backspace。

\r:按下回车键,Window系统,回车符是由两个字符来表示\r\n.

\t:制表符,相当于tab键。

\f:换页

\\:反斜杠

\':单引号

\":双引号

注意:转义字符”\“连同”被转义的字母“共同组成一个新的字符,所以 char = '\n';的语句是正确的,不会编译失败。

转载于:https://www.cnblogs.com/itheima-xing/p/3494994.html

相关文章:

NSLog打印自定义对象

我们在开发中&#xff0c;如果直接使用NSLog打印对象&#xff0c;则会打印对象的指针&#xff08;如下图&#xff09; 但我们常常希望打印的是对象的属性的值&#xff0c;因此我们需要重写自定义类的description方法&#xff08;打印日志时&#xff0c;对象会收到description消…

数据库的安装与管理

数据库的安装与管理 1.mysql数据库的安装 yum install mariadb-server -y systemctl start mariadb ##开启数据库 netstat -antlupe | grep mysql ##查看端口 vim /etc/my.cnf ##修改配置文件。添加skip-networking1 systemctl restart mariadb ##重起服务 netstat -antlupe |…

SQL性能优化没有那么神秘

经常听说SQL Server最难的部分是性能优化&#xff0c;不禁让人感到优化这个工作很神秘&#xff0c;这种事情只有高手才能做。很早的时候我在网上看到一位高手写的博客&#xff0c;介绍了SQL优化的问题&#xff0c;从这些内容来看&#xff0c;优化并不都是一些很复杂的问题&…

腾讯云无法绑定公网IP问题解释与解决方案。

腾讯云无法绑定公网IP问题解释与解决方案。 http://blog.csdn.net/chenggong2dm/article/details/51475222 解释&#xff1a;公网IP并不直接配置在服务器上&#xff0c;而是在服务器外部的路由上&#xff0c;通过某种映射连接。 解决方案&#xff1a;绑定0.0.0.0 posted on 201…

iOS Category小举例

&#xff08;一&#xff09;Category作用&#xff1a;Category可以向已存在的类添加新的方法&#xff0c;或者覆盖原来类中已经存在的方法&#xff0c;从而扩展已有类&#xff08;在Java中为了实现类似功能&#xff0c;一般是创建子类&#xff09; &#xff08;二&#xff09;C…

memcache

nginxphpmemcache缓存 图解&#xff1a; [roottest5 ~]# /etc/init.d/iptables stop [roottest5 ~]# nginx [roottest5 ~]# /etc/init.d/php-fpm start Starting php-fpm done [roottest5 ~]# tar zxf memcache-2.2.5.tgz [roottest5 ~]# cd memcache-2.2.5 [roottest5…

iOS中KVO模式的解析与应用

最近老翁在项目中多处用到了KVO&#xff0c;深感这种模式的好处。现总结如下&#xff1a; 一、概述 KVO,即&#xff1a;Key-Value Observing&#xff0c;它提供一种机制&#xff0c;当指定的对象的属性被修改后&#xff0c;则对象就会接受到通知。简单的说就是每次指定的被观察…

C 到C++的升级

C所有的变量都可以在需要使用时再定义。 C语言中的变量都必须在作用域开始的位置定义。 register 关键字请求编译器将局部变量存储于寄存器中 在C语言无法获取register 变量的地址 在C中可以取得 register 变量的地址 C编译器有自己的优化方式&#xff0c;所以几乎不用registe…

SET QUOTED_IDENTIFIER OFF语句的作用

先看下面几个sql语句 1SETQUOTED_IDENTIFIER ON2SELECT*FROM"USER" WHEREanetasp34SETQUOTED_IDENTIFIER ON5SELECT*FROM[USER]WHEREanetasp67SETQUOTED_IDENTIFIER OFF8SELECT*FROM[USER]WHEREa"netasp" 910SETQUOTED_IDENTIFIER OFF11SELECT*FROM[USE…

proxy实现 mysql 读写分离

实现 mysql 读写分离 图解: 环境: iptables 和 selinux 关闭 proxy:test2 172.25.1.2 Master: test3 172.25.1.3 Slave:test4 172.25.1.4 环境已经实现 test3(master) 和 test4(slave) 的主从复制 Server2: [roottest2 ~]# ls mysql-proxy-0.8.5-linux-el6-x86-64bit.tar.gz …

iOS开发中用到的一些第三方库

下面是我在开发中用到的一些优秀的iOS第三方开源库&#xff1a; 1.AFNetworking&#xff08;网络请求&#xff0c;类似的还有ASIHTTPRequest&#xff09; https://github.com/AFNetworking/AFNetworking/ 2.MBProgressHUD&#xff08;提示框&#xff09; https://github.…

小图标外链API

网页上有些分享的小图标&#xff0c;比如分享到facebook&#xff0c;weibo&#xff0c;qq空间等功能的时候&#xff0c;图标以前一般是自己做一个css sprite。当一个网站的图标变了的时候&#xff0c;比如facebook变成assbook的时候&#xff0c;你就要修改这个css sprite。费时…

转载JQuery 获取设置值,添加元素详解

转载原地址 http://www.cnblogs.com/0201zcr/p/4782476.html jQuery 获取内容和属性 jQuery DOM 操作 jQuery 中非常重要的部分&#xff0c;就是操作 DOM 的能力。 jQuery 提供一系列与 DOM 相关的方法&#xff0c;这使访问和操作元素和属性变得很容易。 提示&#xff1a;DOM …

mysql 主从复制 和基于gtid的mysql主从复制

主从复制 原理: mysql 无需借助第三方工具,而是其自带的同步复制功能,另外一点,mysql 的主从 复制并不是从硬盘给上文件直接同步,而是逻辑的 binlog 日志同步到本地的应用执行的过 程。 数据从一个 mysql 数据库(master)复制到另一个 mysql 数据库(slave),在 master 与 slave …

使用read write 读写socket

一旦&#xff0c;我们建立好了tcp连接之后&#xff0c;我们就可以把得到的fd当作文件描述符来使用。 由此网络程序里最基本的函数就是read和write函数了。 写函数&#xff1a; ssize_t write(int fd, const void*buf,size_t nbytes); write函数将buf中的nbytes字节内容写入文件…

iOS从通讯录中选择联系人

有时候APP需要用户输入一位联系人的姓名和电话&#xff0c;除了用户手动输入&#xff0c;一般也允许用户从通讯录中选择一位联系人&#xff08;图1&#xff09;&#xff0c;下面的代码就是使用系统的<AddressBookUI/AddressBookUI.h>库实现这一需求。 图1 完整代码&…

document.readystate

http://www.cnblogs.com/lhb25/archive/2009/07/30/1535420.html http://www.cnblogs.com/haogj/archive/2013/01/15/2861950.html http://jincuodao.baijia.baidu.com/article/2896 电视转载于:https://www.cnblogs.com/daishuguang/p/3523783.html

Openstack安装部署

系统版本 rhel7.4 关闭 iptables 关闭 selinux foundation1: 172.25.254.1 server1: 172.25.254.11 server2: 172.25.254.12 可参考&#xff1a;https://docs.openstack.org/mitaka/zh_CN/install-guide-rdo/ //选择的mitaka 虚拟机上网 首先物理机必须可…

在Xcode中使用Git进行源码版本控制

本文翻译自Understanding Git Source Control in Xcode &#xff08;译者myShire&#xff09;欢迎您加入我们的翻译小组。 在应用程序开发过程中&#xff0c;很重要的一部分工作就是如何进行源码的版本控制。当代码出现问题时&#xff0c;我们就需要将代码恢复到原先正常的版本…

敏捷开发之道(二)极限编程XP

上次的博文敏捷开发之道&#xff08;一&#xff09;敏捷开发宣言中&#xff0c;我们介绍了一下敏捷开发宣言&#xff0c;在其中&#xff0c;我们了解到了关于敏捷开发的几个重要的价值观。今天我们来了解一个敏捷开发的方法——极限编程XP 1、介绍 极限编程&#xff08;eXtreme…

spring 3.X与jdk 1.8不兼容

1、报错&#xff08;部分&#xff09; 2、解决 虽然Spring的jdk要求如下&#xff0c;但是spring 3与jdk1.8不兼容&#xff08;使用的是spring 3.2&#xff09; 在eclipse将jdk版本下调。这里将JDK调到1.7&#xff08;在eclipse如下设置&#xff09; 同时&#xff0c;需要设置服…

rhel-server-7.5-x86_64-dvd.iso镜像下载及rar压缩包的解压

主机名为server1 [rootserver1 ~]# ls rhel-server-7.5-x86_64-dvd.part1.rar rarlinux-5.6.1.tar.gz rhel-server-7.5-x86_64-dvd.part2.rar 1、如果没有rarlinux-5.6.1.tar.gz包可以去 https://www.rarlab.com/download.htm 这个网站下载RAR 5.61 for Linux 或者RAR 5.…

Expandable Table的Demo

在网上看到一个可点击cell展开的TableView的demo&#xff0c;原文是swift语言&#xff0c;我写了个oc版&#xff0c;有兴趣的朋友可以看下&#xff1a; 效果&#xff1a; oc源码&#xff08;带中文注释&#xff09;&#xff1a;http://download.csdn.net/detail/dolacmeng/941…

Java对多线程的支持

Java运行时系统实现了一个用于调度线程执行的线程调度器&#xff0c;用于确定某一时刻由哪一个线程在CPU上运行。在Java技术中&#xff0c;线程通常是抢占式的而不需要时间片分配进程&#xff08;分配给每个线程相等的CPU时间的进程&#xff09;。抢占式调度模型就是许多线程处…

ESP8266-iot-2

1.SDK概述 复制相关的工程文件到HelloWorld里面 要在版本esp8266_nonos_sdk_v2.0.0_16_07_19上面开发&#xff0c;那么就要复制相应文件 然后打开IDE 导入HelloWorld到工程里面 创建3个文件&#xff0c;如下图 再从lib里面添加文件 复制到我的下面 复制app里面的内容 打算从IoT…

iptables防火墙策略

环境&#xff1a; foundation1 172.25.1.250 172.25.254.1 server1 172.25.1.1 server2 172.25.1.2 server3 172.25.1.3 四个主机都做解析 iptables简介&#xff1a; netfilter/iptables&#xff08;简称为iptables&#xf…

ubuntu(16.04.01)学习-day1

1.修改root用户密码 sudo passwd root 按提示进行设置。 2.从Ubuntu 16.04开始&#xff0c;用户可以实现改变启动器的位置&#xff0c;可以将启动器移到屏幕底部&#xff0c;但是无法移到右边或顶部。打开终端&#xff0c;然后输入下面这个命令&#xff0c;即可将启动器移到屏幕…

HDU 1090 A+B for Input-Output Practice (II)

#include <cstdio> int main() {int n,a,b;scanf("%d",&n);for (int i1; i<n; i){ scanf("%d%d",&a,&b);printf("%d\n",ab);}return 0; } 转载于:https://www.cnblogs.com/forever97/p/3539605.html

监听UIWebView点击视频播放的事件

最近项目需要统计在跳转UIWebView后&#xff0c;用户点击网页上的视频进行播放的概率。找了很多监听进入视频播放的方法&#xff0c;最后在stackoverflow找到下面这个使用Notification的可行方法(如果是弹出)&#xff1a; #pragma mark Notification - (void)addNotification {…

linux系统下redhat7之虚拟机控制

基础操作&#xff1a; [kioskfoundation0 Desktop]$ rht-vmctl start desktop ###开启desktop虚拟机 Error: desktop not started (is already running) ###报错&#xff0c;desktop已经运行 [kioskfoundation0 Desktop]$ rht-vmctl view desktop …