软件构造lab3学习笔记(1)

本文详细介绍了在Java编程中如何使用Map的entrySet进行迭代,以及接口的基本概念和特点,包括接口与类的区别、接口的默认方法和私有方法。此外,还探讨了构造函数的作用和使用注意事项,强调了构造函数无返回值的特点。

在软构的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

https://www.runoob.com/java/java-map-interface.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值