1、带参数方法定义
格式:public static void 方法名(参数){......}
格式(单个参数):public static void 方法名 (数据类型变量名){......}
public static void isEvenNumber (int number) {......}
2、接口的特点
1)接口用关键字interface修饰 public interface接口名{}
2)类实现接口用implements表示 public class 类名 implements 接口名{}
3)接口不能实例化
接口如何实现实例化呢?参照多态的方式,通过实现类对象实例化,这叫接口多态。
多态的形式:具体类多态,抽象类多态,接口多态。
多态的前提:有继承或者实现关系;有方法重写;有父(类/接口)引用指向(子/实现) 类对象
4)接口的实现类
要么重写接口中的所有抽象方法
要么是抽象类
5)接口里的成员变量只能是常量,且被静态修饰,(一般默认有static final修饰),接口里没有非抽象方法(一般默认有public abstract修饰),接口没有构造方法,因为接口主要是对行为进行抽象的,是没有具体存在的。
6)一个类如果没有父类,默认继承自Object类
7)接口使用成员方法时,不能有方法体:Interface abstract methods cannot have body
3、类和接口的关系
1)类和类的关系
继承关系,只能单继承,但是可以多层继承
2)类和接口的关系
实现关系,可以单实现,也可以多实现,还可以在继承一个类的同时实现多个接口
3)接口和接口的关系
继承关系,可以单继承,也可以多继承
4、String line = sc.nextLine();用于获取键盘录入字符串数据
5、String构造方法
public String():创建一个空白字符串对象,不含有任何内容
public String(char[] chs):根据字符数组的内容,来创建字符串对象
public String(byte[] bys):根据字节数组内容,来创建字符串对象
String s=”abc”;直接赋值的方式创建字符串对象,内容就是abc(推荐使用)
6、Set集合特点
1)set集合不包含重复元素的集合
2)没有带索引的方法,所以不能用普通for循环变量
3)Hashset:对集合的迭代顺序不做任何保证
7、Map集合的遍历(方式一)
1)获取所有键的集合,用keySet()方法实现
2)遍历键的集合,获取到每一个键,用增强for循环实现
3)根据键去找值,用get(Object key)方法实现
8、内部类的访问特点
1)内部类可以直接访问外部类的成员,包括私有
2)外部类要访问内部类的成员,必须要创建对象
9、Math类没有构造方法,想要使用类中的成员,看类的成员是否都是静态的,如果是,通过类名就可以直接调用
10、Thread类中设置和获取线程优先级的方法
1)public final int getPriority():返回此线程的优先级
2)public final void getPriority(int newPriority):更改此线程的优先级
线程默认的优先级是5;线程优先级的范围是1-10;
线程优先级高仅仅表示线程获取得CPU时间片的几率高,但是要在次数比较 多,或者多次运行的时候才能看到你想要的效果。
11、相比继承Thread类,实现Runnable接口的好处
1)避免Java单继承的局限性
2)适合多个相同程序代码去处理同一个资源的情况,把线程和程序的代码、数据有效分离,较好地体现了面向对象的设计思想。
12、同步代码块
锁多条语句操作共享数据,可以使用同步代码块实现
1)格式:synchronized(任意对象){
多条语句操作共享数据的代码
}
2)synchronized(任意对象):就相当给代码加锁了,任意对象就可以看成一把锁。
同步的好处和弊端
3)好处:解决了多线程的数据安全问题
4)弊端:当线程很多时,因为每个线程都会去判断同步上的锁,这是很耗费资源的,无形之中会降低程序运行效率。
13、网络编程的三要素
1)IP地址:唯一标识网络中的设备
2)端口号:唯一标识设备中的应用程序
3)协议:通信双方必须同时遵循对应的协议才能完成数据交换,常见的协议有UDP协议、TCP协议
14、UDP发送数据
1)创建发送端的Socket对象(DatagramSocket)
2)创建数据,并把数据打包
3)调用DatagramSocket对象方法发送数据
4)关闭发送端
15、UDP接收数据
1)创建接收端的Socket对象(DatagramSocket)
2)创建一个数据包,用于接收数据
3)调用DatagramSocket对象方法接收数据
4)解析数据包,并把数据在控制台显示
5)关闭接收端
17、不能创建对象的三种情况
1)第一种:private修饰的私有对象
构造方法私有,不能创建对象
原因 :因为子类要创建对象,继承父类。就得调用父类的构造方法,此时父类的构造方法被私有了,也就不能创建对象了。
2)第二种:抽象类
原因 :抽象类(父类)里的方法很有可能是抽象方法。假如抽象类也能创建对象,创建对象之后,它调用自己的方法,而此时的方法却没有方法体,这时候创建的对象也没有意义,所以说抽象类不能创建对象。
拿animal的例子来想,动物是一个抽象类,抽象类不是具体的事物,如果创建一个动物的对象,那它有可能是猫,也有可能是狗,那就不确定了。
3)第三种:接口
原因 :接口创建不了对象,因为成员变量默认都是常量。而构造方法是用来给成员变量初始化并赋值的,此时成员变量是常量,所以无意义。故接口没有构造方法,也创建不了对象。
16、TCP发送数据的步骤
1)创建客户端的Socket对象(Socket)
2)获取输出流,写数据
3)释放资源
17、TCP接收数据的步骤
1)创建服务器端的Socket对象(ServerSocket)
2)监听客户端连接,返回一个Socket对象
3)获取输入流,读数据,并把数据显示在控制台
4)释放资源
18、网络编程出现的问题
客户端:数据来自于文本文件,接收服务器反馈
服务器:接收到的数据写入文本文件,给出反馈
出现问题:程序一直等待
原因:读取数据的方法是阻塞式的
解决方法:自定义结束标记;使用shutdownOutput()方法(推荐)
19、泛型的好处
1)把运行时期的问题提前到了编译期间
2)避免了强制类型转换
20、成员变量:类中方法外的变量,局部变量:方法中的变量
21、static关键字在使用的时候需要注意的几点
1)在静态方法中不可以使用this关键字
2)在静态方法中不可以直接调用非静态方法
3)局部变量不可以使用static关键字声明
4)主方法必须使用static声明
5)只有内部类才可以使用static关键字声明
22、final关键字
1)修饰方法:声明该方法是最终方法,不能被重写
2)修饰变量:表明该变量是常量,不能被再次赋值
3)修饰类:表明该类是最终类,不能被继承
4)变量是基本类型:final修饰的是基本类型的数据值不能发生改变
5)变量是引用类型:final修饰指的是引用类型的地址值不能发生改变,但是地址里面的内容是可以发生改变的
23、抽象类和接口的区别
抽象类是对事物的抽象(包括行为和属性),而接口是对行为的抽象。
门和警报的例子
门:都有open()和close()两个动作,这个时候,我们可以分别使用抽象类和接口来定义这个抽象概念
//抽象类 public abstract class door{ public abstract void open(); public abstract void close(); public abstract void alarm(); }
所有继承了这个抽象类的子类都具备了报警功能,有的门根本不需要报警功能
//接口 public interface Door{ void open(); void close(); void alarm(); }
open和close这两个方法也必须去实现,也许这个类根本不具备open和close这两个功能,所以应该把open和close放在抽象类中,alarm放在接口中。