黑马程序员技术交流社区
标题: Java基础知识简单总结 [打印本页]
作者: bugaipaoqiziji 时间: 2018-4-6 22:58
标题: Java基础知识简单总结
一.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 等-提供将基础数据类型写入到文件中,或者读取出来。
作者: 小浙姐姐 时间: 2018-4-10 17:01
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |