java学习笔记(一)

java学习笔记(一)



一、进制及其转换

1.1进制类型

十进制:人类使用
二进制:计算机使用
八进制和十六进制:为了更好的表示二进制(缩短二进制长度)
各进制数之间的关系
在这里插入图片描述
Java 语言整型常量的四种表示形式
十进制整数,如:99, -500, 0
八进制整数,要求以 0 开头,如:015
十六进制数,要求 0x 或 0X 开头,如:0x15
二进制数,要求0b或0B开头,如:0b01110011

1.2计数范围

符号位

二进制数如何表示正数和负数
使用最高位作为符号位,0代表整数,1代表负数;其余数位用作数值位,代表数值。

字节 byte表示的数的范围

无符号数:0-255(28-1) 256个数
有符号数:-128(-27)–127(27-1) 还是256个数

字符表示的数的范围

无符号数 0-65535(216-1) 65536个数
有符号数 -32768(-215)-----32767(215-1) 还是65536个数

1.3ASCII (阿寺克)

o0~31及127(共33个)是控制字符或通信专用字符(其余为可显示字符),如控制符:LF(换行)、CR(回车)、DEL(删除)、BS(退格)等
32 空格
48~57为0到9十个阿拉伯数字。
65~90为26个大写英文字母
97~122号为26个小写英文字母

二、八大基本数据类型入门

2.1 标识符

标识符是用来给变量、类、方法以及包进行命名的,如Welcome、main、System、age、name、gender等。标识符需要遵守一定的规则:
标识符必须以字母、下划线_、美元符号KaTeX parse error: Unexpected character: '' at position 7: 开头。 ̲标识符其它部分可以是字母、下划…”和数字的任意组合。
Java 标识符大小写敏感,且长度无限制。
标识符不可以是Java的关键字。

标识符的使用规范

表示类名的标识符:每个单词的首字母大写,如Man, GoodMan
表示方法和变量的标识符:第一个单词小写,从第二个单词开始首字母大写,我们称之为“驼峰原则”,如eat(), eatFood()

Java不采用通常语言使用的ASCII字符集,而是采用Unicode这样标准的国际字符集。因此,这里字母的含义不仅仅是英文,还包括汉字等等。但是不建议大家使用汉字来定义标识符!

合法的标识符
int  a = 3;
int  _123 = 3;
int  $12aa = 3;
int  变量1 = 55;  //不建议使用中文命名的标识符
不合法的标识符
int  1a = 3;   //不能用数字开头
int  a# = 3;   //不能包含#这样的特殊字符
int  int = 3;  //不能使用关键字

2.2 关键字

Java关键字是Java语言保留供内部使用的,如class用于定义类。 关键字也可以称为保留字,它们的意思是一样的,我们不能使用关键字作为变量名或方法名。

Java中的关键字/保留字

abstract assert boolean break byte case catch char class const continue default do double else extends final finally float for goto if implements import instanceof int interface long native new null package private protected public return short static strictfp super switch synchronized this throw throws transient try void volatile while
这些不建议背,以后见多了多留意就行,反正你现在也记不住

2.3 常量和变量

常量变量定义

在程序中存在大量的数据来代表程序的状态,其中有些数据在程序的运行过程中值会发生改变,有些数据在程序运行过程中值不能发生改变,这些数据在程序中分别被叫做变量和常量。

变量举例:

在2D游戏程序中,需要代表人物的位置,则需要2个变量,一个是x坐标,一个是y坐标,在程序运行过程中,这两个变量的值会发生改变

常量举例

代表常数,便于程序的修改(例如:圆周率的值)
增强程序的可读性(例如:常量UP、DOWN、LEFT和RIGHT分辨代表上下左右,其数值分别是1、2、3和4)
在实际的程序中,可以根据数据在程序运行中是否发生改变,来选择应该是使用变量代表还是常量代表。
变量本质上就是代表一个”可操作的存储空间”,空间位置是确定的,但是里面放置什么值不确定。我们可通过变量名来访问“对应的存储空间”,从而操纵这个“存储空间”存储的值。
Java是一种强类型语言,每个变量都必须声明其数据类型。变量的数据类型决定了变量占据存储空间的大小。 比如,int a=3; 表示a变量的空间大小为4个字节。

变量的声明

格式为:
type  varName [=value][,varName[=value]...];
 //[ ]中的内容为可选项,即可有可无
数据类型  变量名  [=初始值] [,变量名  [=初始值]];

举例:

public class TestDataType1{
    public static void main(String [] args){
        //表示一个人年龄的变化()
        int age = 15;
        System.out.println("age="+age);
        //int age = 16;
        age = 16;
        System.out.println("age="+age);            
        //表示两个人体重
        double weight1 = 70.5;
        System.out.println("weight1="+weight1);
        double weight2 = 75.5;
        //第二个人的体重比第一个人重10公斤  70.5+10=80.5
        weight2 = weight1 + 10;
        System.out.println("weight2="+weight2);            
        //变量的其他定义方式
        double price1,price2=0;
        price1 = 15.5;
        System.out.println("price1="+price1);
        System.out.println("price2="+price2);     
    }
}

