1.方法就是函数,方法不能嵌套定义;要定义在类当中;
2.当返回值为void时,可以在方法结尾直接写return;也
可不写,系统默认填上return.
3.方法重载的定义:在同一个类中的多个方法,他们的方法名相同
参数列表不同,称为方法重载。方法重载与返回值类型无关。
4.数组的初始化有动态初始化和静态初始化。
动态初始化:只指定长度,有系统给出默认值。
静态初始化:给出初始化值,又系统决定数组长度。
5.用 int[]arr=new int{}创建数组,然后再 int[]arr2=arr;
这时两个数组名引用一个内存;
6.数组使用常见问题:
1)数组索引越界异常:ArrayIndexOutOfBoundsException
也就是访问了不存在的索引。
2)空指针异常:NullPointException方法
数组名存的是null,而不是数组的地址
7.数组属于引用类型,引用类型的变量作为参数传递给方法时,
传递的是地址值;基本类型的变量作为参数传递给方法时传的是值;
8.成员变量:类中,方法体外;局部变量:方法的参数列表或者方法体语句。
Java中使用变量遵循“就近原则”,如果局部位置没有,就去成员位置找,
还没有系统就报错;(但是在继承中,子类可以去父类中找)
9.自定义类属于引用类型,在作为方法形参时传递的是地址值。
10.成员变量与局部变量的五大区别。
11.public一般用于修饰方法;private一般修饰成员变量;
被public修饰,能被所有类调用;
被private修饰,只能在本类中使用;
12.this关键字:表示本类对象的引用,本质是一个对象。
特点:每个普通方法都有一个this,谁调用该方法,this就指向谁。
用法:this.属性名或this.方法名(参数);
13.this可用于成员变量和局部变量重名的情况。
14.构造方法的作用是初始化对象。构造方法没有返回值类型,
连void也不能写。只能 修饰符 方法名(参数){};
15.当你不写无参构造方法时,系统默认加上它;
16.arr sc=new arr();如果括号内啥都不写,则调用的是无参构造函数;
如果写了,则调用有参构造函数。
17.标准的Javabean类写法:
1)方法都是公共的
2)成员变量用private
3)有setxxx和getxxx方法;
4)有全参和无参构造方法;
18.子类只能继承父类的非私有成员(成员变量,成员方法);
19.Java中使用变量的规则:就近原则
1)先找局部变量
2)没有,再找本类中的成员变量
3)没有,再去父类中的成员变量找,
4)还没有,就报错。
20.当面对父类中的成员变量和子类的成员变量和局部变量相同时,
区分他们可以使用super和this;
super代表父类中的成员变量;
this代表子类中的成员变量;
21.继承中重名的方法:
1)父类功能不满足现状,需改进,用super.方法名调用父类
方法,再改进
2)父类方法已过时,重新定义,叫方法覆盖;
22.子父类的构造方法:
1)子类所有的构造方法的第一行都有一个默认的super()用
来访问父类的无参构造方法;
2)如果父类没有无参构造方法,可以通过super(参数)的形
式来访问父类的带参构造方法
23.四大权限修饰符的修饰范围从小到大为:
private->默认(啥都不写)->protected->public
注意:子类的修饰符范围不能小于父类。
24.private:强调的是给自己使用
默认:强调的是给同包下的使用
protected:强调的是给子类使用
public:强调的是给大家使用
25.Java中实现多态的三大步骤:
1)要有继承(或者实现)关系
2)要有方法重写
3)要有父类引用指向子类对象;
26.多态中调用成员方法是编译看左(左边类型有没有这个成员)
运行看右(运行时看的是右边的成员);
27.多态的使用场景:父类型可以作为形参的数据类型,这样
可以接收任意的子类对象。
26.多态中成员变量不涉及重写。
再多态中使用成员变量遵循“编译看左,运行看左”;
Animal an=new Dog();
27.多态的弊端:父类引用不能使用子类的特有成员。
解决办法:类型转换
注意:1)只能在继承层次上进行转换,否则报ClassCastException异常
2)将父类对象转化成子类之前,使用instanceof关键字检查
28.instanceof关键字的用法:对象名 instanceof 数据类型
意思是判断前边的对象是否是后边的数据类型;
29.抽象方法只能定义在抽象类中,抽象类中可以没有抽象方法;
30.抽象类的子类:
1)普通子类:必须全部继承父类的方法
2)抽象子类:不需要继承;
31.抽象类中的成员比普通类多一种:抽象方法,其他的和普通类一样;
32.在实际开发中,子类一般有两个构造方法:
子类的无参构造方法访问父类的无参构造方法
子类的全参构造方法访问父类的全参构造方法;
33.final关键字:
1)修饰类,不能有子类,但能继承其他的类;
2)修饰方法:则该方法不能被重写;
3)修饰成员变量:如果修饰基本类型的变量,值不变;
如果修饰引用类型的变量,地址值
不变,属性值可以边(了解);
34.static关键字:能被本类所有对象共享;
任意对象能对其值进行改变,不安全,所以用final修饰
public final static String name="mmm";(公共的静态常量)
35.静态成员属于类;
36.static关键字修饰成员方法:变为静态方法,静态方法中没有对象this,
所以不能访问非静态成员。
引用:类名.成员对象
类名.成员方法(参数)
37.接口是一个比抽象类更抽象的类,所以不能直接实例化,要子类创建对象;
接口引用指向子类也是多态;(可以将接口理解为统一的标准,例如USB接口)
38.接口中的成员方法系统默认为public abstract,不写系统就会加上;
39.接口的定义为:interface 接口名{};与类定义相似;
40.接口特点:
1)接口不能实例化,要通过多态的方式实例化子类对象;
2)接口的子类可以是抽象类(不必继承接口的方法),可以是普通类
要继承接口的方法;
41.对于一个类来讲,他的父类(继承的关系)中定义的都是共性内容
他的父接口(实现的关系)中定义的是拓展内容
43.类与类之间是继承关系(extends),只能单继承,可以多重继承
类与接口是实现关系(implements),可以单,多实现;
接口与接口是继承关系,可以单,多继承;
44.接口中只有成员常量,因为所有的变量前都有默认的
public static final
45.接口中成员方法可以是jdk7抽象的,jdk8静态(static)和非静态(default)
的和jdk9私有的(private);
46.Java中三大工具:API(帮助文档),集合,IO流
47.Java中组件的层次关系:模块(module)->包(package)
->(类class或接口interface)
48.非静态方法的调用方式:对象名. 的方式调用;
静态方法的调用:类名. 的方式调用;
49.java.lang包下的类可以直接使用,不需要导包;Object类是它下面的类
50.一个类只有一个字节码文件;
地址值的组成:全类名(包名+类名)+@+该对象的哈希码的无符号十六进制形式;
51.Object类中的常见四大方法:
1)int hashCord() //返回对象的哈希码值
2)Class getClass();//返回该调用者的字节码文件对象
3)String toString();//返回该对象的字节码表示形式;
4)boolean equals();//比较两对象的地址值,无意义,一般要子类重写;
52.在实际开发中,用的最多的方法是:
1)nextInt();接收整数;
2)nextLine();接收字符串 按回车结束;
3)hasNextXxx();判断作用,为boolean型;
4)nextXxx():用于接收下一个指定类型的数据
53.在实际开发中,String类很常用,所以优化它不在需要new;
54.在String类中:
1)static String valueOf();将指定的数据类型转换成字符串;
它是静态的,所以用类名.的形式调用;
55.API中的字段就是指成员变量;
56.一个毫秒值对应一个时间;
57.Data类:
1)Data()空参构造一个对象获取当前系统时间,精确到毫秒值;
2)Data(long)构造一个对象,获取指定时间;
58.Calendar类用于操作日期相关信息;
成员方法:
1)static Calendar getInstance();根据当前系统时区和
语言环境获取日历对象;
2)int get(int field);返回给定日历字段的值;
3)void set(int field,int value);将给定的日历字段
设置为指定的值;
59.基本类型对应的引用类型为包装类;每种基本类型都有对应的包装类,
注意int的包装类为Interger,char的包装类为Character;有装箱和拆箱
的概念,jdk5以后有自动拆装箱;
60.为啥使用包装类:可以将字符串数据转化成对应的基本类型;
61.包装类的成员方法:static 基本类型 parseXxx(String);
62.除了Character类无parseXxx方法外,其他包装类都有这个方法;
因为如果String想转化成char类型,可以用TocharArray()或charAt();
63.集合:简称集,是用来存储多个元素的容器
64.list,set,map都是接口,必须有实现类;
65.使用集合的步骤:
1)创建集合对象
2)创建元素对象
3)将元素对象添加到集合对象中
4)遍历集合
66,API中的E指泛型;
67.为什么需要增强for循环:简化书组合集合的遍历;
增强for的格式:for(元素的数据类型 变量名:要遍历的数组或集合对象){};
68.增强for的底层依赖的是迭代器(Iterator)
通俗讲增强for就是迭代器的简写形式;
69.集合有单列集合(Collection)Set,List和双列集合(Map)Map;
70.迭代器是遍历Collection集合的通用方式,可以再对集合便利的同时
进行删除和添加的操作,
71.迭代器的常用方法:
1)next():返回迭代的下一个元素
、 2)hasNext():如果任有元素,返回true
72.迭代器的使用步骤:
1)根据集合对象获取对象的迭代器对象
2)判断迭代器中是否有元素
3)如果有,就获取元素
String s=(String)list.next();
73.在使用迭代器时,可能会报并发修改异常(ConcurrentModificationException)
也就是在遍历的同时添加或删除元素;
74.列表迭代器则可以对集合遍历的同时添加或删除元素,但是必须通过
调用列表迭代器(ListIterator)的方法调用
75.泛型:泛指任意类型,常用于集合类中,他的好处在于类型安全,避免了类型转换。
76.List<String> list=new ArrayList<String>();表示list集合只能存放string类型的数据。
jdk7以后可以写成List<String> list=new ArrayList<>();
77.Collections类是对集合进行操作的工具类。它里边的方法几乎为静态的,所以调用时用类名.的方式调用
78.Set集合的特点:不可重复和无序hashset集合中用哈希算法,当向Set中添加对象时,首先调用此对象所在类的hashCode()方法,
计算次对象的哈希值,此哈希值决定了此对象在Set中存放的位置;若此位置没有被存储对象则直接存储,若已有对象则通过对
象所在类的equals()比较两个对象是否相同,相同则不能被添加。
总思路:hashCode不同时,则必为不同对象。hashCode相同时,根据equlas()方法判断是否为同一对象。
在HashSet,HashMap,HashTable中都存在该问题。
79.为什么Set集合没有“去重”?
因为Set集合保证元素的唯一性依赖:equals()和hashCord()两个方法
你没有在子类中重写这两个方法,默认调用的是Object类中的,Object类中的equals()方法默认
比较的是地址值。
解决办法:在子类中从写这两个方法
80.Map集合是双列集合,元素由键值对构成,key可以重复,value不可以重复;
Map<t1,t2>map=new HashMap<>();
81.向map集合中添加元素用put()方法,Map集合不能直接遍历,要用KeySet()方法拿到所有键的集合,这
样就将双列集合变成了单列集合
82.异常(Throwable)的分类:
1)异常(Exception):可以捕获的问题(通俗讲就是程序员产生的问题)
2)错误(Error):不可捕获的问题。
83.处理方式:
1)捕获,自己处理. try(尝试代码)...catch(执行解决办法)
....finally(可省,写到这儿代码一定会执行,一般用来释放资源)
特点:程序处理完以后,继续执行
执行流程:先执行try里边的内容,有,则到catch里边,如果
没有,则跳到finally
2)抛出,交给调用者处理 throws
84.抛出异常:谁调用谁处理,main方法不想处理,可以继续抛给JVM处理
throws Exception
特点:异常抛出后,程序不在执行
85.I/O流简介:(input/output),是Java中用来传输数据的方式。
按流向分:
1)输入流:读数据
2)输出流:写数据
按操作分:
1)字节流:以字节为单位操作数据
1)InputStream :字节输入流的顶层抽象类
1)FileInputStream:普通的字节输入流
2)BufferedInputStream:高效的字节输入流
2)OutputStream:字节输出流的顶层抽象类
1)FileOutputStream:普通的字节输出流
2)BufferedOutputStream:高效的字节输出流
2)字符流:以字符为单位操作数据
1)Reader:字符输入流的顶层父类
1)FileReader:普通的字符输入流
2)BufferedReader:高效的字符输入流
2)Writer:字符输出流的顶层父类
1)FileWriter:普通的字符输出流
2)BufferedWriter:高效的字符输出流
86.File类是用来创建文件夹或文件的,说白了,就是处理路径
它里边的mkdir()方法可以创建单级或多级目录(make directory)
构造方法:
1)File(String pathname)
2)File(String parent,String child)
3)File(File parent,String child)
87.Java中路径的划分:
1)绝对路径:以盘符开头,是固定的路径
2)相对路径:相对于当前项目来讲的路径
88.File类的获取功能:list():获取指定目录下文件(夹)名称数组
listFile():获取指定目录下文件(夹)File数组
89.I/O流处理完后要释放资源,用close()方法关闭
90.IO流拷贝文件:
1:创建字符流输入对象,关联数据源文件,
2:创建字符流输出对象,关联目的地文件
3:定义变量,接收读取的内容
4:循环读取
5:释放资源
6:如果目的地文件不存在,系统自动生成;
91.字符流拷贝文件的标准代码:
1)BufferedReader br=new BufferedReader(new FileReader("路径"))
2)BufferedWriter br=new BufferedWriter(new FileWriter("路径"))
92.在缓冲输入输出流类中,ReadLine()为读取一行字符,如果没值了,换回null
NewLine()为Java提供的在任何平台使用的换行方法
93.字符流只能应用于纯文本文件,拷贝其他(音频,视频,图片等)用字节流
94.字节缓冲流的特点:即使你没有定义字符数组,它在下边也会以字符数组的形式来执行,也称为高效缓冲字节流
用法同上
95.反射:在Java中,反射指的是在程序运行期间根据类的字节码文件对象
来获取类中成员并使用的一项技术
什么是反射:在程序运行时分析类的一种能力
普通的程序先在后缀名以.java结尾的源文件中编写程序,然后编译成后缀名以.class结尾的字节码文件中,此时,就可以
通过对象名.的形式调用方法反射就是反过来
96.类加载器(ClassLoader):负责将类的字节码文件(.class文件)加载到内存中,并生成相应的Class文件
当你第一次使用类中的成员时,类加载器将此类的字节码文件加载到内存中,且只加载一次,如果在使用此
类成员,将不再加载
97.一个源文件(.java)对应一个字节码文件(.class)
98.获取Class对象的三种方式:
1)Object类下的getClass()方法
2)类的静态属性Class()
3)Class类的静态方法Class name=Class.forName(“类的正名”)
补充:类的正名:包名+类名
99.构造器对象(Constractor)
构造器类(Constractor)的常用方法有:
1)getConstractor():获取类的构造器对象
2)getName():获取构造器对象的所属类
3)NewInstance():通过构造器对象生成此类的一个对象
100.通过反射的方式获取构造器并使用的步骤:
1)先通过全类名获取该类对应的字节码文件对象,也就是Class
2)通过Class来获取该类的构造器对象
3)调用newInstance()方法获取该类的对象
4)打印结果
101.通过反射的方式获取成员方法并使用的步骤:
1)先通过全类名获取该类对应的字节码文件对象,也就是Class
2)通过Class对象来创建构造器对象,然后创建该类对象
3)通过Class来获取该类的成员方法(Method)对象,注意Method me=clazz1.getMethod("show2",int.class);
4)通过Method对象调用invoke()方法;
102.通过反射的方式获取成员属性并使用的步骤:
1)先通过全类名获取该类对应的字节码文件对象,也就是Class
2)通过Class对象来创建构造器对象,然后创建该类对象
3)通过Class来获取该类的成员变量对象(Field)
4)通过Field对象的Set()方法设置成员变量的值
注意:引用私有变量时,要调用setAccseeible()方法;
103.什么时候用父类,什么时候用接口?
是上下级的递推关系,针对某一块项目时用父类
面向各类项目时,用接口
104.Java中通过System.in和System.out对象分别和键盘与显示器产生关联而完成数据的输入和输出;
105.Java运行工具eclipse常用快捷键:F11是切换至调试模式,F6是断点逐句调试,