黑马程序员--基础知识

   ----------- android培训java培训、java学习型技术博客、期待与您交流! ------------

 

关键字:关键字、标识符、常量和变量、数据类型、类型转换、算术运算符、赋值运算符、比较运算符、逻辑运算符、位运算符、三元运算符、if语句、switch语句

 

2.1 关键字

    定义:被java赋予了特殊含义的单词,例如,class、public等。

    特点:所有字母都是小写。

 

种类

    定义数据类型:class、interface、int、char、boolean、void

    定义数据类型值:true、false、null

    定义流程控制:if、else、switch、case、default、while、do、for、break、contiune、return

    定义访问权限修饰符:private、protected、public

    定义类、函数、变量修饰符:abstract、final、static、synchronized

    定义类与类之间的关系:extends、implements

    定义建立实例、引用实例及判断实例:new、this、super、instanced

    异常处理:try、catch、finally、throw、throws

    包:package、import

    其他修饰符:native、stricp、translent、volatlle、assert

 

2.2 标识符

    在程序中定义的一些名称,比如,类名。

    组成:有26个字母的大小写和数字(0—9)构成,另有“_”、“$”

    标识符规则:1.数字不能开头

    2.不能用关键字。关键字首字母大写可以,但尽量不要用。main不是关键字,但却被虚拟机识别,所以也不能用。

    Java中严格区分大小写。起名字最好有意义,增加阅读性。

 

    名称规范:

    1.包名:多单词组成时,所有字母小写。例如,xxxyyzzz。

    2.类名、接口名:多单词组成时,所有单词的首字母大写。例如,XxxYyyZzz。

    3.变量名、函数名:多单词组成时,第一个单词首字母小写,第二个单词开始首字母大写。例如,xxxYyZzz。

    4.常量名:所有字母都大写。多个单词用下划线连接。例如XXX_YY_ZZZ。

 

2.3 注释

    单行注释、多行注释和文档注释。见《Day01笔记》

 

2.4 常量和变量

    常量定义:java中固定不变的数值。和变量无关。都可以通过println命令直接打印出来,除了null。

    分类:

    1.整数常量,所有整数。例如,73、84等。

    2.小数常量,所有小数。例如,2.3、225.8等。

    3.布尔型常量,只有两个值:true和false。

    4.字符常量,将一个数字、字母、符号、汉字或空用(’’)标识出来。没有负数。

    5.字符串常量,将一个或多个字符用(”  ”)标识,可以空。

    6.null常量,只有一个数值:null。适用于引用型数据类型。

 

    对于整数常量,java共有四种表现形式:二进制、八进制、十进制和十六进制。八进制用0开头,十六进制用0x开头。

    任何数据(文档、图片、视频等)在计算机中都是以二进制的形式存在的。二进制由电信号的开关演变而来,用0和1表示。不同的组合代表不同的现实中的数据,例如a、b、2、汉字等。这个固定对应的表称之为“编码表”。随着技术的发展,二进制表示的信息越来越多,例如,声音、图片、视频等。

用8个0或1表示最小的一个单位,字节。

一个整数在内存中也是二进制的,但是用大串的0和1组成的数据使用很麻烦。所以将二进制中的三位用一位表示,成了八进制;四位用一位表示,成了十六进制。“附件”中的“计算器”具有不同进制之间转换的功能。

十进制——》二进制:除以2后的商再除以2,依次循环至商为0,余数即为二进制。

二进制——》十进制:乘以2的幂的过程。一个字节最大是255,所以IP地址最大是255。二进制运算,和十进制一样,逢2进1。

先将十进制转换成二进制,再转换成其他进制。例如,90—》01011010—》0x5A。三个二进制位最大为7,可以成为八进制的一位。同理,十六进制。以二进制为基础,换算起来很方便。

负数的二进制:对正的二进制取反(0变1,1变0)加1(二进制)。例如,6=00000110,-6=11111010。负数最高位都是1,取反得来;正数最高位是0。

 

    变量

将不确定的数据进行存储。就是在内存中开辟一个空间,存放一个变化的值,通过操作空间来改变这个值。类似数学中的未知数。变量的概念:

1. 内存中的一个存储空间。

2. 该空间有自己的名称(变量名)和类型(数据的类型)。

3. 该空间的数据可以在同一类型范围内不断变化。

    通过明确数据类型、变量名称和数据(初始值)来开辟空间。

    定义变量的意义:

1.       用来不断存放同一类型的常量,从而可以重复使用。

