JAVA笔记一.docx
- 文档编号:11528432
- 上传时间:2023-06-01
- 格式:DOCX
- 页数:76
- 大小:1.29MB
JAVA笔记一.docx
《JAVA笔记一.docx》由会员分享,可在线阅读,更多相关《JAVA笔记一.docx(76页珍藏版)》请在冰点文库上搜索。
JAVA笔记一
补充知识:
*Java语言采用的是Unicode编码;
*变量的使用规则:
就近原则;
*类的组成:
成员变量,成员方法,构造方法(第七天)
*必要时要注意重写toString()方法;
*JDK5的新特性:
自动拆装箱,泛型,增强for,静态导入,可变参数,枚举
*多个对象共享一个成员变量,该变量用静态。
*需要注意的命名不规范,但仍旧使用的类
Arraycopy,Hashtable,
*不同的系统对换行符号的识别是不一样的:
Windows:
\r\n
linux:
\n
Mac:
\r
*在计算机中,中文的存储分两个字节:
第一个字节肯定是负数;
第二个字节常见的是负数,可能有正数,但是没影响。
变量和常量类型:
面试题:
byteb1=3,b2=4,b;
b=b1+b2;//有问题;
b=3+4;//正确;
原因:
因为变量相加,会首先看类型问题,最总吧结果赋值的也会考虑类型问题。
常量相加,首先做加法,然后看结果是否在复制的数据类型范围内,如果不是,才报错;
补充:
正数的原码,反码,补码相同;
计算机的数据操作基于补吗进行;
2.
字符串数据和其他数据做+,结果是字符串类型。
这里的+不是加法运算,而是字符串链接符。
例:
system.out.println("hello"+'a'+1);//helloa1
system.out.println('a'+1+"hello");//98hello
system.out.printfln("5+5="+5+5);//5+5=55
system.out.println(5+5+"=5+5");//10=5+5
标志符:
注意事项:
A.不能以数字开头;
B.不能是java关键字;
C.区分大小写;
常见的命名规则(见名知意)
A.包:
全部小写
单级包:
小写
举例:
qinxian,com
多级包:
小写,并用.隔开
举例:
cn.itcast,com.baidu
B.类或者接口:
一个单词:
首字母大写
举例:
Student,Demo
多个单词:
每个单词的首字母大写
举例:
HelloWord,StudentName
C.方法或者变量:
一个单词:
首字母小写
举例:
name,main
多个单词:
从第二个单词开始,每个单首字母大写
举例:
studentAge,shoeAllName()//带括号的为方法
D.常量:
全部大写
一个单词:
大写
举例:
PI
多个单词:
大写,并用_隔开
举例:
STUDENT_MAX_AGE
在java中针对整数常量提供了四种表现形式:
A.二进制由0,1组成,以0b开头
B.八进制由0,1,……7组成,以10开头
C.十进制由0,1,……9组成,整数默认是十进制
D.十六进制由0,1,……9,a,b,c,d,e,f(大小写均可)组成,以0x开头
java数据类型:
1.引用的数据类型:
类,接口,数组。
2.基本数据类型
A.整数占用字节数
byte1//-128~127
short2
int4
long8
B.浮点数
float4
double8
C.字符
char2(C语言里是1)
D.布尔
boolean1
注意事项:
整数默认是int类型,浮点数默认是double.
长整数要加L或l
单精度的浮点数要加F或者f
强制类型转换:
(1)默认转换:
a.从小到大
byte,short,char--int--long--float--double
byte,short,char之间不互相转换,直接转成int类型参与运算。
(2)强制转换:
a.从大到小
b.可能会有精度的损失,一般不建议这样使用。
c.格式:
目标数据类型变量名=(目标数据类型)(被转换的数据)
补充:
(1)long和float底层的存储结构不同
Float表示的数据范围比long的范围要大
(2)byte的范围:
-128~127
128:
10000000
-128:
10000000(与上面一样,但这里的1既是符号位,也是数值位)
面试题:
java语言中的字符char可以存储一个中文汉字吗?
为什么?
答:
可以,因为java语言中的字符占用两个字节。
算数运算符:
对常量和变量进行操作的符号;
注意:
A:
整数相除只能得到整数。
如果想得到小数,必须将数据变化为浮点数类型;
注意&和&&的区别;
一个数据与另一个数据位异或2次,结果不变;
交换两个变量的值:
1.用位异或实现两个变量的交换:
代码:
a=a^b;
b=a^b;
a=a^b;
2.用第三方变量交换;
3.用变量相加的做法:
代码:
a=a+b;
b=a–b;
a=a–b;
4.一句话搞定:
b=(a+b)–(a=b);
*三元运算符实现的,都可以用if语句实现。
if语句控制的操作是一个输出语句时不能用三元改进:
原因:
因为三元运算符是一个运算符,运算符操作完毕就应该有一个结果,而不是一个输出。
*break,continue,return的区别
1.break:
结束整个循环;
2.continue:
结束本次循环;
3.return:
结束方法。
栈:
存放的是局部变量;
局部变量是在方法定义中或者方法声明上的变量;
栈内存中的变量用完就会释放掉;
堆:
存放的是所有new出来的东西;
堆内存的特点:
A.每一个new出来的东西都有地址值
B.每个变量都有默认值:
a)byte,short,int,long0
b)float,double0.0
c)char‘\u0000’
d)Booleanfalse
e)引用类型null
C.使用完毕就变成垃圾,但是并没有立即回收,会在垃圾回收器空闲的时候回收。
Java中参数传递问题:
基本类型:
形式参数的改变对实际参数没有影响
引用类型:
形式参数的改变直接影响实际参数
面向对象:
面向对象是面向过程的编程思想;
面向过程:
强调的是每一个功能的步骤;
面向对象:
强调的是对象,然后由对象去调用功能;
*面向对象的思想的特点:
A.是一种更符合我们思想习惯的思想;
B.可以将复杂的事情简单化;
C.将我们从执行者变成了指挥者;
匿名对象的调用:
例子:
newStudent().show();
多态:
*抽象类的实例化是靠具体的子类实现的,是多态的方式;
例:
abstractclassAnimal{
……
}
classCatextendsAnimal{
……
}
Animala=newCat();
*接口中的变量默认为常量,不可以重新赋值
类与类,类与接口,接口与接口之间的关系:
类与类:
继承关系,只能单继承或多层继承;
类与接口:
实现关系,可以单实现,也可以多实现,并且可以在继承一个类的同时实现多接口
接口与接口:
继承关系,可以单继承,也可以多继承
(注意:
代码可参考视频Day09->code->InterfaceDemo3.java)
匿名内部类:
例子:
newInter是一个匿名内部类,匿名内部类是一个继承了该类或实现了该接口的子类的匿名对象
Eclipse常用快捷键
1:
final关键字(掌握)
(1)是最终的意思,可以修饰类,方法,变量。
(2)特点:
A:
它修饰的类,不能被继承。
B:
它修饰的方法,不能被重写。
C:
它修饰的变量,是一个常量。
(3)面试相关:
A:
局部变量
a:
基本类型值不能发生改变
b:
引用类型地址值不能发生改变,但是对象的内容是可以改变的
B:
初始化时机
a:
只能初始化一次。
b:
常见的给值
定义的时候。
(推荐)
构造方法中。
2:
多态(掌握)
(1)同一个对象在不同时刻体现出来的不同状态。
(2)多态的前提:
A:
有继承或者实现关系。
B:
有方法重写。
C:
有父类或者父接口引用指向子类对象。
多态的分类:
a:
具体类多态
classFu{}
classZiextendsFu{}
Fuf=newZi();
b:
抽象类多态
abstractclassFu{}
classZiextendsFu{}
Fuf=newZi();
c:
接口多态
interfaceFu{}
classZiimplementsFu{}
Fuf=newZi();
(3)多态中的成员访问特点
A:
成员变量
编译看左边,运行看左边
B:
构造方法
子类的构造都会默认访问父类构造
C:
成员方法
编译看左边,运行看右边
D:
静态方法
编译看左边,运行看左边
为什么?
因为成员方法有重写。
(4)多态的好处:
A:
提高代码的维护性(继承体现)
B:
提高代码的扩展性(多态体现)
(5)多态的弊端:
父不能使用子的特有功能。
现象:
子可以当作父使用,父不能当作子使用。
(6)多态中的转型
A:
向上转型
从子到父
B:
向下转型
从父到子
(7)孔子装爹的案例帮助大家理解多态
(8)多态的练习
A:
猫狗案例
B:
老师和学生案例
3:
抽象类(掌握)
(1)把多个共性的东西提取到一个类中,这是继承的做法。
但是呢,这多个共性的东西,在有些时候,方法声明一样,但是方法体。
也就是说,方法声明一样,但是每个具体的对象在具体实现的时候内容不一样。
所以,我们在定义这些共性的方法的时候,就不能给出具体的方法体。
而一个没有具体的方法体的方法是抽象的方法。
在一个类中如果有抽象方法,该类必须定义为抽象类。
(2)抽象类的特点
A:
抽象类和抽象方法必须用关键字abstract修饰
B:
抽象类中不一定有抽象方法,但是有抽象方法的类一定是抽象类
C:
抽象类不能实例化
D:
抽象类的子类
a:
是一个抽象类。
b:
是一个具体类。
这个类必须重写抽象类中的所有抽象方法。
(3)抽象类的成员特点:
A:
成员变量
有变量,有常量
B:
构造方法
有构造方法
C:
成员方法
有抽象,有非抽象
(4)抽象类的练习
(5)抽象类的几个小问题
A:
抽象类有构造方法,不能实例化,那么构造方法有什么用?
用于子类访问父类数据的初始化
B:
一个类如果没有抽象方法,却定义为了抽象类,有什么用?
为了不让创建对象
C:
abstract不能和哪些关键字共存
a:
final冲突
b:
private冲突
c:
static无意义
4:
接口(掌握)
(1)回顾猫狗案例,它们仅仅提供一些基本功能。
比如:
猫钻火圈,狗跳高等功能,不是动物本身就具备的,
是在后面的培养中训练出来的,这种额外的功能,java提供了接口表示。
(2)接口的特点:
A:
接口用关键字interface修饰
interface接口名{}
B:
类实现接口用implements修饰
class类名implements接口名{}
C:
接口不能实例化
D:
接口的实现类
a:
是一个抽象类。
b:
是一个具体类,这个类必须重写接口中的所有抽象方法。
(3)接口的成员特点:
A:
成员变量
只能是常量
默认修饰符:
publicstaticfinal
B:
构造方法
没有构造方法
C:
成员方法
只能是抽象的
默认修饰符:
publicabstract
(4)类与类,类与接口,接口与接口
A:
类与类
继承关系,只能单继承,可以多层继承
B:
类与接口
实现关系,可以单实现,也可以多实现。
还可以在继承一个类的同时,实现多个接口
C:
接口与接口
继承关系,可以单继承,也可以多继承
(5)抽象类和接口的区别(自己补齐)?
A:
成员区别
抽象类:
接口:
B:
关系区别:
类与类:
类与接口:
接口与接口:
C:
设计理念不同
抽象类:
isa,抽象类中定义的是共性功能。
接口:
likea,接口中定义的是扩展功能。
形式参数:
基本类型:
形式参数的改变不影响实际参数;
引用类型:
形式参数的改变直接影响实际参数;
特殊:
*String虽然是引用类型,但作为参数传递,其效果和基本类型是一样的;
集合:
Collectionl接口:
概览:
Collection
|--List
|--ArrayList
|--Vector
|--LinkedList
|--Set
|--HashSet
|--TreeSet
Collection的功能概述:
1:
添加功能
booleanadd(Objectobj):
添加一个元素
booleanaddAll(Collectionc):
添加一个集合的元素
2:
删除功能
voidclear():
移除所有元素
booleanremove(Objecto):
移除一个元素
booleanremoveAll(Collectionc):
移除一个集合的元素(只要有一个被移除了就返回true)
3:
判断功能
booleancontains(Objecto):
判断集合中是否包含指定的元素
booleancontainsAll(Collectionc):
判断集合中是否包含指定的集合元素
booleanisEmpty():
判断集合是否为空
4:
获取功能
Iterator
5:
长度功能
intsize():
元素的个数
面试题:
数组有length()方法,字符串有length()方法,集合没有length()方法,只有size()方法
6:
交集功能
booleanretainAll(Collectionc):
例子:
booleanb=a.retainAll(c)
返回值表示的是集合a是否发生改变
7:
把集合转换为数组
Object[]toArray()
集合的遍历:
1.publicObject[]toArray():
把集合转为数组,可以实现数组的遍历
PS:
若知道数组的元素是字符串,我们要了解元素的长度,必须先向上转型,
例子:
Collectc=newArrayList();
c.add(“hello”);
c.add(“World”);
c.add(“Java”);
Object{}obj=c.toArray();
for(inti=0;i Strings=(String)obj[x]; System.out.println(obj[x]+”----“+s.length()); } 2.Iteratoriterator(): 迭代器,集合专用的遍历方式 补充: 遍历集合的步骤: a.通过集合对象获取迭代器对象 b.通过迭代器对象的hasNext()方法判断是否有元素 c.通过迭代器对象的next()方法获取元素并移动到下一个位置 Iterator接口: 方法: (迭代器的方法) Objectnext();//获取元素,并移动到下一个元素 booleanhasNext(): //如果仍有元素可以迭代,返回true 例子: Collectionc=newArrayList(); //添加元素 c.add(“hello”); c.add(“world”); //迭代器 Iteratorit=c,iterator(); //遍历 while(it.hasNext()){ Strings=(String)it.next(); System.out.println(s); } List接口 1.List集合的特点: 有序,可重复 2.List集合的特有功能: *添加功能: voidadd(intindex,Objectelement)//在指定位置处添加元素 *获取功能: Objectget(intindex)//获取指定位置处的元素 *列表迭代器: ListIteratorlistIterator()//List集合特有的迭代器 *删除功能: Objectremove(intindex)//根据索引删除元素,并返回被删除的元素 *修改功能 Objectset(intindex,Objectelement)//用指定元素替换指定位置的元素 *List集合特有的遍历方式: size()和get()方法的结合。 例子: Listlist=newArrayList(); …… for(intx=0;x System.out.println(get(x)); } *列表迭代器ListIterator 有hasNext()和next()方法; hasPrevious()//判断前一个元素是否存在 previous()//可以访问前一个元素 //注意: 要让hasPrevious()和previous()方法有意义,必须先正向遍历后再逆向遍历。 *CurrentModificationException: //当方法检测到对象的并发修改,但不循序这种修改时就抛出异常 产生原因: 迭代器依赖于集合存在,在判断成功后,集合中新添加了元素,而迭代器却不知道,所以就报错了,这个错叫并发修改异常 其实这个问题描述的是迭代器遍历集合的时候,通过的集合是不能修改元素的 解决方法: 1.迭代器迭代元素,迭代器修改元素;(利用ListIterator迭代器) 2.集合遍历元素,集合修改元素(管道for) 栈: *先进后出, *入口(压栈),出口(弹栈); 队列: *先进先出; 数组: *查询快,增删慢 链表: 查询慢,增删快 面试题: List3个子类各有什么特点: *ArrayList: 底层数据结构是数组,查询快,增删慢 线程不安全,效率高。 *Vector: 底层数据结构是数组,查询快,增删慢 线程安全,效率低 *LinkedList: 底层数据结构是链表,查询慢,增删快。 线程不安全,效率高 *Vector的特有功能: 1.添加功能 publicvoidaddElement(Objectobj) 2.获取功能 publicObjectelementAt(intindex) publicEnumerationelements() |--publicbooleanhasMoreElements() |--publicObjectnextElement() *LinkedList的特有功能: 1.添加功能 publicvoidaddFirst(Objecte) publicvoidaddLast(Objecte) 2.获取功能 publicObjectgetFirst() publicObjectgetLast() 3.删除功能 publicObjectremoveFirst() publicObjectremoveLast() 去除集合中重复的元素: packagecn.itcast_04; importjava.util.ArrayList; importjava.util.Iterator; /* *需求: ArrayList去除集合中字符串的重复值(字符串的内容相同) *要求: 不能创建新的集合,就在以前的集合上做。 */ publicclassArrayListDemo2{ publicstaticvoidmain(String[]args){ //创建集合对象 ArrayListarray=newArrayList(); //添加多个字符串元素(包含内容相同的) array.add("hello"); array.add("world"); array.add("java"); array.add("world"); array.add("java"); array.add("world"); array.add("world"); array.add("world"); array.add("world"); array.add("java"); array.add("world"); //由选择排序思想引入,我们就可以通过这种思想做这个题目 //拿0索引的依次和后面的比较,有就把后的干掉 //同理,拿1索引... for(intx=0;x for(inty=x+1;y if(array.get(x).equals(array.get(y))){ array.remove(y); y--;//重点理解 } } } //遍历集合 Iteratorit=array.iterator(); while(it.hasNext()){ Strings=(String)it.next(); System.out.println(s); }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- JAVA 笔记