2.3.1常量

常量通常指一个固定的值,如:1、2、’a’、’b’、true、false、”helloWorld”等。在Java语言中,也可以利用关键字final来定义一个常量。 常量一旦被初始化后不能再更改其值。

声明格式为:
final  type  varName = value;

为了更好的区分和表述,一般将1、2、3、’a’、’b’、true、false、”helloWorld”等称为字面常量,而使用final修饰的PI等称为符号常量。

public class TestDataType2 {
   public static void main(String[ ] args) {
      final double PI = 3.14;
      // PI = 3.15; //编译错误,不能再被赋值! 
      double r = 4;
      double area = PI * r * r;
      double circle = 2 * PI * r;
      System.out.println("area = " + area);
      System.out.println("circle = " + circle);
   }
}

2.4 使用Scanner进行键盘输入

为了我们能写出更加复杂的程序,可以让我们的程序和用户可以通过键盘交互,我们先学习一下简单的键盘输入和输出。

import java.util.Scanner;
public class TestDataType3 {
   public static void main(String[ ] args) {
      final double PI = 3.14;
      // PI = 3.15; //编译错误,不能再被赋值!
      Scanner input = new Scanner(System.in);
      System.out.println("请输入半径:");
      double r = input.nextDouble();
      double area = PI * r * r;
      double circle = 2 * PI * r;
      System.out.println("area = " + area);
      System.out.println("circle = " + circle);
   }
}

注意:
1)System.in代表键盘输入,System.out代表控制台输出
2)Scanner input = new Scanner(System.in);是创建一个对象,后面进行详细讲解,此处会使用即可
3)需要通过import java.util.Scanner;实现导入,指明Scanner类的完整路径
4) double r = input.nextDouble(); 从键盘输入一个double类型数赋给半径变量r。

变量和常量命名规范

所有变量、方法、类名:见名知义
类成员变量:首字母小写和驼峰原则: monthSalary
局部变量:首字母小写和驼峰原则
常量:大写字母和下划线:MAX_VALUE
类名:首字母大写和驼峰原则: Man, GoodMan
方法名:首字母小写和驼峰原则: run(), runRun()

2.5 数据类型

Java中定义了3类8种基本数据类型

数值型- byte、 short、int、 long、float、 double
字符型- char
布尔型-boolean
整型数据类型
类型 和其表数范围
byte -27 ~ 27-1(-128~127)
short -215 ~ 215-1 (-32768~32767)
int -231 ~ 231-1 (-2147483648~2147483647) 约21亿
long -263 ~ 263-1

4.1.算术运算符

算术运算符中+,-,*,/,%属于二元运算符,二元运算符指的是需要两个操作数才能完成运算的运算符。其中的%是取模运算符,就是我们常说的求余数操作。
二元运算符的运算规则:

整数运算:

如果两个操作数有一个为long, 则结果也为long。
没有long时,结果为int。即使操作数全为short,byte,结果也是int。

浮点运算:

如果两个操作数有一个为double,则结果为double。
只有两个操作数都是float,则结果才为float。

取模运算:

其操作数可以为浮点数,一般使用整数,结果是“余数”,“余数”符号和左边操作数相同,如:7%3=1,-7%3=-1,7%-3=1。

算术运算符中++(自增),–(自减)属于一元运算符,该类运算符只需要一个操作数。
i++;和++i;
如果是一条单独的语句,没有差别,都是自增1;
如果不是一条单独的语句(语句的一部分)有差别
int n = 6 + m++; 先运算符再+1
int n = 6 + ++m; 先+1再运算
先算乘除,再算加减。算术运算符的优先级别是不同的:
++ – 大于 * / % 大于 + -
可以使用小括号改变运算顺序

int i = 10;
public class TestOperator1{
   public static void main(String [] args){
      // /  %
      System.out.println( 12 / 3);  //4
      System.out.println( 12 / 5);  //2
      System.out.println( 12 % 5); // 2
      System.out.println( 12 / 5.0); //2.4
      System.out.println( 12 % 5.0);//2.0       
      //+
      System.out.println( +3); //3
      System.out.println( 6+3); //9
      System.out.println( 6+3+"ABC"); //9ABC
      System.out.println( "ABC"+6+3); //ABC63
      System.out.println( 'a'+5); //not a5  but  102
      //++ 
      int i = 5;
      System.out.println("i="+i);
      //i++; //  i = i+1  自增1
      ++i; // i = i+1  自增1
      System.out.println("i="+i);       
      int m = 5;
      //int n = 6 + m++; //先运算符再加1
      //int n = 6+m;
      //m++;
      //System.out.println(m+"   "+n); // 6   11
      //int n = 6 + ++m;
      m = m+1;
      int n = 6+m;      
      System.out.println(m+"   "+n); // 6  12

      System.out.println(5 + 6 / 3 % 2 - 4);
      System.out.println(5 + (6 / 3 % 2) - 4); //提高可读性
      System.out.println((5 + 6) / 3 % 2 - 4); //改变运算顺序

   }
}

