美文网首页java自学程序员
第一部分 Java基础语法(上)

第一部分 Java基础语法(上)

作者: 孙浩j | 来源:发表于2017-10-19 16:54 被阅读16次

    Java标识符

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

    规范

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

    首字符之后可以是字母(A-Z或者a-z),美元符($)、下划线(_)或数字的任何字符组合

    关键字不能用作标识符

    标识符是大小写敏感的

    类名最好要大写,用来区分他是一个类


    java命名规范

    (1)类名接口名:所有首字母大写XxxYyyZzz

    (2)变量名,函数名:xxYyZz

    (3)包名:xxyyzz

    (4)常量名  XXX_YYY_ZZZ

    格式问题

    Java关键字

    这些保留字不能用于常量、变量、和任何标识符的名称。(不用记,以后会接触)

    Java注释:一定要写

    (被注释内容不会被编译,仅仅起到提示的作用,便于后期review代码)

    1.// 单行注释

    2./*

    多行注释

    */

    3./**多行注释,可以生成文档,又叫文档注释  命令行输入javadoc  xxx.java

    */

    1.单行注释可以在单行注释里面。

    2.多行注释不能嵌套在多行注释里面。

    常量

    常量表示不能被改变的数值

    变量

    变量指的是内存中的一块存储区域,该区域有自己的名称(变量名)和类型(数据类型),该区域的数据可以在同一类型范围内不断变化,变量的作用范围只在该“{}”中有效

    int a; {  a=6; }      //  a等于6        {  int a =6;}      //定义在{}内的变量,{}外不可以访问

    所以说如果你想要在{}之后访问大括号里进行变化的变量,此变量必须在{}外声明

    定义变量的格式

    1.数据类型  变量名 = 初始化值(声明并初始化)

    2.先声明,再初始化

    注意:(1)变量的定义格式是固定的,变量就如同数学中的未知数

                (2)变量被使用必须有初始值,它其实就是内存中的一小块区域,用变量名访问

                (3)变量只能被声明一次

    二进制(了解)   025表示八进制  0x256表示16进制

    java二进制采用补码形式表示正负数区分的标志:符号位(0正,1负)

    正数补码是其本身,负数补码取反+1

    所以计算机二进制与十进制转换,要先把二进制转换为原码作为过渡再进行转换。

    1.十进制转换为二进制:除2取余,除尽为止,余数从上向下看为二进制源码结果,由于是正数所以原码和补码相同


    2.二进制转换为十进制:累加求和

    3.负十进制转换为负数二进制:取绝对值,转换为二进制,取反加1

    4.负二进制:取反加1,转换为十进制,乘-1


    拓展:为什么byte表示的是8个字节,范围却是-128到127呢?

    -128到127.共256个数。刚好可以用一个字节(8位)表示出来(2^8=256);

    01111111表示的是127 ,按道理128表示的是10000000,可是因为第一位是一个符号位,所以byte正数最大值就为127,当第一位等于1的时候就是负数,把10000000看作是一个负数的补码,转换为十进制就是把10000000取反加1为10000000十进制就是128,再乘-1为-128

    127后面是-128,最大的正数之后是最小的负数。这就跟钟表一样,12点钟后面是1点中钟一样。

    byte b=(byte)128,    把128赋值给b,计算机语言 是通过二进制补码表示的,但因为正数原码补码相同,所以b的值变成了10000000,这时你要输出b,计算机发现第一位的符号位是1,则把它看成是负数的补码,输出时再转换为十进制则变成负128(赋值时,计算机接收的是二进制的补码,输出的时候把补码转换为原码在转换为十进制然后再输出

    基本数据类型:四型八种(可以想象是一种容器,承装事物)

    整型 (整数):byte(1个字节8位  -128-127)、short(2个字节)、int(4个字节)、long(8个字节)

    浮点型(小数):float(4个字节,2的-149次方—2的127次方)、double(8个字节,非常大)

    布尔型(表示真假):boolean(1字节)

    字符型:char(2字节)用单引号括起来,只能是两个字母,一个汉字等于两个字符(0-65535)

    ascii掌握    a-z(97-122),A-Z(65-90),1-9(48-57),每个ascii都对应一个字符

    Java中默认的整数类型是int,如果要定义为long ,则要在数值后加上L或者l

    默认的浮点型是双精度浮点,如果要定义float,则要在数值后面加上f或者F

    一个字节等于8位,1个字节等于256个数。2^8

    一个英文字母或者阿拉伯数字占一个字节

    一个汉字占2个字节

    可为数字加下划线,让人更易阅读,编译器自动去除


    转义字符:具有特殊含义的字符

    System.out.prinltn(‘\’’);

    \’算是一个整体标识一个单引号

    \v竖向跳格          \b退格       

      \r回车(表示的是回到本行行首)   

    System.out.println('h');

    System.out.println('\r');

    System.out.println('a');  //最后输出的是 a因为\r回到了行首,a覆盖了h

      \\反斜线符"\"          \n新行

    \t跳向下一个tab位置(横向跳到下一制表位置)  缩进的时候都要写

    数据类型转换

    1.自动类型转换

    小类型可自动转换为大类型

    byte a=12;  int b=a  byte自动转换为int

    特例:char和int型可以互相自动转换,例如char c='1'    c不仅等于‘1’还等于49(因为在计算机内部是通过二进制进行交互的,char型在计算机中先转为int再转为二进制)

    2.强制类型转换

    (比如把装满水的大杯子往小杯子里倒水,多余的会溢出,而小向大倒没有问题。)

    大类型转换为小类型,可能损失精度

    int a=3;

    byte b=(byte)a;

    short s = 3; s = s+2; s+=2,有什么区别,为什么?

    s=s+2不正确,因为运算的时候转为int型,不能把int型赋给short型,

    s+=2会自动强转为short进行运算

    字符串类型(引用类型)

    String str = ""; // 这个跟"abc"、"中国",本质上这都一样,只是空串,长度为0罢了

    ""是空字符串,但是也是字符串,没有什么东西。  //字符串初始化用“”,不用null

    而null是空的意思,什么都没有,没有地址。

    字符串与基本数据类型的转换

    String s=“”+123;        //基本数据类型转换为字符串,空串加基本数据类型(+可用于字符串连接)

    Integer.parseInt(数字字符串);              //字符串转换为数字

    Double.parseDouble(数字字符串);

    s.charAt(index)//字符串转换为字符

    java代码是顺序执行的

    运算符(相等是==  ,赋值是= 千万不要写错!

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

    (1) int a=5; int b=2; int c=a/b;    int表示整数,小数部分被舍弃,答案为2

    (2) int a=3;int b=4;double c=a/b;      a/b运算之后是int型,舍弃小数部分为0,自动转换为double增加精度变成0.0

    (3) int i=3; int a=i/2 + i/4  =1+0    每一次i的运算返回值都是int型

    (4) double a=3;int b=4;double c=a/b  两数想运算,返回的结果是两数据类型中较大的(精度)

    整型运算自动转换为int进行运算,浮点型运算自动转换为double进行运算,因此要得到特定其它类型,需要进行强制转换

    注:不知道有没有有这样的疑问:

            为什么byte a=1+2; 是合法的而    byte a=1; byte b=2;byte c=a1+a2;就是非法的,这是因为a1+a2在运算的时候自动转成了int型然后再运算,返回值变成了int型,或许还会想为什么两者代表的都是1+2为什么第二个非法呢,因为在运算的时候第二个1和2从byte型的盒子里跑到了int型的盒子内,而第一个里的1和2不在任何盒子里,所以第二个如果要把它变成byte型,就要打破盒子也就是强转

    i++先运算(包括比较),先赋值,先输出,再自加,自加表示对本身的操作等同于i=i+1(int i=5;int a=i++;    此时a=5,i=6 )    byte a=127   byte=++a;   是对a本身操作,a的类型并没有转换,而

    byte c=a+1   右边变成一个运算,所以会自动转换为int型

    int i=5;int a=i++ + i++;        此时a=11,i=7第一个i++是5++,第二个i++因为第一个i++结束变成6++  ,所以a=5+6=11;    i=i+1+1=7

    int b=i++ + i-- + i++    5++  + 6-- + 5++ =16

    ++i 先自加,再赋值(int i=5;int a=++i;    此时a=6,i=6 )

    面试题

    int i=3;  i=i++;  i=i++;  输出的i都为3,不变

    原因:其实a++的运算,是在a进行运算之前,先开辟一块内存用来存储变量a的复制,b真正指向的其实是a运算之前的复制,所以b的值为3

    而i=i++,由于两边变量相同,i的复制最后覆盖了i++后的值

    i++在内存中是比较奇特的,而a=b+c 在内存中,b和c并不会复制,而是直接将b和c相加,得到的值赋给a

    i*=++i       i= i* ++i=12*13

    逻辑和关系运算符

    !=表不等  == 表相等

    &&短路与,||短路或  如果第一个表达式能确定结果,第二个表达式就不进行计算

    &,|  两个表达式都进行计算

    建议用短路与与短路或,避免一些错误产生,例:x!=0&&1/x  当x=0时确定结果,不会执行第二个表达式避免了错误的产生

    expression1 ^ expression2 异或,两侧真假相同,为假


    三元运算符

    condition?expression1:expression2    当condition为真时计算第一个表达式,为假计算第二个表达式

    面试题:    System.out.println(3>2?2:3.0);

    注:1.表达式1和表达式2决定返回值类型

            2.如果表达式类型不一致,必须进行类型转换,转换为表达式类型中较大的一个类型,从而决定返回值

            3.表达式1和表达式2中都可以再套一个三元运算符构成了复杂的三元运算符

    位运算符(针对二进制),1表示true,0表示false  (了解)

    无符号右移:符号位不跟着移动,有符号右移>>>:符号跟着一起移动(不存在有符号左移)

    5<<2左移两位    0000 0101  左移两位后0001 0100

    5>>2

    若是int型表32位,则 1<<35  与1<<3相同,因为需要进行模32的运算

    1&1为1,否则为0  0|0为0,否则为1

    异或:相同为false(0),不同为true(1)

    4取反为-5  4二进制为0100取反为1011,第一位为1表负数,-1去反转换为十进制为-5

    面试题:把8变成2最快效率,把8右移二位(因为8/2计算机也会先转换为2进制,再运算)


    输入输出

    控制台输入:构建Scanner对象,并与“标准输入流”System.in关联。

    Scanner in=new Scanner(System.in);    

    String name=in.nextLine();  //nextLine()表示获取一行   

    使用println有可能读取的是一个空行

    String firstName=in.next();  //读取一个单词,以空格为分隔符

    int age=int.nextInt;  //读取一个整数,举一反三可以读取其它基本类型

    格式化输出(了解)实际调用了format

    System.out.printf(“hello,%s,you‘ll be %d”,name,age)   表示以%s的形式表示name

    每一个以%字符开始的格式说明符都用相应的参数替换,f表浮点,s表字符串,d表十进制

    %8.2f  表示 打印8个字符,小数点后有两位

    %,d     表示将整数以逗号进行间隔

    print 表示不换行的打印

    输出时不管任何类型都会先转换为String然后输出

    相关文章

      网友评论

        本文标题:第一部分 Java基础语法(上)

        本文链接:https://www.haomeiwen.com/subject/jtxpyxtx.html