一、接口

  1)接口中定义的方法都是public权限,并且默认为public,而不是default。

  2)接口的实现(implements)是特殊的继承,类似于父类子类的关系,可以向上转型(非常重要)。

  3)一个类可以实现多个接口;一个接口可以继承多个接口。

二、静态变量/方法

  1)如果某方法(或变量)声明为static,则可以直接使用“类名.方法名(或变量名)”调用。

  2)静态方法只能使用静态变量。

三、静态工厂模式

  核心思想:把生成对象的代码(使用new来调用构造函数的方法)封装在工厂类中,降低代码重复率。

  例如:HPPrinter类和CanonPrinter类继承自Printer类,两者都包含print()方法但实现方法不同。如果现在要分开实现print()方法,则要分开生成对象,然后调用该方法,并且如果新增一台其他类型的Printer的话还需要重复这一步骤。静态工厂模式就是使用一个方法(写到一个PrinterFactory类里),传入类型为Printer的参数,然后执行print()方法。利用向上转型,只要是Printer的子类都适用。

四、包

  在命令行环境下编译java文件,如果声明了包名(package),命令需要修改为:

  javac -d . Test.java  ("."是指新生成的文件夹放于当前目录,“-d”是指directory)

  并且执行时需要加上包名,如

  java pack.Test

五、权限

  public > protected > default > private

  1)public可以包外访问,而default只能包内访问。

  2)private不能类外访问。

  3)protected拥有default所拥有的权限(但不能用于修饰类),而且可以跨包继承。子类和父类不在一个包中,但是子类可以使用父类中被修饰为protected的成员变量和方法。

  4)public类在一个文件中最多只能有一个,此时必须和java文件同名。没有public类则无此要求。

  5)如果在权限不足的情况下继承,继承本身不会出错(编译不会报错),但是成员变量和方法不允许访问,访问时会报错。

六、异常

  1)throw:抛出异常

  2)throws:声明有可能产生异常,一旦声明了就不需要在该函数内处理,而是可以在调用该函数时使用try...catch来处理。

七、内部类和匿名内部类

  1)设B是A的内部类,则生成B的对象前需要先生成A的对象:A.B b = new A().new B();

  2)内部类可以使用外部类的成员变量,每一个内部类都有与其相对应的外部类。内部类不能使用外部方法的局部变量,除非声明为final。

  3)匿名内部类:

b.fun(new A(){
public void doSomething(){
System.out.println("匿名内部类");
} //A是接口,这里直接生成一个实现了该接口的对象。
})

八、I/O

注:输入和输出是相对程序而言的

  1)字节流

    FileInputStream继承自InputStream(抽象);FileOutputStream继承自OutputStream(抽象)。

    InputStream: int read(byte[] b, int off, int len)

    OutputStream: void write(byte[] b, int off, int len)

FileInputSream fis = null;
try{
fis = new FileInputStream(""e:/src/from.txt);
byte [] buffer = new byte[100];
fis.read(buffer,0,buffer.length);
}
  • 声明输入流引用。
  • 生成代表输入流的对象。
  • 生成一个字节类数组。
  • 调用输入流对象的read方法,读取数据。

  注:buffer得到的都是ASCII值,若要打印出字符,需要

String s = new String(buffer);
s = s.trim();//调用String对象的trim()方法,将会去掉这个字符串的首位空格和空字符

  2)大文件的读写方法

while(true){
int temp = fis.read(buffer,0,buffer.length);
if( temp = -1){//返回值表示读取的数量,为-1表示读取结束;
break;
}//每次调用read()(或者类似的readLine())读指针都会向后移
}

  注:finally里要关闭fis和fos,而且这个语句也是要被包裹在try...catch里的。

  3)字符流

    FileReader继承自Reader(抽象),FileWriter继承自Writer(抽象)。

    区别于字节流,buffer是char类型的数组。

  4)节点流和处理流

    BufferedReader——字符输入处理流

    BufferedReader的初始化需要以FileReader(或其他Reader)为参数,即可以在普通的节点流的基础上添加新的功能。这被称为“装饰者模式”。

九、线程

1)创建线程的方法

  方法一:

  定义一个线程类,它继承Thread,并重写其中的run()方法,方法run()称为线程体;由于JAVA只支持单继承,用这种方法定义的类不能再继承其他类。

  run()是public方法。

  调用线程方法:生成线程类的对象,然后调用start()方法。

  注:实际运行时存在3个(或以上)个线程:主程序线程、用户定义的线程和垃圾回收线程。主程序线程和用户定义的线程交替进行,无规律。

  若调用时写的是run()而不是start(),程序会先执行完run()然后在执行其他,此时并不是多线程模型。

  方法二:

  提供一个实现接口Runnable的类作为线程的目标对象,在初始化一个Thread类或者Thread子类的线程对象时,把目标对象传递给这个线程实例,由该目标对象提供线程体。用匿名内部类会简单很多。

  -class RunnableImpl implements Runnable{run(){}}

  -Runnable ri = new RunnableImpl()

  -Thread t = new Thread(ri)

  -t.start()

  注:在实际开发中尽量少用继承,因为Java只支持单继承,故方法二更常用

2)线程的简单控制方法

  1.中断线程

    Thread.sleep();

    Thread.yield();//放弃CPU,然后和其他线程一起争夺CPU

    //以上都是静态方法

  2.设置线程的优先级

    getPriority();

    setPriority();

    //线程的优先级最大是10,最小是1,可以使用Thread所提供的静态常量来设置(max_priority,min_priority)。

