Java学习笔记
.jpg)
Java学习笔记
Alive~o.0变量
Java数据类型
- 整数类型
- byte——1字节
- short——2字节
- int——4字节(默认)
- long——8字节
- 浮点类型
- float——4字节
- double——8字节(默认)
浮点数使用陷阱
运算结果是小数要注意 应以两个数的差的绝对值在某精度范围内判断
2.7和8.1/3比较,8.1/3的结果接近2.7而非2.7,精度问题
Java API 文档
API (Application Programming Interface,应用程序编程接口)是Java提供的基本编程接口(Gava提供的类还有相关的方法)。
中文在线文档:https://www.matools.com
类的组织形式
-
字符类型(char)
在java中,char的本质是一个整数,在输出时,是unicode码对应的字符,可参与运算。
-
布尔类型——1字节
基本数据类型转换
自动类型转换
当java程序在进行赋值或者运算时,精度小的类型自动转换为精度最大
的数据类型。
精度大->精度小会报错
byte和char不自动转换
byte,char,short可以转换为int计算,一运算就成int
布尔不参与转换
1 | float d1 = n1 + 1.1;//错 结果类型是 double |
强制类型转换
自动类型转换的逆过程,将容量大的数据类型转换为容量小的数据类型。使用时要加上强制转换符 ( ),但可能造成精度降低或溢出。
基本数据类型和 String类型转换
基本类型转String类型:将基本类型的值+“”
String类型转基本数据类型:通过基本类型的包装类调用parseXX:方法
要确保String类型能够转成有效的数据
1 | int n1 = 100; |
运算符
算术运算符
对于除号/,它的整数除和小数除是有区别的:整数之间做除法时,只保留整数部分而舍弃小数部分。例如:intx=10/3,结果是3。
1 | int x = 10/3 //3 |
%的本质: a%b = a-a/b*b
1 | 10 % -3 = 1 |
i=i++:结果i=1
使用临时变量:(1)temp=i:(2)i=i+1;(3)i=temp
i=++i:结果i=2
关系运算符
都是boolean型
逻辑运算符
- 逻辑与&,逻辑或|,逻辑异或^
- 短路与&&,短路或||,取反!
&&和&使用区别(||和|同理)
&&短路与:如果第一个条件为false,则第二个条件不会判断,最终结果为false,效率高
&逻辑与:不管第一个条件是否为false,第二个条件都要判断,效率低
赋值运算符
只有单目运算符、赋值运算符是从右向左运算,会进行类型转换。
三元运算符
条件表达式 ? 表达式 1:表达式 2
如果条件表达式为rue,运算后的结果是表达式1,如果条件表达式为false,运算后的结果是表达式2。
表达式 1 和表达式 2 要为可以赋给接收变量的类型(或可以自动转换)。
标识符
Java对各种变量、方法和类等命名时使用的字符序列称为标识符。
🎀命名规则
-
由26个英文字母大小写,0-9,或$组成
-
数字不可以开头。
1
int3ab=1;//错误
-
不可以使用关键字和保留字,但能包含关键字和保留字。
-
Java中严格区分大小写,长度无限制。
1
int totalNum=10;intn=90;
-
标识符不能包含空格。
1
int a b=90;
包名:多单词组成时所有字母都小写:aaa.bbb.ccc //比如 com.hsp.crm
类名、接口名:多单词组成时,所有单词的首字母大写:XxxYyyZzz [大驼峰] 比如: TankShotGame
变量名、方法名:多单词组成时,第一个单词首字母小写,第二个单词开始每个单词首字母大写:xxxYyyZzz [小 驼峰, 简称 驼峰法] 比如:tankShotGame
常量名:所有字母都大写。多单词时每个单词用下划线连接:XXX_YYY_ZZZ 比如 :定义一个所得税率 TAX_RATE
关键字
被 Java 语言赋予了特殊含义,用做专门用途的字符串(单词),所有字母都为小写。
保留字
现有 Java 版本尚未使用,但以后版本可能会作为关键字使用。自己命名标识符时要避免使用这些保留 字 byValue、cast、future、 generic、 inner、 operator、 outer、 rest、 var 、 goto 、const
键盘输入语句
以使用键盘输入语句来获取。Input.java , 需要一个 扫描器(对象), 就是 Scanner
🎀步骤:
- 导入该类的所在包, java.util.
- 创建该类对象(声明变量)
- 调用里面的功能
1 | import java.util.Scanner;//表示把 java.util 下的 Scanner 类导入 |
进制
Java没有无符号数,计算机运算时都是以补码形式运算
位运算符
按位与&
、按位或|
,按位异或^
,按位取反~
,算数右移>>
,算数左移<<
,逻辑右移>>>
(低位溢出,高位补 0),没有逻辑左移。
程序控制结构
- 顺序控制 前向引用
- 分支控制 if-else
- switch 分支结构
- for
- while
数组、排序和查找
数组
数组属引用类型,数组型数据是对象(object)
1 | //动态初始化 |
数组中的元素可以是任何数据类型,包括基本类型和引用类型,但是不能混用。
数组创建后,如果没有赋值,有默认值 int 0
,short 0
, byte 0
, long 0
, float 0.0
,double 0.0
,char \u0000
,boolean false
,String null
赋值机制
基本数据类型赋值方式为值拷贝
数组赋值方式为引用传递,赋的值是地址,赋值方式为引用传达
若需要拷贝后的数组地址独立,则需要new
1 | int[] arr1 = {10,20,30}; |
二维数组
动态初始化
也可以这样创建:
1
2
3
4
5
6
7
8
9
10 int[][] arr = new int[3][]
for(int i = 0; i < arr.length; i++) {
arr[i] = new int[i + 1];
//给每个一维数组开空间 new
//如果没有给一维数组 new ,那么 arr[i]就是 null
//遍历一维数组,并给一维数组的每个元素赋值
for(int j = 0; j < arr[i].length; j++) {
arr[i][j] = i + 1;//赋值
}
}
静态初始化
1 | int[][] arr = {{1,1,1}, {8,8,9}, {100}}; |
面向对象编程
类与对象
类是抽象的,概念的,代表一类事物,比如人类,猫类…, 即它是数据类型
对象是具体的,实际的,代表一个具体事物, 即是实例
类是对象的模板,对象是类的一个个体,对应一个实例
属性的定义语法同变量,示例:访问修饰符 属性类型 属性名;
访问修饰符: 控制属性的访问范围 有四种访问修饰符 public, proctected, 默认, private ,
属性的定义类型可以为任意类型,包含基本类型或引用类型
属性如果不赋值,有默认值,规则和数组一致。
1 | int 0 |
- 内存分配机制
栈: 一般存放基本数据类型(局部变量)
堆: 存放对象(Cat cat , 数组等)
方法区:常量池(常量,比如字符串), 类加载信息
成员方法
调用机制
1 | 访问修饰符 返回数据类型 方法名(形参列表..) {//方法体 |
方法不能嵌套定义
跨类中的方法A类调用B类方法:需要通过对象名调用。比如对象名,方法名(参数)
跨类的方法调用和方法的访问修饰符相关