JAVA笔记-基础知识提炼
总结:做项目无非就是创建对象来调用方法,我们所做的事都是这样同一件事情
swing组建的运用
1.有些地方我们需要在创建对象的时候就引入,我们就可以先重载此类的构造函数,引入参数就可以了,创建对象的时候直接调用;这样可以减少我们的代码量;一般方法名首字母不大写,类名首字母一定要大写;
2.this:在一个方法里面,this是指这个的意思,哪个对象调用这个方法,那this代表的就是这个对象;
3.只有构造函数没有返回类型,其它的所有函数都必须有返回类型;如果有返回值的话就写返回值的类型,没有就写void;
构造函数和继承
1.如果一个方法中要返回值或字符串,return后面不需要加“=”或(),只需要直接写要返回的东西;
2.如果子类重写了父类的方法,如果在子类调用这个方法则调用的是子类的方法(就近原则);
3.调用父类方法的写法:super.方法名(参数);
4.获得对象名字或年龄的get、set方法;
继承中构造函数调用
1.如果有继承,在子类中重载构造函数,如果调用super(),则为调用父类的构造方法
2.在静态方法里面,可以不需要创建对象来调用静态方法,可以直接调用(直接用类名来点某个静态方法即可);但是在静态方法里要调用非静态的方法的话就必须要先创建对象,才能调用(需要先创建对象,并用对象名来调用方法);
3.在主函数中必须要用对象来调用方法,而在其它函数中要调用方法,直接如下写:方法名();
4.1)static 静态方法调用静态方法,不需要创建对象;非静态方法调用非静态方法,一定要先创建创建对象,然后用创建的对象来调用非静态方法
static属性又称之为类属性,可以不创建类的对象而直接调用,另外一个特征就是类的某一对象的static属性值被改变后,这个类所有对象的static属性值都会被改变
2)final意为最终的,放在属性前面,属性的值就是常量,即这个属性就不能改变。 如果放在方法前面,当子类继承时候,就不可以重写此方法,这常用来保护父类中不允许子类重写,但又一定要标识为public让外部调用;
“=”和equal的区别
”=”是地址空间的比较
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 (对象引用))
匿名内部类
接口
1.接口:修饰符是interface
2.抽象方法:没有方法体的方法,即没有具体实现的方法,也即没有一对大括号的方法
3.接口中的方法都是抽象方法,属性一般为常量,接口不能直接实例化
4.特点:一个类实现一个接口,必须实现接口中所有的抽象方法
5.实现接口:关键字是implements
6. 抽象类:是一个比类更抽象的类 修饰符是:abstract class,抽象类也不能直接实例化
抽象类中可以有抽象方法,也可以有已实现的方法
类之间的对象传递
1.可以通过重载构造函数来,并在另一个类中创建对象的时候来进行类间传递;
2.创建事件监听,把监听类提出来格外写的方法;
数组的基础知识
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()方法;color=blue]计算器的设计[/color]
1.字符串的分割方法:字符串名.split(分割的符号)
2.字符串的截取:字符串名.subString(开始的位置,结束的位置)
五子棋的制作
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();
递归算法
public int jiecheng(int n){int b = 0;if(n>1){b = n*jiecheng(n-1);}else{b = 1;}return b;}
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;}
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();}
public void printList(List<Student> list){for(int i = 0;i<list.size();i++){//我们已经知道List中放的是UserInfo对象Student us = list.get(i);us.showInfo();}}
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);}2)在map里面其实我们需要的只是value值,键值只是我们的一个索引,磅值我们取出相应的value;我们取值的方法是用get(Key)的方法来取值,这个方法返回的是一个value;