> 文档中心 > JavaSE_01_数据类型和运算符

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、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命令