孙浩java基础知识教程_第一部分 Java基础语法(上)

Java标识符

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

规范:

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

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

关键字不能用作标识符

标识符是大小写敏感的

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

java命名规范

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

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

(3)包名:xxyyzz

(4)常量名  XXX_YYY_ZZZ

格式问题

7702b1caa6a1?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

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取余,除尽为止,余数从上向下看为二进制源码结果,由于是正数所以原码和补码相同

7702b1caa6a1?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

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

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

7702b1caa6a1?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

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)//字符串转换为字符

7702b1caa6a1?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

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++后的值

7702b1caa6a1?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

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然后输出

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值