原创
第一章
1.流的分类:
按照数据流向的不同:输入流 输出流
按照处理数据的单位的不同:字节流 字符流(处理的文本文件)
按照角色的不同:节点流(直接作用于文件的) 处理流
2.IO的体系
抽象基类 | 节点流(文件流) | 缓冲流(处理流的一种) |
---|---|---|
InputStream | FileInputStream | BufferedInputStream |
OutputStream | FileOutputStream | BufferedOutputStream |
Reader | FileReader | BufferedReader |
Writer | FileWriter | BufferedWriter |
数组的初始化是建立数组对象(为数组分配内存),为每一个数组元素赋值。
创建一个Java类Demo,它包含一个私有变量字符串str;
包含一个私有方法testDemo,该方法能够将Str反转(即能够把字符串Str倒过来)。
代码如下
import java.util.*;
public class Main{
public static void main(String[] args)
{
Scanner scan=new Scanner(System.in);
String s=scan.next();
Demo d=new Demo(s);
String str=d.getStr();
System.out.println(str);
scan.close();
}
}
class Demo
{
private String str;
public Demo(String str)
{
this.str = str;
}
private String testDemo()
{
return this.str=new StringBuffer(str).reverse().toString();
}
public String getStr()
{
return testDemo();
}
}
关于Scanner的用法云云
用Scanner首先要引入包import java.util.Scanner;
还有更普通的用法,即执行Scanner最重要的功能,输入值。
image与之相对应的判断输入结束的Boolean类型如下表所示
image很有道理。
java正则表达式
正则表达式定义了字符串的模式
正则表达式可以用来搜索、编辑或处理文本。不限与语言。
java\提示开始使用正则表达式
:
*,表示零次或多次匹配前面的字符或表达式。
+,表示一次或多次匹配前面的字符或则表达式{1,}
\d数字字符匹配
\D非数字字符匹配。
\f
\n换行符匹配
\s匹配任何空白字符。
\S匹配任何非空白字符
//str.Split(" ").length,一句话中单词个数。
trim()删除字符串的头尾空白符。
排序collections.sort可以直接使用new 接口,匿名类
-
JVM:解释执行.class文件(字节码)把字节码解释成具体平台上的机器指令执行。,具有指令集并使用不同的储存区域。它要负责执行指令、以及管理数据、内存和寄存器。
-
JRE:运行java程序所必须的环境集合。
-
java虚拟机(JVM),java核心类和支持文件。不包含开发工具-编译器、调试器和其他工具。
-
JDK:java Development Kit构成了java在不同计算机系统中编译和运行的环境。
java应用程序接口和java虚拟机(JVM)构成。
虚拟机:在真实的机器上使用软件模拟实现的一种虚拟机器
第二章
控制台编译java
先cd路径,在javac编译带后缀名(.java->.class),java不带后缀名(.class->.)
常量:通过源码直接给出值,或者用final定义。
标识符:只能由字母数字_和开头
大小写敏感的,无长度限制。
Java是强类型语言,所有变量必须先声明、后使用;2、指定类型的变量只能接受类型与之匹配的值。
基本数据类型:数值:整数byte,short,int,long/浮点型:float,double;
字符型:char布尔型:boolean
引用数据集类型:类:class,接口:interface,数组[]
整数:二进制、十进制、八进制、十六进制。0b或0B开头,八进制整数:0 十六进制0x或0X
一个汉字也可以当作一个char,以及某些转义字符,浮点数后一定加f或则F。boolean不能和true和false互换
类型的自动转换(兼容转换)——表示范围大的类型向下兼容表数范围小的类型
如byte,short,char转化成int,int转化成long,long转化成float,float转化成int是自动的。
强制类型转换:(类型指示符)value。大类型转到小类型时使用。
§多种类型混合运算:1)系统自动将所有类型转换成表数范围最大的类型,再进行计算;2)byte、short、char互相之间不转换,用时全部自动转换成int类型。
java中+=可以强制类型转化如bytea=5;
a+=5;
在一个变量的作用域内不能再定义具有相同名字的变量
第三章
面向对象的特点:封装性,继承性,多态性
类:具有共同实现方法的一系列对象的描述。
对象:静态属性(属性,数据成员,成员变量)和动态属性(方法、方法成员)的封装体
类:修饰符 class 类名
属性:修饰符 类型 成员名
方法:修饰符 返回值类型 方法名([形参类型 形参名])
类是对象的关系:类是对象的定义,对象是类的实例
类名 对象名=new 类名([参数])
引用存放在栈里面
对象变量.成员变量:访问对象的对象变量
对像变量.方法(实参列表):调用对象的方法
new出来的东西存放于heap中(堆)
stack存放局部变量
data segment(数据区)存放静态变量和字符串常量
code segment(代码区)存放代码
构造方法:用于初始化对象(使用new构造)特点:不能指定返回值类型;名字必须与类名一样。
用特殊的方法来初始化新对象。
构造方法是给对象赋初始值,所以没有返回值类型,但不用void来声明;
在创建对象的时候,Java语言会自动调用构造方法为新对象初始化。
如方法不带参数,没有语句,则不做任何操作就返回。
用户不能直接调用构造方法,只能通过new操作调用。
一个类可以创建多个构造方法,但必须具备不同参数,这是对象多态性的体现。
可利用不同参数调用不同构造方法,实现对象的不同初始值,构造方法的这种多个方法共享相同名字的特性叫做方法重载。
构造方法名必须与类名相同(大小写也相同);
构造方法可以重载实现不同的初始化方法,调用时按照参数决定调用哪个方法。
当不提供构造方法的时候,编译器提供默认构造方法。
构造和初始化对象的顺序
1、申请内存空间,为新对象分配空间并初始化,所有基本类型数据都设置成了默认值(数字为0,布尔false,引用类型null。
2,执行显示初始化
3,执行构造方法
4、将对象的引用赋值给引用变量
/*当多个方法具有相同的名字而含有不同的参数时,产生重载。
重写方法必须和被重写方法有相同的名称、参数列表和返回值类型*/
this.引用
当局部变量和成员变量的名字相同时,成员变量就会被隐藏,这时想在成员方法中使用成员变量,则必须使用关键字this
静态数据成员可以通过类访问(类名.属性),通过对象(对象.属性)访问,static修饰的只有一份内存
例如:统计对象个数:
class Student{public static int num;
public Student(){num++;}
}
}
/*静态方法:特点:对类自身操作;方法中只能出现静态变量成员和其他的静态方法。
使用方法:直接通过类访问;通过对象访问。*/
调用方法时的参数的传递(基本数据类型:值传递)对象数据类型按照引用传递和使用
①通过对象变量(引用、地址)使用对象
②区分对象变量和对象本身(new出来的东西),对象变量使用前要初始化
③对象变量为空:null
④判断引用是否指向一个对象:if(a!=null)
⑤判断两个引用是否指向同一个对象:if(a==b)
⑥判断两个对象的值是否相同:a.equals(b);
package:将类聚集起来,方便组织自己的代码,同其他来源的代码分割开来,使用包的原因:保证类名的唯一性,解决命名冲突。
标准java类库包:java.lang/java.util/java.net保证package唯一性(由于互联网上的域名称是不会重复的,所以多数开发人员采用自己公司在互联网上的域名称作为自己程序包的唯一前缀/–域名的倒写/)
package/包名字放在源文件顶部(除注释外的第一句)/
类可以直接使用其所在包的所有类 类可以使用其他包中的所有public类
使用方式1:在类名前加使用类的完整包名,java.net:和网络有关的类
使用方式2:使用import关键字
继承:一种在保持对象差异性的同时共享对象相似形的复用。
基类(父类,超类)派生类(子类)关键字extends通过继承,子类自动拥有父类的所有成员(成员变量和方法)
image image在其他class中new出来的对象也不能直接访问private的东西
对于class,权限修饰符只能为public和default(内部类除外)
§父类构造方法不能被子类继承。
§子类的构造方法中必须要调用父类的构造方法。
§子类通过super(参数列表)调用父类构造方法,调用super的语句必须放在子类构造方法的第一行。
§若子类构造方法中没有显式调用父类构造方法,则系统默认调用父类无参数的构造方法;若父类中没有定义无参数的构造方法,编译出错。
publicPostGraduate(){
}
publicPostGraduate(intno, String name, intscore, String tutor){
super(no,name,score);
this.tutor= tutor;
}
Object类是所有类的根类,定义了作为对象所具有的方法
Object中定义:public String toString()描述当前对象的相关信息String在在做+操作时自动调用该对象所属类的toString()方法。toString类名+@+hashCode
根据要求重写toString()方法
根类Object中equals()方法的操作与==一样
publicbooleanequals(Object o) {
if
(o == null)return false;
else {
booleanresult = false;
if (oinstanceofRectangle) {
Rectangle rec = (Rectangle) o;
if(this.length== rec.length&& this.width== rec.width)
{
result = true;
}
}
return result;
}
}
如此一来如果一个学生的姓名一样或者学号一样便是同一个人。
final修饰的对象的对象变量不能再指向其他对象
final类:阻止类(final类)被继承
final方法:阻止方法(final方法)被覆盖(override)
java中的多态:静态多态性(重载)动态多态性(重写)
对象转型:子类类型和父类类型之间的转换关系。
两种转换方式:
向上转型 | (upcasting) |
---|---|
向下转型 | (downcasting) |
通过一个父类引用不能访问子类新增的成员
引用 instanceof类名:判断该引用所指向的对象是否属于该类或该类的子类的对象
多态存在的条件①要有继承
②要有方法的重写
③使用父类引用指向子类对象//及使用子类
接口(①常量②方法的定义)定义接口[修饰符] interface 接口名 [extends 祖先接口名] { 返回类型 方法名(参数列表);
...
类型 常量字段名 =值;...}/在类中可以通过接口.变量名使用变量
接口属性是public static final类型 在实现接口的类中要实现接口中定义的所有方法
–接口和抽象类都不能被实例化,它们都位于继承树的顶端,用于被其他类实现和继承。
接口和抽象类都可以包含抽象方法
接口作为系统与外界交互的窗口,体现的是一种规范
①接口里只能包含抽象方法,不能包含已经提供实现的方法;抽象类则可以包含普通方法。
②接口里不能定义静态方法;抽象类里可以定义静态方法。
③接口里只能定义静态常量属性,不能定义普通属性;抽象类里则既可以定义普通属性,也可以定义静态常量属性。
④接口不包含构造器;抽象类里可以包含构造器,抽象类里的构造器并不是用于创建对象,而让其子类调用这些构造器来完成属于抽象类的初始化操作。
⑤接口里不能包含初始化块,但抽象类则完全可以包含初始化块。
⑥一个类最多只能有一个直接父类,包括抽象类;但一个类可以实现多个接口,通过实现多个接口可以弥补Java单继承的不足。
网友评论