Java学习笔记 第二章 java基础
JAVA学习笔记第二章
2.JAVA基础
2.1输出输入
System.out.print 将双引号中的内容原样输出,不换行
System.out.println 将双引号中的内容原样输出,换行
转移字符:
\就是转移字符:作用将后面普通的字母转换为特殊含义
\n 换行
\t 制表符tab
输入:
import java.util.Scanner; //在java.util下将Scanner拿过来用
public class Test{
public static void main(String[] args){
//创建一个扫描器
Scanner sc = new Scanner(System.in);
//让扫描器扫描键盘录入的int类型数据
int r = sc.nextInt();
}
}
import java.util.Scanner;
public class Test{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
System.out.println("name:");
String name = sc.next();
System.out.println("age:");
int age = sc.nextInt();
System.out.println("height:");
double height = sc.nextDouble();
//没有nextChar()
String sexStr = sc.next();
char sex = sexStr.charAt(0);
//char sex = sc.next().charAt(0);
}
}
2.2数据类型
2.2.1标识符
包,类,变量,方法...
只要是起名字的地方,那个名字就是标识符
标识符的定义规则:
- 可以是数字、字母、下划线、美元符号
- 不可以以数字开头
- 不可以使用java中的关键字
- 数据类型的关键字:class interface enum byte short int long float double char boolean void
- 定义流程控制的关键字:if else switch case default while do for break continue return
- 定义访问权限修饰符的关键字:public protected private
- 定义类,函数,变量修饰符的关键字:abstract final static synchronized
- 定义类与类之间的关系的关键字:extends implements
- 定义建立实例及引用实例,判断实例的关键字:new this super instanceof
- 用于异常处理的关键字:try catch finally throw throws
- 用于包的关键字:package import
- 其他修饰符的关键字:native strictfp transient volatitle assert
- 见名知义
- 大小写敏感
- 驼峰命名
- 类名 首字母大写,其余遵循驼峰命名
- 方法名,变量名:首字母小写,其余遵循驼峰 命名
- 包名:全部小写,不遵循驼峰命名
- 长度无限制,但是不建议太长
2.2.2常量
java中常用final来定义一个常量,常量一旦被初始化之后不能修改值
整型常量 123
实型常量 123.123
字符常量 'a'
逻辑常量 true false
字符串常量 "hello"
一个变量被final修饰,这个变量就变成一个常量,这个常量的值就不可变了。
字符常量常定义为大写
2.2.3变量
变量本质上就是代表一个“可操作的存储空间”,通过变量名来访问“对应的存储空间”,从而操纵这个存储空间存储的值。java是一种强类型的语言,每个变量都必须要声明其数据类型,变量的数据类型决定了变量占用存储空间的大小,int a=3;表示a变量空间大小为4个字节,变量作为程序中最基本的存储单元,包括变量名、变量类型、作用域。必须在使用前对变量声明,才能为其分配相应长度的存储空间。
变量声明的格式
type varName[=value][,varName[=value]...];
数据类型 变量名[=初始值][,变量名[=初始值]...];
作用域:指的就是作用范围,变量在什么范围中有效,作用范围就是离它最近的{}
2.2.4数据类型分类
基本数据类型
- 数值型:bytes, short, int, long, float, double
- 字符型:char
- 布尔型:boolean
引用数据类型(除了基本数据类型都属于引用数据类型)
- 类class
- 接口interface
- 数组
2.2.4.1整型数据类型
类型 | 占用存储空间 | 表示范围 |
---|---|---|
byte | 1字节 | -128 ~ 127 |
short | 2字节 | -32768 ~ 32767 (-2^15 ~ 2^15 - 1) |
int | 4字节 | -2147483648 ~ 2147483647 |
long | 8字节 | -2^63 ~ (2^63)-1 |
注意:超出范围的赋值会报错
long num = 12345678910;
//整数类型默认是int类型的,所以12345678910时一个int类型的数,对于int类型来说,它超出范围
//要想把一个数给long类型变量,那么后面加上L或者l即可
long num1 = 12345678910L;
//只有这个整数超出int类型的范围了,后面才需要加上L,否则无需加L也可以赋值给long类型。
进制:逢几进位
二进制:B 前面加上0b
八进制:Q 前面加上0表示八进制
十进制:D 一般表示就是十进制
十六进制:H 前面加上0x表示十六进制
2.2.4.2浮点数
十进制数:3.14 314.0 0.314
科学计数法: 314e-2 ----> 314 * 10 ^ (-2)
float类型又称为单精度类型,尾数可以精确到7位有效数字,很多情况下float不够,double则是float类型精度的两倍,float类型的数值后缀F或者f,没有后缀F/f的浮点数值默认为double类型,也可以在浮点数值后添加后缀D或者d,明确其为double类型。
有效位数指的是从左开始第一个不为0的数到最后一个数
类型 | 占用存储空间 | 表示范围 |
---|---|---|
float | 4个字节 | 大约+-3.40282347E+38F(有效位数6-7位左右) |
double | 8个字节 | 大约游戏哦啊位数为15-16位左右 |
注意最好不要进行浮点类型的比较
2.2.4.3字符类型
编码和字符集:
什么是编码
ascii 英文字符集 用一个字节的7位表示
IOS8859-1 西欧字符集 用一个字节的8位表示
GB2312 简体中文字符集 最多使用两个字节编码
GBK 升级版GB2312,加入繁体字,最多使用两个字节编码
Unicode 国际通用字符集,融合目前人类使用的所有字符,为每个字符分配唯一的字符码,兼容ascii,前128个位置ascii
utf-8
常使用单引号表示字符常量,字符型在内存中占用两个字节
char类型用来表示在unicode编码表中的字符,unicode编码被设计用来处理各种语言文字,占用2个字节,可允许65536个字符。
转义字符
转义符 | 含义 | unicode值 |
---|---|---|
\b | 退格 | \u0008 |
\n | 换行 | \u000a |
\r | 回车 | \u000d |
\t | 制表符 | \u0009 |
\" | 双引号 | \u0022 |
\' | 单引号 | \u0027 |
\\ | 反斜杠 | \u005c |
char c1 = 'A'
//char类型我们看到的样子就是它本身的字面常量,但是底层在计算的时候实际上是按照ascii码进行计算的
//ascii表记住 A-65 Z-90 a-97 z-122
记事本编码一般使用ANSI或者UTF-8编码,ANSI会查看当前操作系统的编码,使用操作系统的编码
2.2.4.4布尔值
boolean类型有两个常量,true和false,在内存中占一位,不可以使用0或者非0的整数代替true和false。
常用来判断逻辑条件,一般用于程序流程控制。
2.2.4.5强制类型转换
在赋值或者算数运算的时候,要求数据类型一致,就要进行类型的转换
存在两种转换的种类:自动转换和强制转换
double d = 6; //int --> double 自动转换
int i = int(6.5); // double --> int 强制转换
//多种数据类型参与运算的时候,整数类型,浮点类型,字符类型都能参与运算,唯独布尔类型不可以参与运算
//类型级别从低到高:byte, short, char, int, long, float, double
//找到级别最高的数据类型,其余的类型都转换为当前表达式中的级别最高的类型进行计算
//左>右 自动转换 左<右 强制类型转换 左=右 直接赋值
//特殊情况 对于byte, short, char类型来说,只要在他们的表示范围中,赋值的时候不需要进行强制转换
byte b = 12;
2.3运算符
java支持的运算符:
算数运算符: + - * / % ++ --
赋值运算符: ==
扩展赋值运算符: += -= *= /=
关系运算符:> < >= <= == !=
逻辑运算符: && || ! & | ^
位运算: & | ^ ~ >> << >>>
条件运算符:? :
运算符Operator
表达式expression
操作数Operand
语句Sentence
++和--规则:在前面,先加1或者减1再进行计算,在后面,先计算之后再加1或者减1
int a = 5;
int m = a++ + 7; // m = a + 7; a = a + 1;
int n = ++a + 7; // a = a + 1; n = a + 7;
int a = 5;
System.out.println(a++ + a++); //运算符优先级: ++ > +
//5 + 6 = 11; a = 7;
System.out.println(a++ + ++a);
//7 + 9 = 16; a = 9;
System.out.println(++a + a++);
//10 + 10 = 20; a = 12;
System.out.println(++a + ++a);
//12 + 13 = 25; a = 14;
逻辑运算符:左右都是布尔值
逻辑与&:规律只要有一个操作数是false,结果一定为false
短路与&&:效率更高一些,只要第一个为false,后面的表达式不用再计算,结果一定为false
逻辑或|:只要有一个操作数是true,结果一定为true
短路或||:效率跟高一些,只要第一个为true,后面的表达式不用再计算,结果一定为true
逻辑非!:与表达式的结果相反
逻辑异或^:两个表达式结果相同,结果为false,表达式结果不相同,结果为true
条件运算符:三目运算符
格式a?b:c
如果a的结果为true,表达式的结果为b,a的结果为false,表达式的结果为c
位运算符:左右连接的都是数字
在底层是按照位进行操作的
>>>是无符号右移
~表示按位取反
运算符的优先级:
2.4流程控制
控制语句的执行顺序,控制语句分为三种:顺序结构、条件判断结构、循环结构
条件判断结构
- if
随机数的生成
分支的练习题目:
package code;
import java.util.*;
public class RemoveDesk {
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
System.out.println("请输入性别");
char sex = sc.next().charAt(0);
System.out.println("清输入年龄");
int age = sc.nextInt();
if (age > 7) System.out.println("可以搬桌子");
else if ( age > 5 && sex == '男') System.out.println("可以搬桌子");
else System.out.println("你还太小了");
}
}
- switch
循环结构:
- while
- do while
- for
流程控制的三个重要关键字
break的作用:停止最近的循环
continue的作用:结束本次最近的循环,进入下一次循环
return的作用:遇到return结束当前正在执行的方法,跟循环无关
2.5方法
2.6数组
使用:
数组的内存分析:
数组的遍历:
Arrays工具类
在System中也存在copy数组的方法
二维数组:
2.7main方法
手动传入实际参数:
2.8可变参数
方法内部对可变参数的处理和数组一样,当和其他参数使用时,可变参数放最后。
2.9IDEA
常用代码模版:
调试: