JavaSE_01_数据类型和运算符
主类(public class)
public static void main(String[] args){} //一般来说主方法写在主类中
Java
开发中,一切皆对象,所有的属性、方法都必须被“包”在类中
任意一个.java
源文件中只能有一个public class
类,且类名需要与文件名一致;其他不加public
权限的类可以有多个
args
数组可以从外部传参
在命令行中,在程序还未跑起来之前就传入参数
java class_name args[0]的值 args[1]的值 //在命令行中执行
JDK
JRE
JVM
JDK:java development kit //包含了JRE,还具备一些开发工具:javac(编译工具),jstack(查看JVM堆栈内存情况)JRE:java runtime environment //使用java开发的系统或app要跑起来必须具备的环境
java
程序运行起来经历的过程
1.编译阶段,通过 javac
将*.java
(给程序员看) 转换为 *.class(给JVM
看)
2.通过程序入口(主函数main())来执行 *.class,通过命令 java
配置环境变量的本质
告诉操作系统,在哪里找可执行程序
IDEA快捷键
sout
输出
psvm
主方法
java
和C++都是强类型语言:一个变量在定义前就必须规定好它的类型
数据类型
八大基本数据类型(纯小写)
在Java
中,定义一个变量最好给它初始化
所有的基本数据类型都有包装类:(8大基本数据类型转为引用数据类型,变为对应的包装类)
String本身就是类,不属于包装类
- int Integer
- char Character
- 其他基本数据类型类似于 short Short,包装类只是首字母大写了
数值型
-
整型 byte(1)<short(2)<int(4)<long(8)
byte多用于文件和网络传输
short基本没用
int的取值范围:[-231,231-1](最高位是符号位),最大值为21亿多
System.out.println(Integer.MAX_VALUE); //2147483647System.out.println(Integer.MAX_VALUE+1); //-2147483648
+1后成为“-0”,为了保证0的唯一性,将此种情况定义为最小值,将负数区间往外扩增了一个单位,达到-2147483648。所以-2147483648对应的二进制序列实际上是1000…000(1后面全0)
long的最大值有900亿亿多
long a = 10L;long a = 20l;
直接写出来的整数默认为int类型
-
浮点型 float(4)<double(8)
float a=10.1F;float b=3.5f;
double最常用,在Java中直接写出来的小数,默认为double类型
浮点数在计算机内部通过整数来模拟
double a=1.1;double b=1.1;//输出a*b 最后面有多余的数 1.2100000000000000002,这种现象是随机的
一般只看小数点后6位 或 用BigDeciaml
代替double
字符型 char(2 Byte)
Java中,字符集默认为Unicode(16进制)编码,支持所有语言
Java中,所有形式的char序列均解释为UTF-16
序列
并不推荐在自己的代码中使用char型,除非对底层非常了解
C语言使用ASCII编码
布尔型 boolean(不同于C语言)
C中,可以用!0表示true,用0表示false;
java
中,真只能用true表示,假只能用false;
类型大小取决于JVM
版本
boolean a = true;String ret = "运算结果";System.out.println(ret+a); //运算结果true
引用数据类型(大驼峰)
数组
类
class定义的类名,规范写法为:首字母大写
String(首字母大写)
“ ”双引号括起来的内容称为字符串字面量
转义(\) \t 制表; \n 换行; \’ \" \\
Java中,任意数据类型只要和字符串进行“+”操作,都会把其他类型转为字符串,然后进行字符串的拼接
Interface
变量命名规则
- 数字不能开头,由数字、字母、下划线、$(不推荐用)组成
- 大小写敏感
- 不能使用关键字
- 词性推荐用名词
- 小驼峰命名法,见名知意,当一个变量由多个单词构成,除第一个单词外,后面的每个单词首字母大写;若由一个单词构成,全部小写
常量
final int a= 10; //用final关键字修饰的量称为常量10 //字面值常量010; //8进制,相当于10进制的80x10; //16进制,相当于十进制的16... //程序中直接写出来的值,称为字面量
常量不能在程序运行过程中发生修改
数据类型转换
小类型转为大类型,自动提升
- 小类型的变量值赋值给大类型 long b = 20;
- 小类型和大类型进行数学运算时,首先会将小类型提升为大类型而后进行数学运算 long b = 4 + 1 L;
大类型转为小类型需要强制类型转换,可能会造成数据精度丢失
属于同一范畴,不同长度的数据类型才能转换 比如boolean 和 int 无法转换
intlong
long a = 20; //java中字面值整数默认为int,在这里隐式转为long
intdouble
byteint
byte a = 120; //字面值120,没越界,可行byte b = 130; //报错,字面值超过128
当把一个int变量赋值给byte,无论是否超出byte的范围,都需要强转
int a = 10;byte b = (byte)a;
对于数值型(byte、short)和字符型,如果是小于4字节的数据类型,在存储时会转为4字节,byte类型在保存时会转为int.
CPU在读写数据时,都是以4字节为单位进行数据读写的
byte a = 10; //a被隐式提升为int了byte b = 20;byte c = (byte)(a+b);
final byte a = 10; //a不能提升为intfinal byte b = 10;byte c = a + b; //被fianl修饰的变量,除了数据值不能修改,类型也不能修改
charint
242. 有效的字母异位词
//时间击败23.77%,内存击败69.61%(只考虑了字符串全为小写字母)class Solution { public boolean isAnagram(String s, String t) { if(s.length() != t.length()){ return false; } for(int i='a'; i<= 'z'; ++i){ int sumS= 0, sumT= 0; for(int j= 0; j< s.length(); ++j){ if(s.charAt(j) == i) sumS++; if(t.charAt(j) == i) sumT++; } if(sumT != sumS){ return false; } } return true; }}//进阶,若字符串中含有Unicode码,Unicode编码码可能存在一个字符对应多个字节的问题,用哈希//还没学到哈希,暂且复制官方题解,后续再回过头来看class Solution { public boolean isAnagram(String s, String t) { if (s.length() != t.length()) { return false; } Map<Character, Integer> table = new HashMap<Character, Integer>(); for (int i = 0; i < s.length(); i++) { char ch = s.charAt(i); table.put(ch, table.getOrDefault(ch, 0) + 1); } for (int i = 0; i < t.length(); i++) { char ch = t.charAt(i); table.put(ch, table.getOrDefault(ch, 0) - 1); if (table.get(ch) < 0) { return false; } } return true; }}作者:LeetCode-Solution链接:https://leetcode-cn.com/problems/valid-anagram/solution/you-xiao-de-zi-mu-yi-wei-ci-by-leetcode-solution/来源:力扣(LeetCode)
intString
Web开发中所有的输入框都是输入字符串的
int->String
-
使用String对象+ 将后面的内容转为字符串
sout(""+num);
-
String.valueOf(num)
String->int
String str = "123"; //str必须是纯数字,否则会有数据格式异常报错int a = Integer.parseInt(str);
数据类型默认值
所有的数据类型都有默认值(定以后没有赋值),定义在类中才存在默认值,方法中的局部变量不存在默认值
- 数值型->0
- 浮点型->0.0
- 字符型->‘\u0000’(一个空格)
- 布尔型->false
- 引用数据类型->NULL
运算符
算数运算符
%
也可以用于小数的运算
增量赋值运算符
+= -+ *= //= ……
自增自减
++a 先自增,再用a
a++ 先用a,再让a自增
关系运算符
> < >= <= == !=
逻辑运算符
&& || ~
短路
多个条件 && 时,有一个为false,后面的不在判断
多个条件||时,
Java中当多个运算数为布尔值时,也可以用& | 来表示 与 和 或,但是不推荐这样用,这样用的话,不会触发短路,会把所有条件执行一遍
位运算符
& | ^ ~
~实质上就是 取相反数-1
移位
>>1 //除以2<<1 //乘以2
Java中,没有无符号左移(<<<)
三目运算符
运算符优先级
注释
单行注释
Ctrl+/
(IDEA中)
多行注释(不推荐/* */)
对一大段注释,用文档注释
/***一般用于方法和类上,描述类和方法的作用功能*/
使用javadoc
命令