javaSE
文章目录
- javaSE
- 1.基本语法
- 2、面向对象
- 2.1 面向对象和面向过程
- 2.2面向对象的两个要素
- 2.3 属性
- 2.4 默认初始化情况
- 2.5 匿名对象
- 2.6 重载
- 2.7 可变个数形参
- 2.8 变量的赋值
- 2.9 封装性
- 2.10 构造器
- 2.11 属性赋值顺序
- 2.12 javaBean
- 2.13 this关键字
- 2.14 package
- 2.15 import
- 2.16 继承
- 2.17 重写
- 2.18 super
- 2.19 多态
- 2.20 instanceof
- 2.21 ==、=和equals()
- 2.22 自动装箱和拆箱
- 2.23 static
- 2.25 final
- 2.26 abstract
- 2.27 interface
- 2.28 abstract和interface的区别
- 2.29 内部类
- 3 IO流
1.基本语法
1.1 类
一个java源文件可以声明多个类(class),但是智能又一个类声明为public,而且声明为public的类必须与文件名相同
1.2 程序入口
程序入口为main方法
1.3 控制台打印
System.out.println();//输出并换行
System.out.print();//输出不换行
1.3 命名规则
包名:小写
类名和接口名:所有单词首字母大写
变量名:第一个单词首字母小写,第二个单词开始每个单词开始大写。
静态变量名:所有字母大写
1.4 标识符
26个英文字母、0-9、_和¥符号组成
首字母不能用数字
不可使用关键字
java严格区分大小写
标识符不能含有空格
1.5 基本数据类型
整型、浮点型、字符型、布尔型。
整型:byte(1字节)、short(2)、int(4)、long(8)
注:long型结尾必须加上l或L
浮点型:float(4)、double(8)
注:float型结尾必须加上f或F
字符型:char(1)
布尔型:boolean(结果为true或false)
1.6 自动类型转换
当容量小的与容量大的运算时,自动转为容量大的数据类型。
注:但是当比int类型小的运算,不管有没有int型,都转化为int。
1.7 强制类型转换
强转符号:()
例如:double a=1.1;
int c=(int)a;
1.8 String类型
String为引用数据类型。
String可用➕与基本数据类型运算,结果认为String
1.9 取余
负数%正数=负数
正数%负数=正数
1.10 赋值
最好不要将一个高精度的赋值给一个低精度
1.11 比较运算
返回boolean类型
==:判断前后是否相等
=:赋值
1.12 逻辑运算
&&(与):同真为真,否则为假。符号左右都会执行
&:同真为真,否则为假。符号左边为false,右边不执行
||(或):一真为真,否则为假。符号左边为true,右边会执行。
|:一真为真,否则为假。符号左边为true,右边不会执行。
1.13 位运算
<<:左移指的是在二进制下左移两位。在一定范围内,每左移1位,相当于*2.
>>:右移指的是在二进制下右移两位。在一定范围内,每右移一位,相当于/2.
1.14 三元运算符
(条件表达式)?表达式1:表达式2
表达式1和2要求一致。
1.15 从键盘获取值
scanner sc=new scanner(system.in);
int num=sc.nextInt();
String c=sc.next();
1.16 分支结构
switch-case 的执行效率比if-else高
1.17 break和continue
break:跳出循环。
continue:结束本次循环,继续下次循环。
1.18 数组
静态初始化:int a[]; a=new int[]{1,2,3,4};
动态初始化:String [] name=new String [5];
1.19 Arrays工具类
常用API:
boolean a=Arrays.equals(arr1,arr2);//比较两个数组是否相等。
Arrays.toString(arr1);//输出数组的值
Arrays.fill(arr1,10)//将指定的值填充到数组中
Arrays.sort(arr1);//数组排序
2、面向对象
2.1 面向对象和面向过程
面向过程:强调的是该怎么做。
面向对象:强调的是谁来做。
2.2面向对象的两个要素
类:对一事物的描述,是抽象的、概念意义上的定义
对象:是实际存在的该类事务的每个个体,因而也称为实例。
面向对象的程序设计的重点是类的设计。
注:属性=成员变量=field=域、字段
方法=成员方法=函数=method
创建累的对象=类的实例化=实例化类
2.3 属性
成员变量和局部变量区别:
成员变量:直接在类的{}中定义
局部变量:声明在方法内、方法形参、代码块内、构造器形参等内。
注:权限修饰符不能修饰局部变量。
2.4 默认初始化情况
属性:整型:0
字符型:0
浮点型:0.0
布尔型:false
引用数据类型:null
局部变量:没有默认初始化值。
意味着我们必须在局部变量调用前,一定要显示赋值。
2.5 匿名对象
我们在创建对象,没有显式的给赋给一个变量名。即为匿名对象
特征:匿名对象只能调用一次
2.6 重载
定义:一个类中,允许存在一个以上的同名方法,只要他们的参数个数或者参数类型不用即可。跟方法的权限修饰符、返回值类型、形参变量名、方法体都没关系。
2.7 可变个数形参
格式:数据类型...变量名(Sting str)
如:public void show(String ... str)
特点:1、调用时传入参数可以是0个、1个等等
2、与本类中方法名相同,形参不用的方法构成重载。
3、与本类中方法名相同,形参类型也相同的数组不能构成重载。也就是二者不能共存。
4、多个形参时,可变形参声明在末尾。
5、可变个数形参在方法的形参中,最多只能声明一个可变形参。
2.8 变量的赋值
基本数据类型赋值:此时赋值的是变量所保存的数据值。
引用数据类型:此时实参给形参的是实参存储数据的地址值。
2.9 封装性
java的四种权限修饰符:
private:类内部
缺省:统一包中
protected:不通报的子类
public:统一工程中
四种权限可以用来修饰类及类的内部结构:属性、方法、构造器、内部类。
修饰类只能用:缺省、public
封装性的体现:我们将属性私有化(private),提供公共的方法来获取(getXxx和setXxx)此属性的值。
2.10 构造器
作用:1、创建对象(类)
2、初始化对象的信息
注:只要声明了对象,就会执行构造方法里的代码。
说明:如果没有显示的定义构造器,系统会默认提供一个空参构造器
2.11 属性赋值顺序
1、默认初始化
2、显示初始化/在代码块中赋值
3、构造器中初始化
4、通过“对象.方法”或者“对象.属性”的方式赋值
2.12 javaBean
符合以下要求才能称为javaBean
1、类是公共的
2、又一个无参的构造器
3、有属性,且有对应的get和set方法
2.13 this关键字
理解:当前对象或者当前正在创建的对象
1、在类的方法中,我们使用this.属性或者this.方法的方式,调用当前正在创建的对象属性或方法(通常我们省略this)。
特殊情况:当我们方法的形参和类的属性同名时,我们必须显式的使用this.变量的方法,表明此变量是属性,而非形参。
2、类的构造器中,我们使用this.属性或者this.方法的方式,调用当前正在创建的对象或属性。一般省略。
特殊情况:当我们构造器的形参和类的属性同名时,我们用this.变量名的方式,表明变量是属性,而非形参。
3、this调用构造器
我们在类的构造器中,可以显示的使用this(形参列表)的方式,调用本类中指定的其他构造器。
构造器中不能通过this调用自己
一个类中如果有n个构造器,则最多只有n-1个构造器使用了this(形参列表)
this(形参列表)必须声明在当前构造器首行
构造器内部,最多只能声明一个this(形参列表),调用其他的构造器。
2.14 package
1、为了实现项目中类的管理,提出了包的概念
2、放在源文件首行
3、同一个包下,不能命名同名的接口、类
4、遵循标识符命名规则,一般包名全部小写
2.15 import
导入指定包下的类、接口。
注:导入可以使用:"xxx.*"的方式调用xxx下的所有结构,如果使用xxx子包下的结构仍需要显示导入。
import static:导入指定类或接口中的静态结构:属性或方法。
2.16 继承
class A extends B{}
A(子类)继承B(父类)
注:子类继承父类后,仍然会获取父类中的私有结构。
特点:
1、单继承
2、一个类可被多个类继承
3、如果一个类没有显示声明父类,则继承于java.lang.Object
4、所以java类都具有java.lang.Object类声明的功能
2.17 重写
子类继承父类后,可以对父类中同名同参数的方法进行覆盖操作。
重写以后,当子类对象调用方法时,实际执行子类充血的方法。
重写规定:
1、子类重写的方法名和形参列表与父类被重写的方法名和形参列表一样。
2、子类重写后,权限修饰符不能小于父类的权限修饰符。且父类中为private的权限的方法不能被重写
3、返回值类型:
父类返回值:void-------子类只能返回void
父类返回值:A类-------子类只能返回A类或A的子类
父类返回值:基本数据类型(如int)-------子类只能返回基本数据类型(且必须位int)
4、子类和父类中的同名参数方法要么都声明为非static(考虑重写),要么都没static(不是重写)
2.18 super
理解:父类的
调用:
1、在子类的方法或者构造器中,通常使用“super.属性”或者“super.方法”的方式,显式的调用父类中声明的属性或者方法。通常省略
特殊:当子类和父类定义了同名属性时,想在子类中调用父类声明的属性,必须显示的使用super.属性。
当子类重写了父类的方法以后,我们想在子类的方法中调用父类被重写的方法,必须显式使用“super.方法”的方式。
2、super调用构造器
我们可以在子类的构造器中显式的使用“super(形参列表)”的方式,调用父类中声明的指定构造器。
“super(形参列表)”必须声明在子类构造器首行。
“super(形参列表)”和“this(形参列表)”不能同时出现。
在子类构造器首行没出现显式的 “super(形参列表)”和“this(形参列表)”,则默认调用的父类中空参构造器:super()。
2.19 多态
理解:一个事物的多种形态
对象的多态性:父类的引用指向子类的对象(或子类的对象赋给父类的引用)如:Person p=new Man();
多态的使用:虚拟方法的调用。有了多态,我们在编译期只能调用父类中声明的方法,但在运行期我们实际执行子类重写父类的方法。
总结:编译看左边,运行看右边。
多态使用前提:1、类的继承关系以后才能使用多态。2、方法的重写(若不重写多态没意义)。
对象的多态:只适合方法,不适合属性。(编译运行都看左边)
2.20 instanceof
a instanceof A:判断a是否为A的子类。是返回true,否则返回false。
2.21 ==、=和equals()
==:基本数据类型比较值,引用数据类型比较值和地址。
=:基本数据类型将单纯赋值,引用数据类型把地址赋给另一个。
equals():只适合引用数据类型,比较的是值,不是地址。
2.22 自动装箱和拆箱
自动装箱:基本数据类型-->引用数据类型
自动拆箱:引用数据类型-->基本数据类型
2.23 static
可以修饰:属性、方法、代码块、内部类
属性:静态变量,任何对象都拥有用一个变量。
实例变量:不同对象拥有变量不同。
方法:静态方法类和对象都可调用。
静态方法中不可使用this、super关键字
2.25 final
final可修饰类、方法、属性
修饰类:此类不能被其他类继承
修饰方法:此方法不能被重写
修饰属性:此变量就是一个常量。一但赋值,就不能重新赋值。
2.26 abstract
可修饰类、方法。
修饰类:抽象类,不能实例化,抽象类一定有构造器,便于子类实例化。
修饰方法:只有方法声明,没有方法体。包含抽象方法的一定是抽象类,返之不一定。
2.27 interface
接口可实现多继承,弥补了继承的不足。
2.28 abstract和interface的区别
abstract是捕捉子类的通用特性。抽象类的设计目的,是代码复用。
interface是抽象方法的集合。
abstract中有成员变量和静态方法,JVM使用不同的绑定规则。如果一个类有多个直接的父类,那么会使绑定规则变得更复杂。为了简化软件的体系结构和绑定机制,java语言禁止多继承。
2.29 内部类
3 IO流
IO流主要分为字节流和字符流。字节流主要用于非文本数据,字符流主要用于文本数据。
3.1 字节流
字节流的输入流:
抽象类:InputStream
缓冲流:BufferedInputStream
实现类:FileInputStream
字节流的输出流:
抽象类:OutputStream
缓冲流:BufferedOutputStream
实现类:FileOutputStream
3.2 字符流
字符流的输入流:
抽象类:Reader
缓冲流:BufferedReader
实现类:FileReader
字符流的输出流:
抽象类:Writer
缓冲流:BufferedWriter
实现类:FileWriter
注意:字符流使用结束后必须调用flush()方法, 节流没有缓冲区,是直接输出的,而字符流是输出到缓冲区的。因此在输出时,字节流不调用colse()方法时,信息已经输出了,而字符流只有在调用close()方法关闭缓冲区时,信息才输出。要想字符流在未关闭时输出信息,则需要手动调用flush()方法。
3.3 转换流
转换流的特点:
其是字符流和字节流之间的桥梁
**可对读取到的字节数据经过指定编码转换成字符
可对读取到的字符数据经过指定编码转换成字节**
何时使用转换流?
当字节和字符之间有转换动作时;
流操作的数据需要编码或解码时。
具体的对象体现:
InputStreamReader:字节到字符的桥梁
OutputStreamWriter:字符到字节的桥梁
这两个流对象是字符体系中的成员,它们有转换作用,本身又是字符流,所以在构造的时候需要传入字节流对象进来。
OutputStreamWriter(OutStreamout):将字节流以字符流输出。
InputStreamReader(InputStream in):将字节流以字符流输入。