2. 只要数据不确定,就用定义变量的方式进行存储。适用于C++。

    注意:1.变量的作用范围(一对{}之间);2.初始化值。3.同一区间({})内,不能定义同名变量。

    java语言是强类型语言,对于每一种数据都定义了明确的具体的数据类型,在内存中分配了不同大小的内存空间。

   

 

    整数默认int,小数默认double。

    不同的整数类型,对于的内存存储空间不同,主要是为了节省缓存空间,提高运算速度。

    byte,1个八位,取值范围:-128至127。

    short,2个八位,-32768至32767。

    int,4个八位。

    long,8个八位,天文数字。数值后要加l,例如,long l = 45l;

    float,单精度,4个八位。例如,3.14f

    double,双精度,8个八位。

    char,2个八位,空也可以,’  ’。

    boolean,只有true和false。

    定义变量的格式:数据类型  名称  =  初始值。固定格式。

             例如:     int      x   =   4;  定义一个int类型的变量,取值为4。

    超出取值范围的话,会损失精度,编译失败。

    何时定义变量?当数据不确定,且需要对数据进行存储,此时定义一个变量来完成存储动作。

 

    自动类型转换(隐式):常量在某种数据类型内的话,可以在声明时,自动转换为该数据类型。用在声明变量和赋值运算符时。

    例如,byte b = 3; b = b + 2; 无法编译。byte b = 3可以,因为系统自动判断3是否在b的范围内,3是常量是int型,自动转换类型成为byte型后,可以赋给b。b = b + 2;中,2是4个字节,b是1个字节,b是变化的值,自动提升为4个字节,得到4个字节的5,与byte类型不同一,会损失精度,所以无法编译。

    int 和float运算,自动转换成float,多出了小数部分。

 

    强制类型转换(显式)

    例如,b = (byte)(b + 2);将b+2的和强制装换成byte,再赋给b,可以运行。最好不要转换,可能会丢失精度。再就是确定好到底要强制转换谁。例如,上例中强制转换的是(b+2)的和。

 

    表达式的数据类型自动提升:

    自动提升原则:以大字节的数据为主,小字节的数据向大字节数据提升。

    所有的byte型、short型和char型,自动提升到int型;

    如果操作数是long型、float型、double型,计算结果类型不变。

    例如:

    System.out.println(‘a’);打印a。System.out.println(‘a’+1);打印98。在ASC表中,将字母用数字来标识,每个字符都有对应的数字,a对应数字97,97为int型。只打印字符,会将字符本身作为效果显示;打印字符和整数,字符会自动提升为整数,显示整数。想打印98对应的字符,可以System.out.println((char)98);想获得字符对应的整数,可以System.out.println(‘a’+0);或者System.out.println(‘1’+0);或者System.out.println(‘我’+0);或者System.out.println(‘\f’+0);

 

2.5 运算符

2.5.1算术运算符

   

 

两个int型做运算,结果仍然是int型,小数部分舍弃。

double型和int型做运算,结果是double型。double是8字节,int自动提升。

1%-5 等于1;-1%5等于-1,也就是说,模的结果的正负只和左边数字有关

int a = 3,b;声明两个变量a和b,但只有a有值。定义变量时尽量有初始值。

a++和++a都意味,给a加1,然后把值再赋给a,相当于a = a + 1,a的结果一样,都是一次运算;b = a++;先将a的值赋给b,a再加1并赋给a自己;b = ++a;a先加1并赋给a自己,再把a的值赋给b,都是两次运算。自减也是同理。

+,字符串连接符,必须是字符串相连接。字符串数据和任何数据用+连接,最后得到的数据都是字符串。“ab”+5+5;打印ab55,+都是连接符;“ab”+(5+5);打印ab10,后一个+做加号使用。注意:+在不同地方代表不同含义。为了让打印结果有意义,格式:System.out.println("a=" + a + "," + "b=" + b);

 

转义字符:通过\来转变后面字母或符号的含义,仍然是字符类型。

\n:表示换行。一下内容另起一行。char ch = ‘\n’;表示一个回车符的字符。

\b:表示退格。向前进一格,相当于backspace键。

\r:按下回车键。前面内容取消。

\t:制表符。向后退出一段距离,相当于tab键。

\”:一个双引号。char ch = ‘\”’;表示双引号字符。

\\:一个反斜线。char ch = ‘\\’;表示单引号字符。

println中的ln表示括号内的内容打印完毕后,换行一次。print不换行。

Linux中,换行由\n表示;windows中,换行由\n和\r表示,dos中用\n。

2.5.2 赋值运算符

符号:=、+=、-=、*=、/=、%=,都是一个符号。可以自动类型转换。

int x = 3; 把右边的值赋给左边。x += 4;将左右两边的和赋给左边。

short s = 4; s +=5; 只有一次赋值运算,+和+=运算符都有自动类型转换动作,使得类型保持一致。a=b=c=5;也可以。

 

