JAVA笔记-基础知识提炼

[size=xx-large][color=red]总结:做项目无非就是创建对象来调用方法,我们所做的事都是这样同一件事情[/color][/size]
[color=blue][size=x-large]swing组建的运用[/size][/color]
[size=large]1. 有些地方我们需要在创建对象的时候就引入,我们就可以先重载此类的构造函数,引入参数就可以了,创建对象的时候直接调用;这样可以减少我们的代码量;一般方法名首字母不大写,类名首字母一定要大写;
2. this:在一个方法里面,this是指这个的意思,哪个对象调用这个方法,那this代表的就是这个对象;
3. 只有构造函数没有返回类型,其它的所有函数都必须有返回类型;如果有返回值的话就写返回值的类型,没有就写void;[/size]
[color=blue][size=x-large]构造函数和继承[/size][/color]
[size=large]1. 如果一个方法中要返回值或字符串,return后面不需要加“=”或(),只需要直接写要返回的东西;
2. 如果子类重写了父类的方法,如果在子类调用这个方法则调用的是子类的方法(就近原则);
3. 调用父类方法的写法:super.方法名(参数);
4. 获得对象名字或年龄的get、set方法;[/size]
[color=blue][size=x-large]继承中构造函数调用[/size][/color]
[size=large]1. 如果有继承,在子类中重载构造函数,如果调用super(),则为调用父类的构造方法
2. 在静态方法里面,可以不需要创建对象来调用静态方法,可以直接调用(直接用类名来点某个静态方法即可);但是在静态方法里要调用非静态的方法的话就必须要先创建对象,才能调用(需要先创建对象,并用对象名来调用方法);
3. 在主函数中必须要用对象来调用方法,而在其它函数中要调用方法,直接如下写:方法名();
4. 1)static 静态方法调用静态方法,不需要创建对象;非静态方法调用非静态方法,一定要先创建创建对象,然后用创建的对象来调用非静态方法
static属性又称之为类属性,可以不创建类的对象而直接调用,另外一个特征就是类的某一对象的static属性值被改变后,这个类所有对象的static属性值都会被改变
2)final意为最终的,放在属性前面,属性的值就是常量,即这个属性就不能改变。 如果放在方法前面,当子类继承时候,就不可以重写此方法,这常用来保护父类中不允许子类重写,但又一定要标识为public让外部调用;[/size]
[color=blue][size=x-large] “=”和equal的区别[/size][/color]
[size=large]”=”是地址空间的比较
Equal是两个值的比较
在java中数据类型分为两大类:一类是基本数据类型,另一类是引用数据类型
1)基本数据类型又分为8种分别是:四种整数类型(byte、short、int、long),两种浮点数类型(float、double),一种字符类型(char),一种布尔类型(boolean)
2)引用数据类型也就是我们常说的类了,在java中String也是一种引用类
使用==比较可以分成两种情况:
1) 当等号左右都是基本数据类型时,那就是值的比较
2) 当等号左右不是基本数据类型时,那就是地址的比较
equals方法来说:
equals是一个方法,那使用方法的只能是对象的实例,所以equals比较的是对象的值是否相等,注意,对象和对象的值是两个不同的概念,
1)Primitive1 (基本类型)= = Primitive2(基本类型);
2)Object Reference1(对象引用)= = Object Reference2(对象引用)
3)Object Reference1 (对象引用) .equals(Object Reference2 (对象引用))[/size]
[color=blue][size=x-large]匿名内部类[/size][/color]
[color=red][size=large]接口[/size][/color]
[size=large]1. 接口:修饰符是interface
2. 抽象方法:没有方法体的方法,即没有具体实现的方法,也即没有一对大括号的方法
3. 接口中的方法都是抽象方法,属性一般为常量,接口不能直接实例化
4. 特点:一个类实现一个接口,必须实现接口中所有的抽象方法
5. 实现接口:关键字是implements
6. 抽象类:是一个比类更抽象的类 修饰符是:abstract class,抽象类也不能直接实例化
抽象类中可以有抽象方法,也可以有已实现的方法[/size]
[color=blue][size=x-large]类之间的对象传递[/size][/color]
[size=large]1. 可以通过重载构造函数来,并在另一个类中创建对象的时候来进行类间传递;
2. 创建事件监听,把监听类提出来格外写的方法;[/size]
[color=blue][size=x-large]数组的基础知识[/size][/color]
[size=large]1. 定义数组的三种方法:int[] array = new int[10];
int[] array = new int[]{10,4,5,6,2};
int[] array ={10,4,5,6,2};
2. 数组的输出一定要遍历,不能直接像输出变量一样输出数组;
3. 如果是输出的数组中元素为字符串的话,要重写toString()方法;[/size]color=blue][size=x-large]计算器的设计[/size][/color]
[size=large]1. 字符串的分割方法:字符串名.split(分割的符号)
2. 字符串的截取:字符串名.subString(开始的位置,结束的位置)[/size]
[color=blue][size=x-large]五子棋的制作[/size][/color]
[size=large]1. 在人机和人人按钮交换的时候,有一个问题:在监听器里获取command值的时候无法把e.getActionCommand获取的command值传入ChessListener类中去,因为我们在创建监听对象时总共只创建了一次,这样,我们传过去的也就是只有最初的command,而后面所get的command值就没有通过创建对象来传过去;我们有下面三种方法来解决:
1) 定义的方式:public static String command=”人机”
在定义command时候,定义为static,同时改为public;这样定义的command会根据我们在new一个ActionListener中get的command改变,我就不需要在创建监听对象时候传command值,而直接在ChessListener类中的mouseRelease()方法中调用属性即可传值过来;
2) 定义的方式:public String command=”人机”
把定义的command改为public公有;同时在创建对象的时候把FiveChessUI类传过去,然后在ChessListener中直接用传过去的类名来调用公有command属性即可传值过去;
3) 定义的方式:private String command=”人机”
Command为私有,且非静态;我们只要定义一个方法就能getCommand()方法,同时在创建对象的时候把FiveChessUI类传过去,然后在在ChessListener类中的mouseRelease()方法中用FiveChessUI.getCommand();[/size]
[color=blue][size=x-large]递归算法[/size][/color]
public int jiecheng(int n){
int b = 0;
if(n>1){
b = n*jiecheng(n-1);
}
else{
b = 1;
}
return b;
}

