【【Java基础】】 null不能用System.out.println()语句来输出 字符常量 ‘ ’中间有且仅有一个字符 数据范围和字节数不一定相关,例如float数据范围比long更加广泛,但是float是4字节,long是8字节。 字符串不是基本类型,而是引用类型。 浮点型可能只是一个近似值,并非精确的值 使用变量注意事项: int a=1,b=2,c=3; 可以通过一条语句创建多个变量,不过不推荐这么写。 变量的使用不能超过作用域的范围, 作用域:从定义一个变量开始,一直到直接所属的大括号结束为止。 没有进行赋值的局部变量不能直接使用,一定要赋值之后才能使用。 自动类型转换: 特点:代码不需要特殊处理,自动完成 规则:数据范围从小到大 强制类型转换: 特点:代码进行特殊的格式处理,不能自动完成。 格式:范围小的类型 范围小的变量=(范围小的类型)原本范围大的数据; 注意事项: 1.强制类型转换一般不推荐使用,因为有可能发生精度损失,数据溢出。 2.byte/short/char都可以发生数学运算,例如加法“+”。 3.byte/short/char这三种类型在运算的时候,都会被首先提升成为int类型,然后再计算。 4.boolean类型不能发生数据类型转换。 ASCII字符值 48代表‘0’ 65代表‘A’ 97代表‘a’ char类型字符和int类型数字对照关系表(编码表): ASCII码表: Amercian Standard Code for Information Interchange ,美国信息交换标准代码。 Unicode码表:万国码,也是数字和符号的对照关系,开头0~127部分和ASCII完全一样,但是从128开始含有更多字符。 取模(取余数):% 一旦运算当中有不同的数据类型,那么运算结果将会是数据类型范围大的那种。 任何数据类型和字符串连接的时候,结果都会变成字符串。 自增、自减运算符: 1. 单独使用:不和其他任何操作混合,自己独立成为一个步骤。 2.混合使用:和其他操作混合,例如与赋值混合,或者与打印操作混合等。 使用区别: 1.单独使用的时候前++和后++没有任何区别,也就是:++num和num++是完全一样的。 2.混合使用的时候,有重大区别: A.如果是前++,那么变量会立刻马上+1,然后拿着结果进行使用。【先加后用】 B.如果是后++,那么首先使用变量本来的数值,然后再让变量+1。【先用后加】 3.变量才能使用自增自减运算符,常量不能使用 基本赋值运算符: = 复合赋值运算符: += -= *= /= (复合赋值运算符其中隐藏了一个强制类型转换) 逻辑运算符&& || ! 只能用于boolean值。 与“&&” ,或“||”,具有短路效果:如果根据左边已经可以判断得到最终结果,那么右边的代码将不再执行,从而节省一定的性能。 三元运算符格式: 数据类型 变量名称=条件判断 ? 表达式A :表达式B; 两种错误写法: int result=c>d?0.6:9; c>d?0.6:9; 方法 1.方法定义的先后顺序无所谓 2.方法应该定义在类中,方法的定义不能产生嵌套包含关系。 3.方法定义好了之后,不会执行的,如果想要执行,一定要进行方法的调用。 方法调用格式: 方法名称(); 4.如果方法有返回值,那么必须写上“return 返回值;”不能没有。 5.return后面的返回值类型必须和方法的返回值类型对应起来 。 6.对于一个void没有返回值的方法不能写return后面的返回值,只能写return而已; 7.对于void方法当中最后一行的return可以省略不写 8.方法当中可以存在多个return语句,但必须保证同时只有一个会被执行到,两个return不能连写。 Jshell 脚本工具是JDK9的新特性 使用场景:当我们编写代码非常少的时候,而又不愿意编写类,main方法,也不愿意去编译和运行,这个时候可以使用JShell dos窗口中: jshell + 回车 进入JShell /exit +回车 退出JShell byte/short/char这三种类型在赋值的时候,如果右侧赋值的数值没有超过左侧范围,那么javac编译器将会自动隐式地为我们补上(byte)、(short)、(char) 1.如果没有超过左侧的范围,编译器补上强制。 2.如果右侧超过了左侧范围,那么直接编译器报错。 3.给变量赋值时,若右侧全部是常量,没有任何变量,那么编译器javac将会直接将让干个常量表达式计算得到结果。 short result=5+8;//右侧全部是常量,没有任何变量参与运算,编译之后得到的.class字节码文件当中相当于【直接就是】:short result=13; 右侧的常量结果数值,没有超过左侧范围,所以正确。这称之为“编译器的常量优化”。 但是注意:一旦表达式当中有变量存在,那么编译器就不能进行这种优化。 switch语句的使用注意对象: 1.多个case后面的数据不可以重复。 2.switch后面小括号当中只能是下列数据类型: 基本数据类型:byte/short/char/int 引用数据类型:String字符串、enum枚举 3.switch语句格式很灵活:前后顺序可以颠倒,而且break语句还可以省略,“匹配哪一个case就从哪一个case往下执行,直到遇到break或者整体结束为止”。 while循环语句扩展格式: 初始化语句; while(条件判断){ 循环体; 步进语句; } 初始化语句; do{ 循环体 步进语句 }while(); 分号不要忘记 for循环变量在小括号当中定义,只有循环内部才可以使用。while和do-while循环初始化语句本来就在外面,所以出来循环之后还可以继续使用 反循环次数确定的场景多用for循环,否则多用while循环。 dos窗口中 ctrl+c 结束死循环 IDEA常用快捷键: 快捷键 功能 Alt+Enter 导入包,自动修正代码 Ctrl+Y 删除光标所在行 Ctrl+D 复制光标所在行的内容,插入光标位置下面 Ctrl+Alt+L 格式化代码 Ctrl+/ 单行注释,再按取消注释 Ctrl+Shift+/ 选中代码注释,多上注释,再按取消注释 Alt+Ins 自动生成代码,toString,get,set等方法 Alt+Shift+上下箭头 移动当前代码 println 换行打印 print不换行 循环次数.for变量 数组名称.for变量(变量为i是正序,r是倒序) 生成for循环语句 shift+F6 (笔记本不行)把所选的值进行全局修改。 Ctrl+鼠标点击 查看JDK代码 return 有两个作用:第一停止当前方法,第二将后面的返回值还给调用处。return后面的“返回值”必须和方法名称前面的“返回值类型”保持对应。 方法的三要素:返回值类型、方法名称、参数列表。 方法的三种调用格式: 1.单独调用: 方法名称(参数); 2.打印调用:System.out.println(方法名称(参数)); 3.赋值调用:数据类型 变量名称= 方法名称(参数); PS:返回值类型固定写为void,这种方法只能够单独调用,不能进行打印调用、赋值调用。 方法的重载与 参数个数、参数类型、参数的多类型顺序 相关;与 参数的名称、方法的返回值类型无关; 八进制是由数字0-7组成的,表达方式由数字0(零)开头的, 例:0347 ; 十六进制是由数字0-9和字母A-F组成的,表达方式由数字0(零)加上小写字母x开头的, 例:0x1F3C 。 【【 数组 】】 数组是一种引用类型,数组当中的多个数据类型必须统一,数组的长度在程序运行期间不可改变 数组常见的初始化方式: 动态初始化(指定长度): 数据类型[] 数组名称=new 数组类型[数组长度]; 其中new代表创建数组的动作,右侧括号当中表示保存数据数,是一个int数字。 静态初始化(指定内容): 数组类型[] 数组名称=new 数组类型[]{}; 数据类型[] 数组名称={}; 静态初始化和动态初始话都可以拆分成两个部分,但是静态初始化的省略格式不能进行拆分,否则编译不通过。 直接打印数组名称,得到的是数组对应的:内存地址是哈希值。 访问数组元素的格式: 数组名称[索引值] 索引值从0开始,直到“数组长度-1”为止。 使用动态初始化数组的时候,其中的元素将会自动用有默认值: 整型 默认值为0 浮点型 0.0 字符型 '\u0000' (打印出来不可见) 布尔型 false 引用类型 null 静态初始化也有默认值的过程,只不过系统会自动将默认值替换成大括号当中具体的数值。 java的内存需要划分为五个部分: 1.栈(Stack) : 存放的都是方法中的局部变量,方法的运行一定要在栈当中运行。 局部变量:方法的参数,或者是方法内部{}内部的变量。 作用域:一旦超出作用域,立刻从栈内存当中消失。 2.堆(Heap) : 凡是new出来的东西都在堆中。 堆内存里面的东西都有一个地址值: 16进制 堆内存里面的数据都有默认值(成员变量) 3.方法区(Method Area):存储.class相关信息,包含方法的信息。 4.本地方法栈(Native Method Stack):与操作系统相关。 5.寄存器(pc Register) :与CUP相关。 所有的引用类型变量都可以赋值为一个null值,但是代表其中什么都没有。 数组必须进行new初始化才能使用其中的元素,如果只是赋值了一个null,没有进行new创建,那么将会发生空指针异常: NullPointerException 获取数组的长度: 数组名称.length 这将会得到一个int数字,代表数组的长度;数组一旦创建程序运行期间,长度不可改变。 案例:将一个数组反转 初始化语句: int min=0,max=array.length-1 判断条件: min<max 步进表达式: min++,max-- 循环体: 用第三个变量倒手 int[] array={30,40,50,60,70,80}; for ( int min=0,max=array.length-1; min<max;min++,max--) { int temp=array[min]; array[min]=array[max]; array[max]=temp;} 数组可以作为方法的参数,当调用方法的时候,向方法的小括号进行传参,传递进去的其实是数组的地址值。 一个方法可以有0、1、多个参数,但是只能有0或者1个返回值,不能有多个返回值。 如果希望一个方法中产生了多个结果数据进行返回,可以使用一个数组作为返回值类型。数组作为方法的参数和返回值,传递和返回的其实都是数组的地址值