3)线程的同步控制

  -.每个线程都有名字,可以通过getName()和setName()操作。

  -Thread Thread.currentThread用于获取当前正在执行这段代码的线程。

  -为避免同步错误,引入同步代码块

    synchronized(this){

      //该进程获得同步锁

      //执行完该代码块才允许其他线程使用CPU

    }

Android学习笔记(四) JAVA基础知识回顾的更多相关文章

  1. 学习android学习必备的java基础知识--四大内部类

    学习android必备的java基础知识--四大内部类 今天学习android课程,因为我的主专业是JAVA,但是兴趣班却有这其他专业的同学,学习android 需要具备一些java的基础知识,因此就 ...

  2. Java基础学习笔记四 Java基础语法

    数组 数组的需求 现在需要统计某公司员工的工资情况,例如计算平均工资.最高工资等.假设该公司有50名员工,用前面所学的知识完成,那么程序首先需要声明50个变量来分别记住每位员工的工资,这样做会显得很麻 ...

  3. java基础知识回顾之---java String final类普通方法

    辞职了,最近一段时间在找工作,把在大二的时候学习java基础知识回顾下,拿出来跟大家分享,如果有问题,欢迎大家的指正. /*     * 按照面向对象的思想对字符串进行功能分类.     *      ...

  4. Java基础知识回顾之七 ----- 总结篇

    前言 在之前Java基础知识回顾中,我们回顾了基础数据类型.修饰符和String.三大特性.集合.多线程和IO.本篇文章则对之前学过的知识进行总结.除了简单的复习之外,还会增加一些相应的理解. 基础数 ...

  5. Java基础知识回顾(一):字符串小结

    Java的基础知识回顾之字符串 一.引言 很多人喜欢在前面加入赘述,事实上去技术网站找相关的内容的一般都应当已经对相应知识有一定了解,因此我不再过多赘述字符串到底是什么东西,在官网中已经写得很明确了, ...

  6. Java基础知识回顾之一 ----- 基本数据类型

    前言 在开始工作至今,学习各种各样的技术之中发现自己的很多Java的基础知识都忘了⊙﹏⊙b汗... 而且越是学习越是发现Java基础的重要性,所以准备单独抽一下时间进行Java基础的重新学习.在重新学 ...

  7. ios开发学习笔记001-C语言基础知识

    先来学习一下C语言基础知识,总结如下: 在xcode下编写代码. 1.编写代码 2.编译:cc –c 文件名.c 编译成功会生成一个 .o的目标文件 3.链接:把目标文件.o和系统自带的库合并在一起, ...

  8. Java学习笔记之—Java基础

    将学习到的JAVA基础用xmind记录了下来,需要原件的可以私信

  9. FreeRTOS学习笔记——FreeRTOS 任务基础知识

    RTOS 系统的核心就是任务管理,FreeRTOS 也不例外,而且大多数学习RTOS 系统的工程师或者学生主要就是为了使用RTOS 的多任务处理功能,初步上手RTOS 系统首先必须掌握的也是任务的创建 ...

随机推荐

  1. pycharm里html注释是{# #}而不是<!-- -->?

    修改方式:如图修改成值None以后,command+/快捷键,html注释的符号就是<!-- 注释内容 -->:为Jinja2的时候,注释符号就是{# 注释内容 #} 修改成None时,H ...

  2. tornado的http服务器实现

    使用tornado实现的一个简单http服务器:只需要定义自己的处理方法,其他的东西全部交给tornado完成. #coding:utf-8 import tornado.httpserver imp ...

  3. 条款十七: 在operator=中检查给自己赋值的情况

    在赋值运算符中要特别注意可能出现别名的情况,其理由基于两点.其中之一是效率.如果可以在赋值运算符函数体的首部检测到是给自己赋值,就可以立即返回,从而可以节省大量的工作,否则必须去实现整个赋值操作. 另 ...

  4. 赵雅智_Android的getResources()资源引用

    今天做一个Android的刮刮乐项目.里面用到非常多的地方用到了getResources. <span style="font-size:12px;"> // 获得图片 ...

  5. i18n国际化的例子

    这个可以点击菜单进行中英文切换,每次切换就可以改变sessionStorage.languge,进行改变i18n的参数lang的值,然后重新调用下就可以了. 工程结构: i18n--| |---css ...

  6. 8.跟我学solr---UpdateRequestProcessor具体解释

    简单介绍 java web开发的同学应该非常熟悉,在开发中常常会使用filter来处理请求中的一些切面需求. solr也提供类似的一种链式结构的handler来满足在加入数据索引请求的时候.通过切片的 ...

  7. @SessionAttributes的覆盖与加入

    在我们使用@SessionAttributes 注解向session加入对象时.当我们使用ModelMap的addAttribute()方法是指向session中加入一个新的对象,而使用HttpSes ...

  8. 7-81 js课程小结

    7-81 js课程小结 学习要点 理解全局对象 变量的作用范围 理解全局对象Global 全局属性和函数可用于所有内建的 JavaScript 对象.全局对象是所有全局方法的拥有者,用来统一管理全局方 ...

  9. Eclipse 工程配置与目录结构及各种文件夹(常用插件)

    .classpath..project 是 Eclipse 工程所必须的文件. OpenExplorer: 该 jar 包的下载地址:samsonw/OpenExplorer 安装配置方法:eclip ...

  10. 最长回文子串问题 O(n)算法 manacher URAL1297 HDU3068

    先来看一道简单的题,ural1297 给定一个1000长度的字符串,求最长回文子串. 看起来很Naive,乱搞一下,O(n^2)都可以解决. 再来看这个题 HDU3068 120个110000长度的字 ...