在软构的lab三中查询了很多知识。
list as follows:
1. 在自己的函数中使用了Map,考虑到lab2中有通过for(XXX<> i : XXX)来进行循环,于是就在思考是否Map也可以这样写,然而报了错...上网查询发现不可以,但是可以换一种写法来,用Map.Entry与entryset来写:
keySet()方法返回值是Map中key值的集合;entrySet()的返回值也是返回一个Set集合,此集合的类型为Map.Entry。
Map.Entry是Map声明的一个内部接口,此接口为泛型,定义为Entry<K,V>。它表示Map中的一个实体(一个key-value对)。接口中有getKey(),getValue方法。
Map的多种迭代实现:
//1.
Map map = new HashMap();
Irerator iterator = map.entrySet().iterator();
while(iterator.hasNext()) {
Map.Entry entry = iterator.next();
Object key = entry.getKey();
}
//2.
Map map = new HashMap();
Set keySet= map.keySet();
Irerator iterator = keySet.iterator;
while(iterator.hasNext()) {
Object key = iterator.next();
Object value = map.get(key);
}
/* 另外,还有一种遍历方法是,单纯的遍历value值,Map有一个values方法,返回的是value的Collection集合。通过遍历collection也可以遍历value,如
*/
Map map = new HashMap();
Collection c = map.values();
Iterator iterator = c.iterator();
while(iterator.hasNext()) {
Object value = iterator.next();
}
于是将for循环写成:
for(Map.Entry<L,List<Long>> entry : periods.entrySet())
2. 在构造接口时发现接口体定义的方法体一直报错且不知道如何解决,询问同学并查阅资料时对接口有了更详细的了解,如下:
接口与类的区别:
- 接口不能用于实例化对象。
- 接口没有构造方法。
- 接口中所有的方法必须是抽象方法。
- 接口不能包含成员变量,除了 static 和 final 变量。
- 接口不是被类继承了,而是要被类实现。
- 接口支持多继承。
注:JDK 1.8 以后,接口里可以有静态方法和方法体了。
注:JDK 1.8 以后,接口允许包含具体实现的方法,该方法称为"默认方法",默认方法使用 default 关键字修饰。更多内容可参考 Java 8 默认方法。
注:JDK 1.9 以后,允许将方法定义为 private,使得某些复用的代码不会把方法暴露出去。更多内容可参考 Java 9 私有接口方法。
当类实现接口的时候,类要实现接口中所有的方法。否则,类必须声明为抽象的类。
类使用implements关键字实现接口。在类声明中,Implements关键字放在class声明后面。
实现一个接口的语法,可以使用这个公式:
...implements 接口名称[, 其他接口名称, 其他接口名称..., ...] ...
重写接口中声明的方法时,需要注意以下规则:
- 类在实现接口的方法时,不能抛出强制性异常,只能在接口中,或者继承接口的抽象类中抛出该强制性异常。
- 类在重写方法时要保持一致的方法名,并且应该保持相同或者相兼容的返回值类型。
- 如果实现接口的类是抽象类,那么就没必要实现该接口的方法。
在实现接口的时候,也要注意一些规则:
- 一个类可以同时实现多个接口。
- 一个类只能继承一个类,但是能实现多个接口。
- 一个接口能继承另一个接口,这和类之间的继承比较相似。
一个接口能继承另一个接口,和类之间的继承方式比较相似。接口的继承使用extends关键字,子接口继承父接口的方法,且接口允许多继承
public interface Hockey extends Sports, Event
3. 构造函数
在构造接口并进行实现的时候,由于对构造函数的不清晰导致卡了很长一段时间,在别人讲过一遍 情况下重写还是出现了错误。最后诉诸与网络,查询了构造函数的相关内容并终于把错误改正(主要是不知道构造函数不应该有返回值这里...)
下面对构造函数进行主要介绍:
构造函数的目的是在对象一旦创建的时候便进行赋值
使用构造方法来实现:
public class Person{
String name;
int age;
//带参构造方法
Person(String n, int a){
name = n;
age = a;
}
//无参构造方法
Person(){
}
}
在上述代码中有两个构造方法,其中第一个是带参构造方法,第二个无参,在具体new一个Person的实现中,会根据是否带参数选择不同的构造方法。
比如:
Person P = new Person(ruby,6);
Person Y = new Person():
System.out.println(P.name+P.age);
System.out.println(Y.name+Y.age);
就会出现:
ruby6
(空)
的情况。
(1)一般函数是用于定义对象应该具备的功能。而构造函数定义的是,对象在调用功能之前,在建立时,应该具备的一些内容。也就是对象的初始化内容。
(2)构造函数是在对象建立时由jvm调用, 给对象初始化。一般函数是对象建立后,当对象调用该功能时才会执行。
(3)普通函数可以使用对象多次调用,构造函数就在创建对象时调用。
(4)构造函数的函数名要与类名一样,而普通的函数只要符合标识符的命名规则即可。
(5)构造函数没有返回值类型。
(6) 当类中没有定义构造函数时,系统会指定给该类加上一个空参数的构造函数。这个是类中默认的构造函数。当类中如果自定义了构造函数,这时默认的构造函数就没有了。
(7)在一个类中可以定义多个构造函数,以进行不同的初始化。多个构造函数存在于类中,是以重载的形式体现的。因为构造函数的名称都相同。
补充:
构造代码块可以使所有的对象进行初始化:
class Boy {
String name;
int age;
String gender;
// 构造代码块,给所有对象进行初始化。
{
System.out.println("实验写不完导致哇哇大哭");
}
Boy() {
System.out.println("无参构造");
}
Boy(String n, int a, String g) {
name = n;
age = a;
gender = g;
System.out.println("有参构造");
}
void run() {
System.out.println("实验写不完导致想要逃跑");
}
}
class Demo9 {
public static void main(String[] args) {
System.out.println();
Boy b = new Boy();
Boy b2 = new Boy("Mike", 45, "男");
}
}
此时创建的所有boy对象都会知道我的实验写不完,都会打印“哇哇大哭”和“想要逃跑”,这就是构造代码块的用处。
具体作用:
1:给对象进行初始化。对象一建立就运行并且优先于构造函数。
2:与构造函数区别
1:构造代码块和构造函数的区别,构造代码块是给所有对象进行统一初始化, 构造函数给对应的对象初始化。
2:构造代码块的作用:它的作用就是将所有构造方法中公共的信息进行抽取。
明天继续肝实验了,还是学到不少东西的,就是自己太菜了些5555,需要努力提升自己了..
引用:
https://www.cnblogs.com/guanjie20/p/3769772.html
https://blog.youkuaiyun.com/qq_33642117/article/details/51909346
本文详细介绍了在Java编程中如何使用Map的entrySet进行迭代,以及接口的基本概念和特点,包括接口与类的区别、接口的默认方法和私有方法。此外,还探讨了构造函数的作用和使用注意事项,强调了构造函数无返回值的特点。
1610

被折叠的 条评论
为什么被折叠?



