转义字符
- \t 制表位
- \n 换行符
- \r 一个回车
- \\: 一个\
注意
System.out.println(“编程语言**\r\n**基础”)
输出结果:idea中为:基础
注释
- 单行注释://
- 多行注释:/**/ (不允许多行注释嵌套使用)
- 文档注释 :/***/
2.代码规范
- 类或方法的注释采用(javadoc 标签):@author
- 使用TAb操作实现缩进,默认向右边移动,shift+tab整体向左移动
- 运算符和**=**两边习惯各加一个空格。如:2 + 4 * 5
- 行宽不超过80
- 代码编写次行风格和行尾风格
Tips
相对路径:从当前目录开始定位,形成的一个路径
绝对路径:从顶级目录d,开始定位,形成的路径
- JDK,JRE,JVM关系
JDK = JRE + java开发工具
JRE = JVM + 核心类库
2.程序中 + 号的使用
- 左右两边都是数值型时,则做加法运算
- 左右两边有一方为字符串,则做拼接运算
3.数据类型
- java 数据类型分为两大类基本数据类型,引用类型
- 基本数据类型有8中数值型[byte,short,int,long,float,double,char,boolean
- 引用类型[类,接口,数组,以及特殊的null类型。
自动类型转换:java程序在进行赋值或运算时,精度小的类型自动转换为精度大的数据类型。
浮点数:
- 浮点数默认为 double
浮点数 = 符号位 + 指数位 + 尾数位
(尾数部分可能丢失,造成精度损失)
自动类型转换
- (byte,short)char 不能相互自动转换
- byte,short,char进行运算会自动提升为 int
- Boolean 不参与转换
强制类型转换
- 强转符号只针对于最近的操作数有效,往往会使用小括号提升优先级
- byte和short,char类型在进行运算时,当做int类型处理
- char类型可以保存int的常量值,但不能保存int的变量值,需要强转
4.运算符
取模运算 %
在%的本质。a%b看公式 a % b = a - a / b * b
当a是小数时,a%b= a-(int)a / b * b
注意: 有小数运算,得到的结果是近似值。判断两个数相等需要看 差的绝对值在某个精度范围。
即计算时看 被除数的正负决定整体正负
逻辑运算符
短路与&&:如果第一个条件为falsee,后面的条件不再判断
逻辑与&:如果第一个条件为falsee,后面的条件仍然会判断
短路或||:如果第一个条件为true,则第二个条件不会判断,最终结果为true,效率高
逻辑或 |:不管第一个条件是否为true,第二个条件都要判断,效率低
逻辑异或
a^b:叫逻辑异或,当 a 和 b 不同时,则结果为true,否则为false
!a : 叫取反,或者非运算。当 a 为 true, 则结果为 false, 当 a 为 false 是,结果为 true
原码、反码、补码
补码可以统一正数和负数
java 中有 7 个位运算(&、|、^、~、>>、<<和 >>>)
Tips
- String 类型转换成 double 类型
(通过Double.parseDouble包装类) - char 类型转换成 String 类型
(通过 String str = char +" ";) - String类型转换成char类型
str=“abc”,str.charAt(0) 得到str的第一个字符
char key =sc.next().charAt(0);
if (key == 'n')
5.程序控制
switch 和 if 的比较
- 如果判断的具体数值不多,而且符合 byte、 short 、int、 char, enum[枚举], String 这 6 种类型。虽然两个语句都可 以使用,建议使用 swtich 语句。
- 其他情况:对区间判断,对结果为 boolean 类型判断,使用 if,if 的使用范围更广
break
- 如果没有break,默认退出最近的循环体
- break语句出现在多层嵌套的语句块中,可以通过标签指定跳出的是哪一层语句块
continue: 用于结束本次循环,继续下次循环。
return: 用在方法时,表示跳出方法。
6.数组、排序、查找
数组的定义:
1.数据类型 数组名 [ ] = new 数据类型 [ 大小 ]
2.数据类型 [ ] 数组名 = new 数据类型 [ 大小 ]
数组使用注意事项和细节
- 数组中的元素可以是任何数据类型,包括基本类型和引用类型,但是不能混用。
- 数组创建后,如果没有赋值,有默认值 int 0,short 0, byte 0, long 0, float 0.0,double 0.0,char \u0000,boolean false,String null
- 数组属引用类型,数组型数据是对象(object)
数组在默认情况下是引用传递,赋的值是地址,赋值方式为引用赋值
二维数组
1.动态初始化
类型 [ ] [ ] 数组名 = new 类型 [ 大小 ] [ 大小 ]
int a[] [] = new int [2][3];
2.静态初始化
int [ ] [ ] arr ={ {1,1,1 ,{ 2,3,4},{ 6,7,8 }} };
String strs[]={'a',b','c};//error,char->String
String[]strs={"a","b","c"};//ok
String[]strs =new String{"a""b""c"};//error
String strs[]=new String]{"a","b","c"}://ok
String[]strs=new String[3]{"a","b","c"];//error,编译不通过
7.面向对象编程(基础)
- 类是抽象的,概念的,代表一类事物,比如人类,猫类…, 即它是数据类型.
- 对象是具体的,实际的,代表一个具体事物, 即 是实例.
- 类是对象的模板,对象是类的一个个体,对应一个实例
成员变量 = 属性 = field(字段)
属性如果不赋值,有默认值,规则和数组一致。
具体说: int 0,short 0, byte 0, long 0, float 0.0,double 0.0,char \u0000, boolean false,String null
Java 内存的结构分析
- 栈: 一般存放基本数据类型(局部变量)
- 堆: 存放对象(Cat cat , 数组等)
- 方法区:常量池(常量,比如字符串), 类加载信息
方法调用
- 同一个类中的方法 可以 直接调用。
- 跨类中的方法A类 调用 B类的方法:需要通过对象名调用(需要先创建B类对象,然后在调用)
成员方法传参机制
引用类型传递的是地址(传递的值 是地址),可以通过形参影响实参。
方法重载(OverLoad)
1)方法名:必须相同
2)形参列表:必须不同(形参类型或个数或顺序,至少有一样不同,参数名无要求)
可变参数
java 允许将同一个类中多个同名同功能但参数个数不同的方法,封装成一个方法。 就可以通过可变参数实现
基本语法:访问修饰符 返回类型 方法名(数据类型... 形参名) { }
Tips
1)可变参数的实参可以为0个或任意多个
2)可变参数的实参可以为数组
3)可变参数的本质是数组
4)可变参数可以和普通类型的参数一起放在形参列表,但必须保证可变参数在最后
5)一个形参列表中只能出现一个可变参数
作用域
-
java中,主要变量就是属性(成员变量)和局部变量。
-
局部变量一般是指在成员方法中定义的变量。
-
作用域的分类
全局变量:也就是属性,作用域为整个类体
局部变量:除属性之外的其他变量,作用域为为定义它的代码块中 -
全局变量(属性)可以不赋值,直接使用,因为有默认值。
局部变量必须赋值知乎才能使用,没有默认值。
Tips:
1.属性和局部变量可以重名,访问遵循就近原则
2.在用一个作用域中,比如在同一个成员方法中,两个局部变量,不能重名。
3.属性生命周期较长,伴随着对象的创建而创建,伴随着对象的销毁而销毁。局部变量,生命周期较短,伴随着它的代码块的执行而创建,伴随着代码块的结束而销毁。即在一次方法调用过程中。
4.作用域范围不同
全局变量/属性:可以被本类使用,或其他类使用(通过对象调用)局部变量:只能在本类中对应的方法中使用
5.修饰符不同
全局变量/属性可以加修饰符
局部变量不可以加修饰符
构造器
语法:[修饰符] 方法名(形参列表){ 方法体; }
构造方法又叫构造器(constructor),是类的一种特殊的方法,它的主要作用是完成对新对象的初始化。
特点:
-
方法名和类名相同
-
没有返回值
-
在创建对象时,系统会自动的调用该类的构造器完成对象的初始化
Tips:
1.一个类可以定义多个不同的构造器,即构造器重载
2.构造器名和类名要相同
3.构造器没有返回值
4.构造器是完成对象的初始化,并不是创建对象
5.在创建对象时,系统自动的调用该类的构造方法
6.如果没有定义构造器,系统会自动给类生成一个默认无参构造器(也叫默认构造器),比如Dog{ } 使用javap指令 进行反编译
7.一旦定义了自己的构造器,默认的构造器就覆盖了,就不能再使用默认的无参构造器,除非显示的定义一下,即Dog{ }
this关键字
this简单来说:哪个对象调用,this就代表哪个对象
1)this 关键字可以用来访问本类的属性、方法、构造器
2)this 用于区分当前类的属性 和 局部变量
3)访问成员方法的语法: this.方法名( 参数列表 )
4) 访问构造器语法:this(参数列表);
注意只能在构造器中使用(即只能在构造器中访问另外一个构造器, 必须放在第一 条语句
5) this 不能在类定义的外部使用,只能在类定义的方法中使用