一、开始的唠叨
有朋友开始接触Java,问我一些基础的问题,突然发现不知该如何回答,十分尴尬。痛定思痛,便回炉重造,将java基础的知识重新梳理了一遍。
以下是我看书时或摘要、或总结的语言,完全是Java中基础的基础。
二、学习笔记
(一)基本数据类型
1.标识符区分大小写:hello与Hello是不同的标识符。
2.基本数据类型的精度由低到高依次为:byte short char int long float double
3.格式控制符号:
%d | int类型 |
%c | char类型 |
%f | 浮点类型 |
%s | 字符类型 |
例如:
System.out.println("%d,%f",1,1.23)
4.数组的两种创建方式:
Object[] arry=new Object[n];
Object[] arry=new Object[]{x,y,z,..};
(二)表达式
1.switch case语句:case下加break或者加return都是可以的。
2.break与continue:break语句结束整个循环;continue结束当前循环,开始下一次循环。
(三)类与对象
1.多态:Java中多态分两种,重载(Overload)和重写(Override)。
重载:一个类中多个方法具有相同的名字,但方法的参数不同。
- 参数个数不同或者参数类型不同
- 返回类型与参数名称不参与比较
重写:子类重新(覆盖)父类的方法。
-
-
- 可以提高访问权限,不允许降低访问权限。
-
2.this关键字:this表示当前对象,在构造方法中代表该构造方法所创建的对象。
3.包与访问权限:
- java.lang包:系统自动添加,所以你从来都看不到。(包括System、Math类等)
- 包访问权限:不是三大国民修饰符修饰的成员变量和方法被称为友好变量和友好方法,在同一包中可以自由访问。
4.反编译与文档生成器:
- javap:将字节码反编译为源码。
- javadoc:将注释生成html文档。
5.生成jar文件:在Eclipse下,选择File——Export——java——JAR FILE
(四)子类与继承
1.Object类:所有类都继承自Object类,“Class A”原型是“Calss A extends Object”。
2.继承:
- 当子类与父类不在同一个包中,子类只继承父类中protected和public访问权限的成员变量与方法
- 子类继承的方法只能操作子类继承和隐藏的成员变量。子类新定义的方法可以操作子类继承和子类新声明的成员变量,但无法直接操作子类隐藏的成员变量(要使用super)
- 子类不继承父类的构造方法,因此子类在其构造方法中要使用super调用父类的构造方法。
- 当类中定义了一个或多个构造方法时,java不提供默认构造方法。因此父类中定义多个构造方法时,必须包括一个不带参数的构造方法。
(五)面向抽象编程
1.对象的向上转型:上转型对象不能操作子类新增的成员变量与方法
父类 f=new 子类();
2.Open-Closed Principle:系统应当对扩展开放,对修改关闭。(怎么办?面向抽象和接口啊!)
3.面向抽象编程:设计类时,不该让类面向具体的类,而是面向抽象类。
例子:
设计抽象类SIM,以便扩展具体的运营商。
public abstract class SIM {
protected String number;
protected String type;
public abstract void setNumber(String number);
public abstract void setType();
public void show(){
System.out.println("类型:"+type+"号码"+number);
}
设计手机类,重点是在手机类中添加SIM抽象类,等待子类具体实现。
public class MobliePhone {
private SIM sim;
public void setSIM(SIM sim){
this.sim=sim;
}
public void showMessage(){
sim.show();
}
实现两种类型的SIM卡,设为移动和联通。(Type类型可以在构造函数中实现)
public class yidong extends SIM{
@Override
public void setNumber(String number) {
this.number=number;
}
@Override
public void setType() {
this.type="联通";
}
主函数如下,若需要扩展SIM卡,只要继承SIM抽象类即可。如此设计即符合Java开闭原则。
public static void main(String[] args) {
MobliePhone mp=new MobliePhone();
SIM sim=new yidong();
sim.setNumber("123456789");
sim.setType();
mp.setSIM(sim);
mp.showMessage();
sim=new liantong();
sim.setNumber("987654321");
sim.setType();
mp.setSIM(sim);
mp.showMessage();
}
(六)面向接口编程
1.接口:
- 接口中只有抽象方法和常量,抽象方法一定是public,常量一定是public static,你看不到是因为系统隐藏了。
- 类实现接口,若没有重写接口中的全部方法,这个类就是一个抽象类。
- 接口要求一些类具有相同名称的方法,但不强迫这些类具有相同的父类。
- 接口无法调用类中非接口方法。
- (很关键)如果一个方法的参数是接口类型,就可以将实现该接口的类的实例的引用传递给该接口参数,这个接口参数就可以回调类实现的接口方法。
2.面向接口编程:核心思想是接口回调,与面向抽象编程有一定的相似性。
例子:
设计一个广告的接口。
public interface Advertisement {
void showMess();
void showCompany();
}
设计Televison类用于播放广告,重点是设置接口的参数回调。
public class Televison {
Advertisement adv;
public void setAdv(Advertisement adv){
this.adv=adv;
}
public void advertise(){
adv.showCompany();
adv.showMess();
}
实现具体的广告类
public class naobaijin implements Advertisement{
@Override
public void showMess() {
System.out.println("收礼只收脑白金");
}
@Override
public void showCompany() {
System.out.println("白金集团");
}
主函数如下,若需要扩展广告,只要实现Advertisement接口即可。如此设计即符合Java开闭原则。
public static void main(String[] args) {
Televison tv=new Televison();
tv.setAdv(new naobaijin());
tv.advertise();
tv.setAdv(new sufei());
tv.advertise();
}
三、结束的唠叨
遗忘是学习的一部分,就代码而言,几个星期不接触就会感到生疏。
以上整理的内容都是我二刷JAVA时觉得重要的以及之前遗忘的,再经过选择后发布。不成体系,仅供参考。