[size=large]b = n*jiecheng(n-1)这句我们可以看成是b*b*b*b...直到n-1个b相乘!我们很容易把后面递归的b = n*jiecheng(n-1)看成一个赋值过程,确实也是赋值过程,但是赋值是有点特殊的:他是在这一次递归获得的内容赋给此次的b,而又把此次的b与调用这次方法的前一次递归中的b相乘;
也就是说我们最后return的b是前面所有递归相乘后获得的b;我们很容易把递归简单看成一次调用,而误以为b就是最后一次调用函数时候获得的b的值;这点一定要注意![/size]
[color=blue][size=x-large]数据输入输出流[/size][/color]
[size=large]1. 在inputStream输入流的类里,有read方法,作用主要都是从输入流中读取字节,总共有三种:
read(),read(byte[] b),read(byte[] b,int off,int len);
1) read():读取下一个字节,并用一个变量来存储;
2) read(byte[] b):一个一个元素读取字节,并把读取的字节放入到byte[]数组中去,注意这个read方法的返回值为整形,返回的是总共读取的字节数;
3) read(byte[] b;int off,int len):将输入流中最多len个数据字节读入byte数组中,但读取的字节也可能小于该值;其中off为数组b中将写入数据的初始偏移量;返回值为整形,代表读取的字节总数;
如果要读取和写入的字节较多,数据大,可以采用第三种方法,先定义个数组,通过数组来传递数据,多次传递便可提高效率;
2. outpubString相应的也有三种谢的方法:
write(byte[] b)=write(b,0,b.length)
write(byte[] b,int off,int len)
write(int b);[/size]
[color=blue][size=x-large]文件搜索器的项目[/size][/color]
[size=large]菜单栏的添加,内置窗口的添加
1. 添加内置窗口时候,一定要先创建JDesktopPane对象来放置内置窗体(创建内置窗体对象JInternalFrame,并用add方法把内置窗体对象加入到JDesktopPane中),并在窗口创建的方法中,用窗口调用setContentPane()方法来添加JDesktopPane对象;
2. Table和JTableModel的使用(衣服和模特的关系);
3. 集合框架部分还需要巩固;[/size]
[color=blue][size=x-large]用户表的设置[/size][/color]
[size=large]1. JTable、TableModel:分别属于的包为:javax.swing.JTable
Javax.swing.table.TableModel
先把TableModel接口实现后,用JTable封装好实现类就行了;JTable和TableModel两者关系就像是衣服和模特的关系,先实现一个模特(TableModel)类,然后用衣服(JTable)来给她包装好即可;
2.给窗体加入表格时候,注意要设定窗体的布局管理器,而窗体默认的布局管理器是ViewportLayout管理器;[/size]
[color=blue][size=x-large]JTree的应用[/size][/color]
[size=large]1. 在创建树的时候,也要先创建一个模型,然后创建根结点,把根结点加到模型上去,再把模型加到树上;不能直接就把根结点放入树上;这和创建table是一样的方法;
2. 总结创建JTree的步骤:
1)创建树的对象:JTree 2)创建根结点:DefaultMutableTreeNode 3)创建根节点的子节点,用for循环创建多个:DefaultMutableTreeNode 4)把子节点加入到根节点上,记住实在循环里面加:add 5)创建树的model,把根节点加入到Model上去:创建model对象时候直接传进去 6)把模型加入到树的对象上去:setModel 6)最后才把树加到窗体上;
3.总结创建JTable的步骤:
1)另写一类,实现TableModel接口,并把接口里面的方法都实现 2)在主窗口里面创建TableModel的对象 3)在主窗口的方法里面,创建JTable对象;4)把TableModel对象加入到表格对象里面去:setModel 5)把表格对象加加入到窗体上
4.总结创建菜单栏JMenu的方法
1)先创建JMenuBar对象;2)再创建JMenu对象;3)再创建JMenuItem对象;4)用add分别把JMenu加到JMenuBar上面,用add把JMenuItem加入到JMenu上面;5)用setJMenuBar方法把JMenuBar加入到窗体上;
5.总结创建右键菜单JPopupMenu的步骤
1)先创建JPopupMenu对象;2)再创建JMenuItem对象;3)用add方法把JMenuItem加入到JPopupMenu上去;3)用setComponentPopupMenu方法把JPopupMenu加入到需要加右键弹出菜单的组件上;
注意:在创建JTree和JTable的时候,窗体setVisible一定要放在最后面;不然显示不出来;[/size]
[color=blue][size=x-large]Set list Map集合框架的总结[/size][/color]
1.[color=red][size=large]Set[/size][/color]:[size=large]他装载元素是没有规律的,1)在set里面的元素没有任何顺序;2)允许有一个为null的元素;3)不允许有重复的元素;
4)继承了超类collection;[/size]
[size=large][color=red]List:[/color]1)list装载的东西是有顺序的,对每个插入的元素位置精确控制;2)允许有重复的元素;3)如果列表允许有null,List可以有多个null;4)继承了超类collection
[color=red]Map[/color]:1)一个映射不能包括重复的键,而且同一个键只能映射一个值value;2)提供的是一种key-value的映射;[/size]
[size=large]2. set:1)添加元素用add[/size]
public java.util.Collection getUserSet(int count){
Set sSet = new java.util.HashSet();
for(int i=0;i<count;i++){
Student ui = new Student("用户_"+((char)(65+i)),i+1);
sSet.add(ui);
}
return sSet;
}