2.5.3 比较运算符

   

 

注意:比较运算符的结果都是boolean型

 

2.5.4 逻辑运算符

   

 

逻辑,代表着关系。作用:连接布尔类型的表达式。例如,x>3 & x<6;——》true&true——》true。运算表达式可以直接打印,输出结果为ture或false。可以连续使用,例如x==3||x==4||x==5。

true & true = true;         true | true = true;     true ^ true = false;

true & false = false;        true | false = true;     true ^ false = true;

false & true = false;        false | true = true;     false ^ true = true;

false & false = false;       false | false = false;    false ^ false = false;

&特点:只要两边布尔表达式结果有一个为false,结果就是false;两边都是true,结果才是true。| 特点:只要两边布尔表达式结果有一个为true,结果就是true;两边都是false,结果才是false。^ 异或:和 | 不太一样,就是true ^ true = false; 两边相同,结果为false;两边不同,结果为true。

!true = false;    !false = true;

&:无论左边是真是假,右边都运算;

&&:当左边是假时,右边不运算;

|:两边都运算;

| |:左边是真时,右边不运算。

 

2.5.5 位运算符

   

 

    位运算都是对二进制进行运算。

    x << n 相当于x乘以2的n次幂;例如,3<<2 = 12

    x >> n 相当于x除以2的n次幂;例如,6>>2 = 1

    主要用于乘、除运算,非常方便。

    >>:最高位补什么由原有数据的最高位值来定。带符号右移,正负可以继续。

    >>>:最高位无论是什么,全部补0。

    &:0视为假,1视为真。

    ~:取反。例如,-6是6取反加1,6的取反就是-7.

   

x ^ n ^ n = x,一个数异或另一个数两次,结果仍是这个数。主要用于加密。

练习

2乘以8的高效方法。2*8,在底层仍然是二进制运算,只是每个位上都要乘一次,需要运行32*32次,非常麻烦。所以一般都是位运算,2<<3。

将两个变量互换位置,n=3,m=8。一般方法:int temp = n; n= m;m=temp;使用第三方变量。

n = n + m; m = n - m; n = n - m; 不使用第三方变量,但是必须在int的范围内,易损失精度。n = n ^ m;m = n ^ m;n = n ^ m; 也可以。

将二进制转换为十六进制,步骤:&15然后再右移4位,直到结果为0.

将二进制转换为八进制,步骤:&7然后再右移3位,直到结果为0.

    获得二进制,步骤:&1然后再右移1位,直到结果为0.

 

2.5.6 三元运算符

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

    条件为true,选择表达式1执行;

    条件为false,选择表达式2执行;

    表达式,就是有一定语法规则的语句,可以含有运算符,但一定有结果,例如,x*2。2个表达式在做运算,内部有自动类型转换,需要注意表达式的数据类型。必定有结果返回

    例如:取最大值。int x = 3, y = 4, z; z = (x > y)?x:y。z变量存储的是较大的数。

   

2.6 程序流程控制(语句)

    顺序结构,从上向下依次执行。

 

2.6.1 判断结构

if语句,三种格式:

    

内部为条件表达式,运算的结果只有true和false。用if控制某些语句的执行,满足了才执行,只控制{}里的内容。如果只有一条语句,{}可以不写,if只控制距离最近的单条语句。

if else 只能执行一个代码块,肯定有结果。简写格式:变量=(条件表达式)?表达式1:表达式2,和三元运算符类似。

三元运算符,好处:可以简化if else 代码;弊端:作为一个运算符,运算完后必须有结果。但if else不需要结果返回。

虽然有很多行,但是单条语句。if  else if …else,是一个整体,只要有一个条件被执行,就结束,即使可以满足其他条件也不会再执行。

正确数据运算,不正确数据给用户一提示。

 

2.6.2 选择结构

    switch语句,switch、case、break、default。case用于定义备选答案,后面的值就是答案的具体内容。break,跳出switch语句。default,缺省默认,后面的break可以省略。

    特点:

    1.选择的类型只有4个:byte、short、int、char

    2.case与default没有顺序,但是先从case开始执行,没有匹配的case再执行default。位置是随意的,但执行是从case开始。例如,做选择题。

    3.结束情况:遇到break,或者执行到switch语句结束。

    4. 满足条件执行后如果没有break,程序会继续向下执行,遇到break或者switch结尾结束。

    这样也可以:case 3: case4: case5:

    对区间判断、对结果为布尔型判断使用if更合适;switch适合判断具体的数值不多、而且符合4中类型的数据,效率比较高。

 

     ----------- android培训java培训、java学习型技术博客、期待与您交流! ------------

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值