但是有一种容易错情况

int i = 10;
System.out.println("i:"+i);
int j = i++;
System.out.println("i:"+i);
System.out.println("j:"+i);

其结果为:
在这里插入图片描述

int i = 10;
System.out.println("i:"+i);
int j = ++i;
System.out.println("i:"+i);
System.out.println("j:"+i);

其结果为
在这里插入图片描述
j=i++这种情况就是运算符的顺序,当i赋值给j之后,i进行了++操作
同理j=++i,只有i进行++操作之后才能赋值给j。

4.2.赋值运算符

赋值运算符可以说是Java中使用频率最高的运算符了,也是运算级别最低的运算符。它的运算顺序是自右向左。
除了基本赋值运算符外,还可以和算术运算符结合,组成扩展赋值运算符。
在这里插入图片描述

public class TestOperator2 {
    public static void main(String[] args) {
      int a=3;
      int b=4;
      a+=b;//相当于a=a+b;
      System.out.println("a="+a+"\nb="+b);
      a=3;
      a*=b+3;//相当于a=a*(b+3)
      System.out.println("a="+a+"\nb="+b);
    }
}

4.3.关系运算符

关系运算符用来进行比较运算,如表所示。关系运算的结果是布尔值:true/false;经常用在选择结构if、循环结构for while的条件表达式中,进行条件判断。
在这里插入图片描述

4.4.逻辑运算符

Java中的逻辑运算符如表所示。逻辑运算的操作数和运算结果都是boolean值。
在这里插入图片描述
短路与和短路或采用短路的方式。从左到右计算,如果只通过运算符左边的操作数就能够确定该逻辑表达式的值,则不会继续计算运算符右边的操作数,提高效率。

public class TestOperator4{
   public static void main(String [] args){
      //& 与 AND :两个操作数都是true,结果是true,否则是false       
      System.out.println(true & true); //true
      System.out.println(true & false); //false
      System.out.println(false & true); //false
      System.out.println(false & false); //false    
      //| 或 OR :两个操作数都是false,结果是false,否则是true
      //有一个操作数是true,结果是true     
      System.out.println(true | true); //true
      System.out.println(true | false); //true
      System.out.println(false | true); //true
      System.out.println(false | false); //false    
      // ! 非 NOT
      System.out.println(!true); //false
      System.out.println(!false); //true
      //^ 异或  两个操作数相同,结果是false,否则是true
      System.out.println(true ^ true); //false
      System.out.println(true ^ false); //true
      System.out.println(false ^ true); //true
      System.out.println(false ^ false); //false    
      //&和&&的区别和联系
      //第一个操作数是true,不能确定整个表达式结果,第二个操作数须进行运算,此时两者没有区别
      System.out.println(7<8 & 'A'=='a'); 
      System.out.println(7<8 && 'A'=='a');
      //第一个操作数是false,能确定整个表达式结果,第二个操作数还要进行运算吗?已没有必要了;
      //& 会计算第二个表达式的值
      //&& 短路与 不会计算第二个表达式的值  性能高  在实际开发中使用更多
      System.out.println(7>8 & 'A'=='a'); 
      System.out.println(7>8 && 'A'=='a');
      //&还可以做位运算符,&&不可以
      System.out.println(5&6);
      //System.out.println(5&&6);       
   }  
}

4.5.位运算符

位运算符是对操作数以二进制比特位为单位进行操作和运算,操作数和结果都是整数。
如果操作的对象是char、byte、short,位移动作发生前其值会自动晋升为int,运算结果也为int。
在这里插入图片描述

public class TestOperator5{
   public static void main(String [] args){
      System.out.println(5&6);//4
      System.out.println(5|6);//7
      System.out.println(5^6);//3
      System.out.println(~6); //-7
      //异或:可以理解为不进位的加法和不进位的减法
      //异或的特点:一个数据对另一个数据位异或两次,该数本身不变
      System.out.println(5^6^6);      
      //移位运算符  << 左移  >> 右移  >>> 无符号右移
      //右移一位,相当于除以2
      System.out.println(-16>>1); //-8
      System.out.println(-16>>2); //-4
      //左移一位,相当于乘以2
      System.out.println(16<<1); //8
      System.out.println(16<<2); //4
      System.out.println(-16>>>1); //-8      
      //面试题:请使用最快的方式计算出2*8=?
      System.out.println(2*8);
      System.out.println(2<<3);
   }
}

4.6 短路逻辑运算符

其他的情况不多说,有一种容易出错情况

int i = 10;
        int j = 20;
        System.out.println((i++) > 100 & (j++ >100));
        System.out.println("i:"+ i );
        System.out.println("j:"+ j );

运算结果
在这里插入图片描述

int i = 10;
        int j = 20;
        System.out.println((i++) > 100 && (j++ >100));
        System.out.println("i:"+ i );
        System.out.println("j:"+ j );

运行结果
在这里插入图片描述
&&为前后结果有一个为false结果为false,所以前面已经为false时,后面就不再执行。

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

申申吖的!

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值