[size=large]2) 去除元素,也就是遍历元素:要用到迭代器iterator;返回的是一个iterator的对象,通过这个对象我们用while来判断,判断这个迭代器里面是否还有下一个元素(用的方法是hasNext()),如果还有就取出这个元素(用的方法是next());[/size]
java.util.Collection sSet = test.getUserSet(3);
System.out.println("集合中共有元素"+sSet.size());
java.util.Iterator<Student> it = sSet.iterator();
while(it.hasNext()){
Student st = it.next();
st.showInfo();
}

[size=large]3.List:1)添加元素用add();
2)取出元素取出元素我们用for循环遍历整个集合,就和遍历数组一样;[/size]
public void printList(List<Student> list){
for(int i = 0;i<list.size();i++){
//我们已经知道List中放的是UserInfo对象
Student us = list.get(i);
us.showInfo();

}

[size=large]4.Map:1)map是成对存放的,一个键,一个值;我们给map添加元素的时候使用put(k,v)方法,是成对存放的;一定要注意里面的键值是不能相同的,如果相同添加进去是会覆盖的;[/size]
Map<String,Student> userMap = new java.util.HashMap();
for(int i=0;i<6;i++){
Student us = new Student("我是第"+(i+1)+"个",i);
userMap.put(""+i, us);
}
[size=large]2)在map里面其实我们需要的只是value值,键值只是我们的一个索引,磅值我们取出相应的value;我们取值的方法是用get(Key)的方法来取值,这个方法返回的是一个value;
5.一定要注意:map,list, set三中集合都是接口,不能实例化,必须通过他们的实现类;我们有必要知道他们分别的一些实现类;[/size]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值