一.Java语言基础 1.Java语言特点 *简单性 *解释性 *面向对象 *高性能 *分布式处理 *多线程 *健壮性 *动态 *结构中立 *安全性 *开源 *跨平台 2.关键字 *什么是关键字 *被Java语言赋予特定含义的单词 *关键字特点 *组成关键字的字母全部小写 3.标识符 *标识符组成规则 *英文大小写字母/数字字符/$和_ *不能使用关键字/不能数字开头 *常见命名规则(重点!!!): * 包:把包理解成我们的文件夹,一般是公司域名倒着写,com.itheima * 类或者接口 如果是一个单词,首字母大写 如果是多个单词,每个单词的首字母都大写 * 方法或者变量 如果是一个单词,全部字母小写 如果是多个单词,从第二个单词开始首字母大写 * 常量 如果是一个单词,全部字母大写 如果是多个单词,每个单词之间用_分开 4.注释 *单行 // *多行 /* */ *文档注释 /** */ 5.数据类型 *整数型 byte 占1个字节 -128到127 short 占2个字节 -2^15~2^15-1 int 占4个字节 -2^31~2^31-1 long 占8个字节 -2^63~2^63-1 *浮点型(小数型) float 占4个字节 -3.403E38~3.403E38 double 占8个字节 -1.798E308~1.798E308 *字符型 char 占2个字节 0-65535 *布尔型 boolean true和false 二.面向对象 面向对象三大特性:封装/继承/多态 1继承与多态 1.1.覆盖父类方法的规则 *参数必须要一样,且返回类型必须要兼容 *不能降低方法的存取权限 1.2.方法的重写 *返回类型可以不同 *不能只改变返回类型 *可以更改存取权限,子类重写方法的权限必须大于等于父类方法的权限 *不能重写父类私有的方法 *在子父类当中,子类的方法和父类的完全一样,子类重写了父类的方法(覆盖),当子类重写了父类的方法之后,使用子类对象调用的就是子类的方法。(方法重写有两个必备条件:1.必须两个类要有继承关系。2.子类中的方法的方法名,参数列表,返回值类型都要和父类中的这个方法相同。) *方法的上面加上@Override就表示这是一个重写的方法 1.3.方法的重载和重写的区别 *重载:在同一个类中,方法名相同,参数列表不同。与返回值无关。 *重写:1.必须两个类要有继承关系。2.子类中的方法的方法名,参数列表,返回值类型都要和父类中的这个方法相同。 1.4.继承的优缺点 优点: *提高了代码的复用性 *提高了代码的可维护性 *让类和类产生关系,是多态的前提 缺点: *类的耦合性增强了 开发的原则:高内聚低耦合,内聚:就是自己完成某件事情的能力,耦合:类与类的关系 1.5..多态的前提 *子父类的继承关系 *方法的重写 *父类引用指向子类对象 1.6.多态的成员特点 *成员变量 编译时看的是左边,运行时看的左边 *成员方法 编译时看的是左边,运行时看右边 1.7.多态的优缺点 优点:可以提高代码的复用性(多态前提所保证的),提高代码的可扩展性(把方法的参数写成父类类型,这样我们在调用的时候可以传任意的子类对象,就不需要每多一个子类就要重写改代码) 缺点:无法直接访问子类特有的成员 2.修饰符 2.1.final *final就是修饰符,可以用于修饰类、成员方法和成员变量。 *final所修饰的类:不能被继承,不能有子类 *final所修饰的方法:不能被重写 *final所修饰的变量:是不可以修改的,是常量 2.2.static *被static修饰的东西会被该类的所有对象共享。 *调用:被static修饰的东西可以使用类名调用,也可以使用对象名调用。 *随着类的加载而加载 *静态的加载优先于对象。 *静态的只能调用静态的,非静态的既能调用静态成员也可以调用非静态成员。 3.接口与抽象 3.1抽象 *如果不想让某个类被初始化,就以abstract关键词将它标记为抽象的. *抽象的类可以带有抽象和非抽象的方法. *如果类带有抽象的方法,则此类必定标识为抽象. *抽象的方法没有内容,它的声明以分号结束. *抽象的方法必须在具体的类中运行. *抽象类中可以没有抽象方法 *抽象类不能创建对象(不能实例化) *抽象类和类的关系也是继承 *一个类继承了抽象类要么重写所有的抽象方法,要么他自己是抽象类 *Java所有的类都是Object直接或者间接的子类. *方法可以声明Object的参数或返回类型. *不管实际上所引用的对象是什么类型,只有在引用变量的类型就是带有某方法的类型是才能调用该方法. *Object引用变量在没有类型转换的情况下不能赋值给其他类型,若堆上的对象类型与所要转换的类型不兼容,则此转换会在执行期间产生异常. *从ArrayList<Object>取出来的对象只能被Object引用,不然就要用类型转换来改变. 3.2接口 *接口里所有的方法全是抽象方法,接口和抽象类一样不能实例化。 *接口就好像100%纯天然抽象类. *class可以实现多个接口. *接口和抽象类的区别 共性:不断的抽取,抽取出抽象的概念 区别1:与类的关系 类与接口是实现的关系,而且是多实现,一个类可以实现多个接口 类与抽象类是继承关系,java中的继承是单一继承,一个类只能有一个父类,Java中的继承是多层继承 区别2:成员 成员变量:抽象类可以有成员变量,也可以有常量 接口只能有常量 成员方法:抽象类可以有抽象方法,可以有非抽象方法 接口只能有抽象方法,而且方法有默认修饰符 public abstract 构造方法:抽象类有构造方法的 接口没有构造方法 4.生命周期 *对象的生命周期要看引用变量的生命周期而定 *局部变量只会存活在声明该变量的方法中 *实例变量的寿命与对象相同.
三.异常处理 *方法可在运行期间遇到问题抛出异常 *异常是Exception类型的对象 *编译器不会注意RuntimeException类型异常 *方法可以用throw关键词抛出异常对象 throw new FileIsTooSmallException(); *可能会抛出异常的方法必须声明成throws Exception *如果要处理异常,就把调用包在try/catch块zhong *如果不打算处理异常,还是可以正式地将异常给ducking来通过编译 *catch与finally不能没有try *try与catch之间不能有程序 *try一定要有catch或finally *只带有finally的try必须要声明异常 四.事件与图形 1.事件 *GUI从创建window开始,通常会使用 JFrame frame = new JFrame(); *你可以加入按钮/文字字段等组件 frame.getContentPane().add(button); *JFrame与其他组件不同,不能直接加上组件,要用它的content pane *要显示window,你得指定尺寸和执行显示动作 frame.setSize(300,300); frame.setVisible(true); *监听GUI事件才能知道用户对接口做了什么事情 *要对事件源注册就调用事件源的注册方法,它的方法一定是add<EventType>Listener这种button.addActionListenner(this); *通过实现所有的事件处理方法来实现监听接口.对ctionEventer而言 public void actionPerformed(ActionEvent event) {button.setText("Clicked!");} 2.图形 *二维图形可以直接画在图形组件上 *.gif与.jpeg文件可以直接放在组件上 *用JPanel的子类覆盖paintComponent()方法绘制自定义的图形 *paintComponent()方法会由GUI系统调用,你不可以自己调用,它的参数是个你不能自己创建的Graphics对象 *Graphics对象有些你可以调用的方法,像是 graphics.setColor(Color.blue); g.fillRect(20,50,100,120); *使用Image来绘制.jpg Image image = new ImageIcon("pic.jpg").getImage(); g.drawImage(image,3,4,this); *paintComponent()的Graphics参数实际上是个Graphics2D *调用Graphics2D的方法前,你必须把Graphics对象转换为Graphics2D Graphics2D g2d = (Graphics2D) g; 五.IO流 1.字符流和字节流 字节流和字符流的区别: 读写单位不同:字节流以字节(8bit)为单位,字符流以字符为单位,根据码表映射字符,一次可能读多个字节。 处理对象不同:字节流能处理所有类型的数据(如图片、avi等),而字符流只能处理字符类型的数据。 字节流:一次读入或读出是8位二进制。 字符流:一次读入或读出是16位二进制。 设备上的数据无论是图片或者视频,文字,它们都以二进制存储的。二进制的最终都是以一个8位为数据单元进行体现,所以计算机中的最小数据单元就是字节。意味着,字节流可以处理设备上的所有数据,所以字节流一样可以处理字符数据。 结论:只要是处理纯文本数据,就优先考虑使用字符流。 除此之外都使用字节流。 2.输入流和输出流 输入流只能进行读操作,输出流只能进行写操作,程序中需要根据待传输数据的不同特性而使用不同的流。 输入字节流 InputStream是所有的输入字节流的父类,它是一个抽象类。 输出字节流 OutputStream是所有的输出字节流的父类,它是一个抽象类。 输入流:InputStream或者Reader:从文件中读到程序中; 输出流:OutputStream或者Writer:从程序中输出到文件中; 3.常用的节点流 父 类 :InputStream 、OutputStream、 Reader、 Writer 文 件 :FileInputStream 、 FileOutputStrean 、FileReader 、FileWriter 字符串 :StringReader、 StringWriter 4.常用的处理流 缓冲流:BufferedInputStrean 、BufferedOutputStream、 BufferedReader、 BufferedWriter 增加缓冲功能,避免频繁读写硬盘。 转换流:InputStreamReader 、OutputStreamReader实现字节流和字符流之间的转换。 数据流: DataInputStream 、DataOutputStream 等-提供将基础数据类型写入到文件中,或者读取出来。
|