字面量(常量)
标识符
标识符命名规范:(小驼峰、大驼峰)
基本数据类型:
获取一个数在每位上的数字
算数运算符
自增自减只能操作变量,不能操作常量
例题:
隐制转换:
小的给大的,允许直接给。
思路:数据类型不统一,不能直接运算。
byte short char 三种数据在运算的时候,都会提升为int,然后再运算
强制转换:
大的给小的,不允许直接给,需要强装。
例题:
扩展赋值运算符(+=…),自带强转效果。
三元运算符
if语句注意事项:
switch语句:
注意事项:
- case后面的值不允许重复。
- case后面只能是常量,不能是变量
- switch语句()中可以接受的类型:
- 基本数据类型 byte short char int
- 引用数据类型 :
- dk5版本开始可以是枚举
- jdk7版本开始可以是String字符串
如何switch语句中,省略了break语句,将会开启case穿透现象。
穿透现象的运用:发现多个case中,存在相同的代码逻辑。
例题:
while循环语句:
初始化语句;
while(条件判断语句){
循环体语句;
条件控制语句;
}
do…while循环语句:
初始化语句;
do{
循环体语句;
条件控制语句;
}while(判断条件);
do…while 特点:无论判断条件是否满足,都至少执行一次循环体
三种循环的区别:
跳转控制语句
break:
结束\终止,结束switch语句,也能结束循环语句。
注意:只能在循环和switch当中进行使用。
continue:跳过某一次循环的执行。
注意:只能在循环当中使用。
跳转控制语句共同的注意事项:下面不允许写代码,因为执行不到
如果遇到了循环嵌套,break和continue只能操作自己所在的那一层。
无限循环的三种代码:
for(;;){
}
while(true){
}
do{
}while(true);
数组
数据类型[] 数组名=new 数据类型[]{元素1,元素2...};
数据类型 [] 数组名={元素1,元素2...};
打印数组名:[I@119d7047]:数组的内存地址
@:分割符
I:当前空间中存储的数据是int类型
119d7047:十六进制地址值
数组长度:arr.length
例题:
数组的动态初始化:int[] arr=new int[长度];
默认初始化值:
整数:0
小数:0.0
布尔:false
字符:’\u0000’→unicode字符→常见的体现空白字符
引用数据类型(数组、类(包括字符串)、接口):null
数组内存图
数组常见问题:
1.ArrayIndexOutOfBoundsException:数组索引越界异常
原因:当访问了不存在的索引
2.NullpointerException:空指针异常
原因:当一个”引用数据类型”的变量,记录到一份null值之后,跟堆内存的指向被切断了,这时候还想去访问堆内存数据,就会产生空指针异常。
二维数组:
容器,该容器用于存储一维数组
使用思路:今后若要操作多组数据,属于同一组数据就可以考虑使用二维数组维护。
格式:int[][] arr={
{11,22,33},
{44,55,66}
遍历二维数组:
for (int i = 0; i < arr.length; i++) {//遍历二维数组,获取到每一个一维数组
for (int j = 0; j < arr[i].length; j++) {//遍历每一个一维数组,或缺到具体的元素
System.out.print(arr[i][j]+”\t”);
二维数组动态初始化:
方法一:
int[][] arr = new int[2][3];
arr[0][0] = 11;
arr[0][1] = 22;
arr[0][2] = 33;
arr[1][0] = 44;
arr[1][1] = 55;
arr[1][2] = 66;
方法二:
int[][] arr1 = new int[2][4];
int[] arr2 = {11, 22, 33,88};
int[] arr3 = {44, 55, 66,55};
arr1[0] = arr2;
arr1[1] = arr3;
方法
方法的常见问题
- 方法不调用就不执行。
- 方法与方法之间是平级关系,不允许嵌套定义。
- 方法的编写顺序和执行顺序无关,要想梳理执行顺序,就看调用顺序。
- 如一个方法的返回值类型为void,表示此方法是没用返回值,return语句不可省略。但如果非要写return的话,只能写成return;后面不能带具体在。
- return语句下面不能写代码,因为执行不到。
- 如一个方法有明确的返回值类型,一定要通过return语句带回一个结果。
方法重载
同一个类,方法名相同,参数不同的方法。
识别方法之间是否是重载关系,只看方法名和参数,跟返回值无关
参数不同:个数不同,类型不同,顺序不同
方法面试题.ppt
面向对象
成员变量和局部变量的区别:
区别 | 成员变量 | 局部变量 |
---|---|---|
类中位置不同 | 方法外 | 方法中 |
初始值不同 | 有默认初始值 | 没用,使用之前需要完成赋值 |
内存位置不同 | 堆内存 | 栈内存 |
生命周期不同 | 随着对象的创建而存在,随着对象的消失而消失 | 随着方法的调用而存在,随着方法的运行结束而消失 |
作用域 | 在自己所归属的大括号中 |
this关键字:
this本质的作用,是调用本类成员(成员变量、成员方法)
表面作用:可以区分局部变量和成员变量的重名问题
谁来调用this,this就代表谁:哪一个对象调用的方法,方法中的this,就代表哪一个对象。
构造方法\构造器:
介绍:构建,创造一个对象的时候要执行的方法。
格式:
- 方法名需要和类名保持一致,大小写也必须一致。
- 没用返回值类型,连void都没有。
- 没用具体的返回值(不能通过return语句带回结果数据)。
构造方法执行时机:
- 在创建对象的时候,被系统自动调用执行。
- 每创建一次对象,就会执行一次构造方法。
构造方法的作用:
- 本质的作用:用来创建对象
- 结合执行时机:用于在创建对象的时候,给成员变量初始化
注意事项:
- 一个类中要是没写任何构造方法,系统将会提供一个[默认地][无参数的]构造方法,保证你可以创建对象。
- 一旦手动给出了构造方法,系统将不会再提供那个默认的无参构造。建议:今后写代码,[无参][有参]构造方法,全部手动给出。
- 构造方法不允许手动调用执行。
例题:
封装
隐藏实现细节,仅对外暴露公共的访问方式。
将属性抽取到类当中,这是对数据的一种封装。
将代码抽取到方法中,这是对代码功能的一种
JavaBean(对数据进行的一种封装)
- 所有的成员变量private私有化
- 提供出[空参][有参]构造方法
- 针对于私有的成员变量,提供SetXXX\getXXX方法
Set:设置\赋值
get:获取
API
API帮助文档的使用流程:
1.在索引的位置,搜索要查看的类文件。
2.看包
—java.lang—核心包—不需要导包
—r如果不是lang包下的内容,都是需要编写导包代码的。
3.看这个类的介绍
—明确出该类的功能,要知道这个类是做什么用的。
4.看这个类的构造方法
—因为使用一个类,具体就是要创建对象使用,创建对象要执行构造方法,所以要查看构造方法。
5.看这个类的成员方法(方法摘要)
1)看参数
①要不要参数?②要的话,要几个?要什么类型的?
2)看返回值
①看返回值类型是不是void
—不是→在调用方法后,需要找一个对应的类型的变量接收
—是→在调用方法,不需要找变量接收
3)看介绍:要知道这个方法做什么用的。
键盘录入字符串方法:
next():以【空格】【tab键】作为录入的结束标记
nextLine():以【回车换行-Enter】作为录入的结束标记
弊端:
1.next():录入数据不完整
2.nextLine():在这个方法调用之前,如果出现nextInt,丢失这一次录入机会
目前来说:
1.如果涉及到整数和字符串一起录入的情况
请选择:nextInt() next()
2.如果录入的数据全部都是字符串
请选择:nextLine()
String类的特点:
- Java程序中,所有双引号字符串,都是String这个类的对象。
- String字符串一旦被创建,就[不可更改]—内容不可改变。
- String字符串虽然不可改变,但是可以被共享。
- 字符串常量池:当我们使用双引号创建字符串对象的时候,会先检查该数据在常量池中是否存在。
- 不存在:创建
- 存在:复用
- 字符串常量池:当我们使用双引号创建字符串对象的时候,会先检查该数据在常量池中是否存在。
-
String类常见构造方法:
1.public String ():创建一个空白的字符串对象
例:String s1=new String();
2.public String(String s):根据传入字符串,创建字符串对象
例:String s2 =new String(”abc”);
3.public String(char[] chs):根据传入的字符数组,创建字符串对象
例:char[] chs={‘a’,’b’,’c’};
String s3=new String(chs);字符串+号拼接的原理:
系统会[自动的]创建一个StringBuilder对象。
- 系统会[自动的]调用该对象的append方法,完成字符串拼接。
- 系统会[自动的]调用该对象的toString方法,完成类型转换。
String类的成员方法
比较的方法:
public boolean equals(object anobject):
两个字符串之间做比较,比较内容,返回true,false
public boolean equalsIgnoreCase(String anotherString):
两个字符串之间做比较,比较内容,返回true,false,忽略大小写
public char charAt(int index):根据索引找字符
public int length():返回字符的个数
例:String s=”itheima”;
for(int i=0;i
}
注意:
String类中length()→方法
数组中length→属性
截取的方法:
public String substring(int beginIndex):
根据传入的索引截取当前字符串,截取到末尾,并返回新的字符串
例:String s=”itheima”;
String result=s.subsyring(2);
System.out.println(result);→heima
public String substring(int beginIndex,int endIndex): (包含头,不包含尾)
根据传入的开始和结束索引,截取字符串并返回新的字符串
例:String s=”itheima”;
String result=s.substring(0,2);
System.out.println(result);→it
替换的方法:
public Stiring replace(CharSequence target,CharSequence replacement):
参数1:taregt:旧值
参数2:replace:新值
(同样要返回新的字符串)
切割的方法:
public String [] spilt(String regex):
根据传入的字符串参数,作为规则,切割当前字符串。
今后在做切割的时候,都以\为开头
regex→正则表达式:本质就是一个字符串,可以去指定一些规则
StringBuilder(能提高效率)
- 可变的字符序列。
- StringBuilder是字符串的缓冲区,可以将其理解为一种容器,该容器可以存储任意数据类型,但是,进入到这个容器的数据,都会变成字符串。
StringBuilder的成员方法:
1.public StringBuilder append(任意数据类型):
向缓冲区(容量)添加元素,并返回自己这个对象本身链式编程
2.public StringBuildr reverse( );
对缓冲区中的内容进行反转,并返回自己这个对象本身。
3.public int length( );返回缓冲区中字符的个数。
4.public String toString():将缓冲区的内容,转换为String类型返回。String→StringBuilder的转换:
1.通过StringBuider的构造方法进行转换:
String s=”abc”;
StringBuilder sb=new StringBuilder(s);
2.先创建StringBulider对象,再通过append方法进行转换:
String s=”abc”;
StringBuilder sb=new StringBuilder();
sb.append(s);StringBuilder→String的转换:
1.直接通过toString方法即可
StringBulider sb=new StringBuilder(”abc”);
String s=sb.toString( );集合基础
数组中,存储的是对象,具体存储的是,对象的地址值。
数组:长度是固定不变的
集合:长度经常发生改变
ArrayList<> List=new ArrayList<>( );(自动导容)
泛型:<>对集合中存储的数据,进行类型的限制。
- 打印集合的对象名,不会出现内存地址,而是元素的内容
- 使用的时候,不需要关心底层的数组,只需要关心实际元素即可。
- 集合不需要操心长度的问题。
ArrayList的常用成员方法:
1.增
名字.add();向集合的尾部添加数据,返回是否添加成功的状态。
名字.add(int index,E elemen);插队添加
2.删
名字.remove(int index);根据索引,删除集合中的元素
名字.remove(元素):根据元素删除集合中内容(有重复元素,只删第一个)
—返回是否删除成功的状态
3.改
名字.set(int dex,E element);修改指定索引位置,为对应的元素
—返回被覆盖的元素
以上三种方法的返回值,通常来说,都不需要接收。
4.查
名字.get(int index);根据索引,获取集合中的元素
名字.size();返回集合中的元素个数