Java基础笔记
自动补全代码:Ctrl + 2 松开 + L
一,if的几种格式:
if(){...}
if(){...} else if(){} else if(){} else{}
if(){} else{}
if(){...}
if(){...} else if(){} else if(){} else{}
if(){} else{}
二,for 循环, while循环 ,do-while循环格式:
1.
for(){}
while(){}
do{}while()
2.
break,continue的区别:break结束循环,contiune跳出本次循环
1.
for(){}
while(){}
do{}while()
2.
break,continue的区别:break结束循环,contiune跳出本次循环
三,
Math.max(a,b):判断a和b的大小
Math.max(a,b):判断a和b的大小
四,数组的定义
数组类型[] 数组名 = new 数据类型[数组长度]
数组类型[] 数组名 = {元素1,元素2,元素3...}
数组类型[] 数组名 = new 数组类型[]{元素1,元素2,元素3...}
数组类型[] 数组名 = new 数据类型[数组长度]
数组类型[] 数组名 = {元素1,元素2,元素3...}
数组类型[] 数组名 = new 数组类型[]{元素1,元素2,元素3...}
五,switch{caseX: caseXX:}语句的特性:
case具有穿透性,如果case中没有break跳出,那么程序将一直向下执行;
default{}其他结果执行
case具有穿透性,如果case中没有break跳出,那么程序将一直向下执行;
default{}其他结果执行
六,ArrayList集合的定义格式和常用方法的功能
Object(要存储元素的数据类型)
格式:ArrayList<Object> 集合名 = new ArrayList<Object>
集合名.add(元素) 直接储存元素
集合名.add(index,元素) 在指定位置添加元素
集合名.size() 获取集合长度
集合名.set(index,元素) 在指定位置修改元素
集合名.get(index) 获取指定位置元素
集合名.remove(index) 删除指定位置元素
Object(要存储元素的数据类型)
格式:ArrayList<Object> 集合名 = new ArrayList<Object>
集合名.add(元素) 直接储存元素
集合名.add(index,元素) 在指定位置添加元素
集合名.size() 获取集合长度
集合名.set(index,元素) 在指定位置修改元素
集合名.get(index) 获取指定位置元素
集合名.remove(index) 删除指定位置元素
七,
a = 1000
获取a的个位:a%10
获取a的百位:a/100%10
a = 1000
获取a的个位:a%10
获取a的百位:a/100%10
八,final的修饰类,方法,变量有些什么特点
被final修饰的类:将不能被继承,因此final类中成员将不能被修改,但可以使用
final修饰的方法:不允许被子类重写
final修饰的变量:即表示为常量,该变量永远不可被更改
九,java中的修饰符:
public 公共权限;
修饰对象:修饰类,方法,属性
作用域:可以被任意类访问
被final修饰的类:将不能被继承,因此final类中成员将不能被修改,但可以使用
final修饰的方法:不允许被子类重写
final修饰的变量:即表示为常量,该变量永远不可被更改
九,java中的修饰符:
public 公共权限;
修饰对象:修饰类,方法,属性
作用域:可以被任意类访问
protected 受保护的权限;
修饰对象:修饰内部类,接口,属性,方法
作用域:可以被同包类访问,如果不同包,必须是该类的子类才可访问
注意:该权限不能修饰外部类
修饰对象:修饰内部类,接口,属性,方法
作用域:可以被同包类访问,如果不同包,必须是该类的子类才可访问
注意:该权限不能修饰外部类
default 同包权限(默认)
修饰对象:修饰类,数型;
作用域:只能被同包的类访问
修饰对象:修饰类,数型;
作用域:只能被同包的类访问
private 私有权限
修饰对象:内部类,属性,方法
作用域:只能在本类中使用
修饰对象:内部类,属性,方法
作用域:只能在本类中使用
static 静态修饰符
修饰对象:方法,成员变量
作用:可被对象直接调用,优先于非静态的存在
修饰对象:方法,成员变量
作用:可被对象直接调用,优先于非静态的存在
final 最终修饰符
修饰对象:类,方法,成员变量,局部变量
作用:一次赋值终不可变。
修饰对象:类,方法,成员变量,局部变量
作用:一次赋值终不可变。
abstract 抽象类修饰符
修饰对象:类,方法
作用:一种规范,使用时需要重写
修饰对象:类,方法
作用:一种规范,使用时需要重写
十,调用引用引用类中的内部类
格式:
外部类.内部类 变量名 = new 外部类().new 内部类();
十一,代码块
格式:
外部类.内部类 变量名 = new 外部类().new 内部类();
十一,代码块
格式: {成员。。。}
作用:限制代码块成员的作用域
作用:限制代码块成员的作用域
十二,常用API:
1.equals:比较两个对象是否相等
格式:对象.equals(比较对象)
1.equals:比较两个对象是否相等
格式:对象.equals(比较对象)
2.String的构造方法:
String(byte[] bytes):传递字节数组
String(byte[] bytes int offset,int length):传递指定数组指定位置数据;
offset 数组索引起始值,
length 个数
3.String(char[] value):传递所有数组数据
String(char[] value,int offset,int count):传递指定数组指定位置的数据;
count 个数
4.int length(): 返回字符串长度,返回值int类型
String 类型的对象.length()
String str = "dshhsjhdjsjkaj";
int length = str.length();
String(byte[] bytes):传递字节数组
String(byte[] bytes int offset,int length):传递指定数组指定位置数据;
offset 数组索引起始值,
length 个数
3.String(char[] value):传递所有数组数据
String(char[] value,int offset,int count):传递指定数组指定位置的数据;
count 个数
4.int length(): 返回字符串长度,返回值int类型
String 类型的对象.length()
String str = "dshhsjhdjsjkaj";
int length = str.length();
5.String对象.subString(int begindex, int endindex):获取字符串一部分内容
String 类型对象.subString(int begindex, int endindex)
String 类型对象.subString(int begindex, int endindex)
6.String对象.endswith(String prefix)比较括号中字符是否与对象尾部字符串相同返回boolear类型值
7.String对象.staterwith(String prefix) 比较括号中字符是否与对象首部字符串相同返回boolean类型值
8.String对象.contains(String s)查看对象中是否包含s字符并返回boolean类型值
7.String对象.staterwith(String prefix) 比较括号中字符是否与对象首部字符串相同返回boolean类型值
8.String对象.contains(String s)查看对象中是否包含s字符并返回boolean类型值
9.int indexof(char ch)查找一个字符如果对象中有该字符则返回该字符索引,若没有则返回-1
格式:对象.indexof(char ch)
10.byte[] getBytes() 将字符串转成字节数组
此功能与String构造方法相反
与byte数组相关功能,基本都会查询编码表
格式:String对象.getBytes()
例如:
String str = “abc”;
byte[] bytes = str.getBytes();
for(int i = 0 ;i<bytes.length(); i++){
Sop(bytes[i]);//97 98 99
}
11.char[] toCharArray()将字符串转为字符数组
格式:String对象.getBytes()
例如:
String str = “abc”;
char[] ch = str.toCharArray();
for(int i = 0 ;i<ch.length(); i++){
Sop(ch[i]);//a b c
}
格式:对象.indexof(char ch)
10.byte[] getBytes() 将字符串转成字节数组
此功能与String构造方法相反
与byte数组相关功能,基本都会查询编码表
格式:String对象.getBytes()
例如:
String str = “abc”;
byte[] bytes = str.getBytes();
for(int i = 0 ;i<bytes.length(); i++){
Sop(bytes[i]);//97 98 99
}
11.char[] toCharArray()将字符串转为字符数组
格式:String对象.getBytes()
例如:
String str = “abc”;
char[] ch = str.toCharArray();
for(int i = 0 ;i<ch.length(); i++){
Sop(ch[i]);//a b c
}
12.char charAt(int index)获取字符串中指定位置的字符
格式:String 对象.charAt(int index)
格式:String 对象.charAt(int index)
13.toUppercase()将小写字符串转大写字符串
14.toLovercase()将大写字符串转小写字符串
15.String(char ch)将字节数组转换成字符串
14.toLovercase()将大写字符串转小写字符串
15.String(char ch)将字节数组转换成字符串
十三,StringBuffer 字符串缓冲区
---提升操作效率
1.append 追加添加
2.delete(int shtat , int ends )删除指定位置的字符
3. insert(int index ,任意类型) 将任意类型数据添加到缓冲区指定索引上(注意:该数据是放在指定索引前面的)
4. replice(int start , int end , String str )将指定索引上的字符替换成一个新的字符
5. reverse () 将缓冲区中的字符反转
1.append 追加添加
2.delete(int shtat , int ends )删除指定位置的字符
3. insert(int index ,任意类型) 将任意类型数据添加到缓冲区指定索引上(注意:该数据是放在指定索引前面的)
4. replice(int start , int end , String str )将指定索引上的字符替换成一个新的字符
5. reverse () 将缓冲区中的字符反转
<6> StringBuilder 与StringBuffer类一样,区别:Builder相比Buffer运行速度更快,但是没有Buffer安全
十四,正则表达式:
1. \d = 0-9
2. \w = a-z A-Z 0-9
1. \d = 0-9
2. \w = a-z A-Z 0-9
3.实现正则表达式和别的字符串进行匹配
使用到String类的方法
Staing类的三个方法
boolean matches(String 正则规则)匹配成功返回true
“abc”.matches(“[a]”)
String[] split(String 正则规则)
“abc”.split("[a]") 使用规则将字符串进行切割
使用到String类的方法
Staing类的三个方法
boolean matches(String 正则规则)匹配成功返回true
“abc”.matches(“[a]”)
String[] split(String 正则规则)
“abc”.split("[a]") 使用规则将字符串进行切割
String replaceAll(String 正则规则,String 字符串)
“abc123”.replaceAll("[\\d]","#")
将满足规则的字符替换成“#”
“abc123”.replaceAll("[\\d]","#")
将满足规则的字符替换成“#”
4.数字匹配规则:
正整数:“\\d+”
负整数:“-\\d+”
正小数:“\\d+\\.\\d+”
负小数:“-\\d+\\.\\d+”
保留两位小数的正数:“\\d+\\.\\d{2}”
保留1-3位的正小数:“\\d+\\.\\d{1,3}”
正整数:“\\d+”
负整数:“-\\d+”
正小数:“\\d+\\.\\d+”
负小数:“-\\d+\\.\\d+”
保留两位小数的正数:“\\d+\\.\\d{2}”
保留1-3位的正小数:“\\d+\\.\\d{1,3}”
十五,Date类的方法:
Date.gettime()取当系统当前时间
Date.settime(long 毫秒值)将时间修改为输入的毫秒值
System.currentTimeMillis()取当前时间的毫秒值
Date.gettime()取当系统当前时间
Date.settime(long 毫秒值)将时间修改为输入的毫秒值
System.currentTimeMillis()取当前时间的毫秒值
SimpleDateFormat类 对日期进行格式化
Format()==>日期转字符串
parse() 字符串==>日期
日期模式:
yyyy 年份
MM 月份
dd 月中天数
HH 小时数
mm 分钟数
ss 秒
Format()==>日期转字符串
parse() 字符串==>日期
日期模式:
yyyy 年份
MM 月份
dd 月中天数
HH 小时数
mm 分钟数
ss 秒
十六,Integer类
方法:paserInt(String str)将字符串转化为Int类型
paserInt(String str,int radix)radix 表示进制,作用就是将指定进制的str转化成10进制的整数
方法:paserInt(String str)将字符串转化为Int类型
paserInt(String str,int radix)radix 表示进制,作用就是将指定进制的str转化成10进制的整数
toString(int i)将整数转为字符串
toString(int i ,int 进制)将指定十进制数转为指定进制数
toString(int i ,int 进制)将指定十进制数转为指定进制数
十七,System类
方法:currentTimeMillis()取系统当前时间毫秒值
exit(0)退出虚拟机
gc()收取垃圾
getproperties()获取当前计算机信息
arraycopy(原数组,原数组复制起始索引,复制后的数组名,目标起始索引,复制几个)
十八,Math类
方法:abs(int a)取绝对值
ceil(double a)取大于或等于参数a的最小整数
floor(double a)取小于或等于参数a的最大整数
pow(double a ,double)取a的b次方
sqrt(double)取a的平方根
random(double a)取a值的四舍五入
十九,Arrays类
方法:sort(任意类数组)将数组元素进行升序排序
binarySearch(数组,被查找元素)返回该元素在数组中的索引
方法:currentTimeMillis()取系统当前时间毫秒值
exit(0)退出虚拟机
gc()收取垃圾
getproperties()获取当前计算机信息
arraycopy(原数组,原数组复制起始索引,复制后的数组名,目标起始索引,复制几个)
十八,Math类
方法:abs(int a)取绝对值
ceil(double a)取大于或等于参数a的最小整数
floor(double a)取小于或等于参数a的最大整数
pow(double a ,double)取a的b次方
sqrt(double)取a的平方根
random(double a)取a值的四舍五入
十九,Arrays类
方法:sort(任意类数组)将数组元素进行升序排序
binarySearch(数组,被查找元素)返回该元素在数组中的索引
二十,Collection接口
方法:clear()清空集合中的所有元素
boolean contains(Object o)判断对象是否存在于集合中,若存在则返回true
toArray()将集合转成数组
remove(Object o)删除集合中的指定元素删除成功则返回true
boolean hasNext()判断集合中是否有元素
ArraryList array
Iterator it = array.iterator()
while(it.hasNextO()){
String s = it.next()
}//查看集合中的元素
sort(List集合)将集合中的元素升序排序
binarySearch(List集合,元素)返回被查找元素的索引
shuffel(List集合)将集合元素随机排序
二十一,泛型
泛型的限定:
<? extends 想要继承的抽象父类>
二十二,List接口
List接口继承Collection接口
List接口特点:有序,索引,可重复元素
addFirst(E)添加元素到列表开头
addLast(E)添加元素到列表末尾
getFirst()获取列表开头元素
getLast()获取末尾元素
removeFirst()删除开头元素
removeLast()删除末尾元素
Boolean isEmpty()如果为空则返回真
二十三,Set接口:
实现类:HashSet
特点:无序集合,储存和取出的顺序不同,没有索引,不储存重复元素
代码编写和ArrayList完全一样
HashCode()取哈希值
问答:
1.两个对象(p1,p2)的哈希值一样,那么p1.equals(p2)一定等于true吗?
答案:不一定因为equals方法可以重写,把返回值改为恒定的
2.两个对象的equals方法返回值为true,那么哈希值一定相等吗?
答案:一定,因为java协定规定:两个对象的equals方法返回值为true,两个对象的哈希值必须相同
二十四,Map接口:
实现类 HashMap(K,V)K为键,V为值
put(K,V)方法储存数据
V get(K)通过K返回V 如果集合中没有K这个键则返回null
V remove(K)删除指定键上的值,并返回被删除的值
Keyset()返回集合中的所有键
储存重复键将把原有的值覆盖
返回值一般为null
当出现重复键的时候将返回原有键的值
Map集合的遍历:
Map<String, Integer> map = new HashMap<String,Integer>();
(1) //调用Keyset方法将集合中的键储存到Set集合中
Set<String> set = map.keySet();
//变量set集合,获取map中的键
Iterator<String> it = set.iterator();
while(it.hasNext()){
String key = it.next();
Integer value = map.get(key);
System.out.println(value);
Properties集合:
没有泛型,可结合IO流实现数据永久储存
setProperty(String key,String value)存储数据
getProperty(String)获取指定键值
Set<String> StringPropertyNames()获取集合中的所有键
load(IntputStream in) load(Reader rd)读取指定流对象的键值对存储到集合中
store(OutputStream op) load(Write wt)将集合键值对写入文档;
二十五,方法的可变参:数据类型...变量名(int...i)
方法:clear()清空集合中的所有元素
boolean contains(Object o)判断对象是否存在于集合中,若存在则返回true
toArray()将集合转成数组
remove(Object o)删除集合中的指定元素删除成功则返回true
boolean hasNext()判断集合中是否有元素
ArraryList array
Iterator it = array.iterator()
while(it.hasNextO()){
String s = it.next()
}//查看集合中的元素
sort(List集合)将集合中的元素升序排序
binarySearch(List集合,元素)返回被查找元素的索引
shuffel(List集合)将集合元素随机排序
二十一,泛型
泛型的限定:
<? extends 想要继承的抽象父类>
二十二,List接口
List接口继承Collection接口
List接口特点:有序,索引,可重复元素
addFirst(E)添加元素到列表开头
addLast(E)添加元素到列表末尾
getFirst()获取列表开头元素
getLast()获取末尾元素
removeFirst()删除开头元素
removeLast()删除末尾元素
Boolean isEmpty()如果为空则返回真
二十三,Set接口:
实现类:HashSet
特点:无序集合,储存和取出的顺序不同,没有索引,不储存重复元素
代码编写和ArrayList完全一样
HashCode()取哈希值
问答:
1.两个对象(p1,p2)的哈希值一样,那么p1.equals(p2)一定等于true吗?
答案:不一定因为equals方法可以重写,把返回值改为恒定的
2.两个对象的equals方法返回值为true,那么哈希值一定相等吗?
答案:一定,因为java协定规定:两个对象的equals方法返回值为true,两个对象的哈希值必须相同
二十四,Map接口:
实现类 HashMap(K,V)K为键,V为值
put(K,V)方法储存数据
V get(K)通过K返回V 如果集合中没有K这个键则返回null
V remove(K)删除指定键上的值,并返回被删除的值
Keyset()返回集合中的所有键
储存重复键将把原有的值覆盖
返回值一般为null
当出现重复键的时候将返回原有键的值
Map集合的遍历:
Map<String, Integer> map = new HashMap<String,Integer>();
(1) //调用Keyset方法将集合中的键储存到Set集合中
Set<String> set = map.keySet();
//变量set集合,获取map中的键
Iterator<String> it = set.iterator();
while(it.hasNext()){
String key = it.next();
Integer value = map.get(key);
System.out.println(value);
Properties集合:
没有泛型,可结合IO流实现数据永久储存
setProperty(String key,String value)存储数据
getProperty(String)获取指定键值
Set<String> StringPropertyNames()获取集合中的所有键
load(IntputStream in) load(Reader rd)读取指定流对象的键值对存储到集合中
store(OutputStream op) load(Write wt)将集合键值对写入文档;
二十五,方法的可变参:数据类型...变量名(int...i)
二十六,异常
Exception 异常 异常出现后将不在执行后面代码,
Error 错误
ArrayIndexOutOfBoundsException 越界异常
关键字 Throw
throw后面必须加new 对象,必须是异常对象,必须是Exception的子类
方法中声明异常关键字Throws,表明方法可能出现异常,Throws后面必须写异常名
运行异常,不需要方法声明,调用者也不需要处理
编译异常的处理方式:
try{
被检测的代码,可能出现异常的代码
}
catch(异常类名 变量){
异常的处理方式
}
finally{
必需要执行的代码(无论程序是否异常此处代码必须执行)
}
Exception 异常 异常出现后将不在执行后面代码,
Error 错误
ArrayIndexOutOfBoundsException 越界异常
关键字 Throw
throw后面必须加new 对象,必须是异常对象,必须是Exception的子类
方法中声明异常关键字Throws,表明方法可能出现异常,Throws后面必须写异常名
运行异常,不需要方法声明,调用者也不需要处理
编译异常的处理方式:
try{
被检测的代码,可能出现异常的代码
}
catch(异常类名 变量){
异常的处理方式
}
finally{
必需要执行的代码(无论程序是否异常此处代码必须执行)
}
平级之间,抛出异常没有顺序
上下级之间,越高级的父类写在越下面
父子类中父类抛异常的话子类抛的异常等级不能比父类高,平级也不行,
若父类没有抛异常,那么子类重写父类方法就不可以抛异常;
上下级之间,越高级的父类写在越下面
父子类中父类抛异常的话子类抛的异常等级不能比父类高,平级也不行,
若父类没有抛异常,那么子类重写父类方法就不可以抛异常;
Throwable 中的方法
String getMessage()异常中的详细描述
String toString() 异常中的简略描述
void printStackTrace()将异常信息追踪到标准的错误流
二十七,IO流:
File.pathSeparator //输出一个分号“;”,路径的分隔符,在Linux系统中是“:”
File.separator //输出一个斜杠\目录的名称分割,在Linux系统中是左斜线/
方法:
创建文件方法
* boolean createNewFile()
* 创建的文件路径文件名,在File构造方法中给出
* 只能创建文件
创建文件夹方法
* boolean mkdirs()
* 创建的文件路径文件名,在File构造方法中给出
* 只能创建文件夹
删除文件,文件夹方法
* boolean delete()
* 删除的文件路径,文件名,在File构造方法中给出
获取功能
String getName()
获取路径最后的名字,可以是文件也可以是文件夹
long length()
获取路径中文件的字节数
只能拿文件字节
File absolutePath()
获取绝对路径
在eclipse环境中写的是相对路径,那么方法输出默认是工程根目录
File getparentFile()
获取父路径
String[] list()
获取File封装路径下的所有文件和文件夹
将其储存在String数组中
File[] listFile()
获取File封装路径下的所有文件全路径或文件夹路径
File[] listRoots()
获取系统的所有根目录
Boolean exists()
判断File封装路径是否存在
Boolean isDirectory()
判断File封装路径是不是文件夹
Boolean isFile()
判断File封装路径是不是文件
创建文件并输入内容
//创建字节输出流,绑定文件
FileOutputStream fos = new FileOutputStream("f:\\ababababab.txt");
//创建转换流对象,构造方法绑定输出流,并指定编码表
OutputStreamWriter osw = new OutputStreamWriter(fos,"GBK");
//写入数据
osw.write("你好");
osw.close();
/*
* 转换流 inputSteamreader
* 读取文件
*/
public static void readfile() throws IOException{
//创建输入流
FileInputStream fis = new FileInputStream("f:\\ababababab.txt");
//创建转换流
InputStreamReader isr = new InputStreamReader(fis,"GBK");
char[] ch = new char[1024];
int len = isr.read(ch);
System.out.println(new String(ch,0,len));
文件的续写和换行符:
FileOutputStream (文件路径,true) 第二个参数若为true则在文件后面添加内容
//创建字节输出流,绑定文件
FileOutputStream fos = new FileOutputStream("f:\\ababababab.txt");
//创建转换流对象,构造方法绑定输出流,并指定编码表
OutputStreamWriter osw = new OutputStreamWriter(fos,true);
//写入数据
osw.write("你好111");
osw.close();
文件读取:
FileInputStream fis = new FileInputStream("C:\\Users\\Mr.Zhao\\Desktop\\java基础笔记gbk.txt");
byte[] B = new byte[1024];
int len = 0;
while((len = fis.read(B)) != -1 ){
System.out.print(new String(B,0,len));
}
fis.close;
数据写入Filewrite类
Filewrite fw = new Filewrite(数据目的)
fw.write()参数可写,字符,字符串,char数组
fw.flush 每次写完数据必须刷新。
String getMessage()异常中的详细描述
String toString() 异常中的简略描述
void printStackTrace()将异常信息追踪到标准的错误流
二十七,IO流:
File.pathSeparator //输出一个分号“;”,路径的分隔符,在Linux系统中是“:”
File.separator //输出一个斜杠\目录的名称分割,在Linux系统中是左斜线/
方法:
创建文件方法
* boolean createNewFile()
* 创建的文件路径文件名,在File构造方法中给出
* 只能创建文件
创建文件夹方法
* boolean mkdirs()
* 创建的文件路径文件名,在File构造方法中给出
* 只能创建文件夹
删除文件,文件夹方法
* boolean delete()
* 删除的文件路径,文件名,在File构造方法中给出
获取功能
String getName()
获取路径最后的名字,可以是文件也可以是文件夹
long length()
获取路径中文件的字节数
只能拿文件字节
File absolutePath()
获取绝对路径
在eclipse环境中写的是相对路径,那么方法输出默认是工程根目录
File getparentFile()
获取父路径
String[] list()
获取File封装路径下的所有文件和文件夹
将其储存在String数组中
File[] listFile()
获取File封装路径下的所有文件全路径或文件夹路径
File[] listRoots()
获取系统的所有根目录
Boolean exists()
判断File封装路径是否存在
Boolean isDirectory()
判断File封装路径是不是文件夹
Boolean isFile()
判断File封装路径是不是文件
创建文件并输入内容
//创建字节输出流,绑定文件
FileOutputStream fos = new FileOutputStream("f:\\ababababab.txt");
//创建转换流对象,构造方法绑定输出流,并指定编码表
OutputStreamWriter osw = new OutputStreamWriter(fos,"GBK");
//写入数据
osw.write("你好");
osw.close();
/*
* 转换流 inputSteamreader
* 读取文件
*/
public static void readfile() throws IOException{
//创建输入流
FileInputStream fis = new FileInputStream("f:\\ababababab.txt");
//创建转换流
InputStreamReader isr = new InputStreamReader(fis,"GBK");
char[] ch = new char[1024];
int len = isr.read(ch);
System.out.println(new String(ch,0,len));
文件的续写和换行符:
FileOutputStream (文件路径,true) 第二个参数若为true则在文件后面添加内容
//创建字节输出流,绑定文件
FileOutputStream fos = new FileOutputStream("f:\\ababababab.txt");
//创建转换流对象,构造方法绑定输出流,并指定编码表
OutputStreamWriter osw = new OutputStreamWriter(fos,true);
//写入数据
osw.write("你好111");
osw.close();
文件读取:
FileInputStream fis = new FileInputStream("C:\\Users\\Mr.Zhao\\Desktop\\java基础笔记gbk.txt");
byte[] B = new byte[1024];
int len = 0;
while((len = fis.read(B)) != -1 ){
System.out.print(new String(B,0,len));
}
fis.close;
数据写入Filewrite类
Filewrite fw = new Filewrite(数据目的)
fw.write()参数可写,字符,字符串,char数组
fw.flush 每次写完数据必须刷新。
数据读取FileReader类
FileRead fr = new FileRead(数据源)
int len = 0;
wihle((len = fr.read())!=-1){
sop((char)len);
}
fr.close;
FileRead fr = new FileRead(数据源)
int len = 0;
wihle((len = fr.read())!=-1){
sop((char)len);
}
fr.close;
缓冲区字节输入,输出流
BufferedInputStream 缓冲输入流,构造方法中放字节输入流,以提高输入效率
BufferedOutputStream 缓冲输出流,构造方法中放字节输出流,以提高输出效率
buferedreader(FileRead fr) 读行
bufferedwrite(Filewrite wf)写行
类(对象)序列化
ObjectOutputStream(FileoutputStream fos)传递任意字节输出流
方法writeObject(Object obj)写出对象的方法
ObjectInputStream(FileinputStream fis)传递任意字节输入流
Object readObject()读取写入的对象方法
静态不能序列化
关键字transient 组织成员变量序列化
打印流:
printStream
printWrite(流对象,ture)打印自动刷新
二十八,FileUtils工具类
static String readfiletostring(file )读取文本返回字符串
static viod writeStringtoFile(File , String)将数据写入指定文件
static void copyFile(File 数据源,File数据目的)将文件复制到指定位置
static void copyDirectoryToDirectory(File源文件,File目的文件)将文件夹复到目的文件夹
BufferedInputStream 缓冲输入流,构造方法中放字节输入流,以提高输入效率
BufferedOutputStream 缓冲输出流,构造方法中放字节输出流,以提高输出效率
buferedreader(FileRead fr) 读行
bufferedwrite(Filewrite wf)写行
类(对象)序列化
ObjectOutputStream(FileoutputStream fos)传递任意字节输出流
方法writeObject(Object obj)写出对象的方法
ObjectInputStream(FileinputStream fis)传递任意字节输入流
Object readObject()读取写入的对象方法
静态不能序列化
关键字transient 组织成员变量序列化
打印流:
printStream
printWrite(流对象,ture)打印自动刷新
二十八,FileUtils工具类
static String readfiletostring(file )读取文本返回字符串
static viod writeStringtoFile(File , String)将数据写入指定文件
static void copyFile(File 数据源,File数据目的)将文件复制到指定位置
static void copyDirectoryToDirectory(File源文件,File目的文件)将文件夹复到目的文件夹
二十九,多线程
多线程的创建:
方法一:
新建类继承Thread类,重写run方法
启动线程:子类调用start()方法
getName()获取线程名字
Thread Thread.currentThread()获取正在运行的线程对象
方法二:
接口实现
新建类实现接口Runnable
重写run方法
线程池:
//创建池对象
ExecutorService ex = Executors.newFixedThreadPool(2);
//调用ex中的方法submit提交线程任务
ex.submit(new Threadpooldemo());
ex.submit(new Threadpooldemo());
多线程的创建:
方法一:
新建类继承Thread类,重写run方法
启动线程:子类调用start()方法
getName()获取线程名字
Thread Thread.currentThread()获取正在运行的线程对象
方法二:
接口实现
新建类实现接口Runnable
重写run方法
线程池:
//创建池对象
ExecutorService ex = Executors.newFixedThreadPool(2);
//调用ex中的方法submit提交线程任务
ex.submit(new Threadpooldemo());
ex.submit(new Threadpooldemo());
同不代码块
关键字synchronized(任意对象)){
需要同步的代码
}
也可在方法中的权限修饰符后面添加synchronized,也启到同步作用
关键字synchronized(任意对象)){
需要同步的代码
}
也可在方法中的权限修饰符后面添加synchronized,也启到同步作用
三十,服务器
启用MYSQL:
在dos界面输入services.msc,打开服务窗口,找到MYSQL,右键启动
或者在dos中输入net start mysql;直接启动;
登录mysql:命令行输入:mysql -uroot -p密码;
SQL分类:
数据定义语言:DDL,用来定义数据库对象:数据库,表,列等。关键字:create,alter,drop等
数据操作语言:DML,用来对数据库中表的记录进行更新,关键字:insert,delete,update等
数据控制语言:DCL,用来定义数据库访问权限和安全级别,及创建用户
数据查询语言:DQL,用来查询数据库中表的记录,关键字:select,from,where。
在命令行中临时修改编码:
set names‘GBK’
set nemes‘UTF-8’
创建数据表格式
create table 表名(
列名1 数据类型 约束,
列名2 数据类型 约束,
列名3 数据类型 约束
);
创建用户表,用户编号,用户姓名,用户地址
将编号列设置为主键约束,保证列数据的唯一性,非空性
primary key AUTO_INCREMENT
让主键列数据实现自增长 AUTO_INCREMENT
启用MYSQL:
在dos界面输入services.msc,打开服务窗口,找到MYSQL,右键启动
或者在dos中输入net start mysql;直接启动;
登录mysql:命令行输入:mysql -uroot -p密码;
SQL分类:
数据定义语言:DDL,用来定义数据库对象:数据库,表,列等。关键字:create,alter,drop等
数据操作语言:DML,用来对数据库中表的记录进行更新,关键字:insert,delete,update等
数据控制语言:DCL,用来定义数据库访问权限和安全级别,及创建用户
数据查询语言:DQL,用来查询数据库中表的记录,关键字:select,from,where。
在命令行中临时修改编码:
set names‘GBK’
set nemes‘UTF-8’
创建数据表格式
create table 表名(
列名1 数据类型 约束,
列名2 数据类型 约束,
列名3 数据类型 约束
);
创建用户表,用户编号,用户姓名,用户地址
将编号列设置为主键约束,保证列数据的唯一性,非空性
primary key AUTO_INCREMENT
让主键列数据实现自增长 AUTO_INCREMENT
CREATE DATABASE 数据库名 创建数据库
SHOW TABLES 查看数据库中所有表
DESC 表名 查看表结构
alter table 表名 add 列名 数据类型 约束 (添加列)
alter table 表名 modify 列名 数据类型 约束 (修改数据类型,约束)
alter table 表名 change 旧列名 新列名 数据类型 约束 (修改列名)
alter table 表名 drop 列名 (删除列)
rename table 旧表名 to 新表名 (修改表名)
向表中添加数据 insert
格式一:insert into 表名(列名1,列名2,列名3)values(值1,值2,值3)
格式二:insert into 表名(列名2,列名3)values(值2,值3)
(批量添加)inset into 表名 (列名2,列名3)values(值2,值3),(值2,值3),(值2,值3)
格式三:insert into 表名 values(全列值)
(批量添加)格式四:insert into 表名 (列名1,列名2,列名3)valus(值1,值2,值3),(值1,值2,值3)。。。
SHOW TABLES 查看数据库中所有表
DESC 表名 查看表结构
alter table 表名 add 列名 数据类型 约束 (添加列)
alter table 表名 modify 列名 数据类型 约束 (修改数据类型,约束)
alter table 表名 change 旧列名 新列名 数据类型 约束 (修改列名)
alter table 表名 drop 列名 (删除列)
rename table 旧表名 to 新表名 (修改表名)
向表中添加数据 insert
格式一:insert into 表名(列名1,列名2,列名3)values(值1,值2,值3)
格式二:insert into 表名(列名2,列名3)values(值2,值3)
(批量添加)inset into 表名 (列名2,列名3)values(值2,值3),(值2,值3),(值2,值3)
格式三:insert into 表名 values(全列值)
(批量添加)格式四:insert into 表名 (列名1,列名2,列名3)valus(值1,值2,值3),(值1,值2,值3)。。。
对数据进行更新修改操作
在原有基础上修改
格式: update 表名 set 列1= 值1,列2=值2 where 条件
where 条件:数据中的唯一性
条件写法:
<,>,=,<=,>=,或(or)与(and)非(not)
id in(1,2,3,4,5,6)
id not in(1,2,3,4,5,6)
-- 将手机价格修改为5999
UPDATE product SET price = 5999 WHERE id=2;
-- 耳机改为蓝牙耳机,价格为299
UPDATE product SET pname = '蓝牙耳机',price = 299 WHERE id=5;
删除数据:
delete from 表名 where 条件
删除表中所有数据:
1.delete from 表名
2. 表名
查询指定列的数据
格式:
select 列名1,列名2 from 表名 也可在最后加where 条件,查询指定行的数据
UPDATE product SET pname = '蓝牙耳机',price = 299 WHERE id=5;
删除数据:
delete from 表名 where 条件
删除表中所有数据:
1.delete from 表名
2. 表名
查询指定列的数据
格式:
select 列名1,列名2 from 表名 也可在最后加where 条件,查询指定行的数据
查询表中所有数据
select 列名1,列名2 from 表名
查询去掉重复记录
关键字:distinct
格式:select distinct 列名 from 表名;(删除列中的重复元素)
查询修改列名(临时)
关键字as
格式:select 列名 as ‘新列名’ from 表名
模糊查询
关键字like
通配符“_”表示任意一个字符
通配符“%”表示任意多个字符
查询对结果升序或降序排列
order by 列名 ASC 升序(升序为默认选项可不写ASC)
order by 列名 DESC 降序
注意:如果查询内容还需要过滤条件,那么先过滤条件再排序
聚合函数:
select count(*) from 表名 统计表中行数
select sum(列名) from 表名 求列中数据总和
select max(列名) from 表名 获取最大值
select min(列名) from 表名 获取最小值
select avg(列名) from 表名 获取平均值
分组查询:
重复出现的数据分为一组,必须跟随聚合函数使用
group by 列名
分组后不能再使用where,若分组后需要再排序则用having 临时列名
数据库的分层关系:
view-->controller控制-->services业务-->dao-->datebase
Ait + Shift + M 将选中的代码抽取为方法;
select 列名1,列名2 from 表名
查询去掉重复记录
关键字:distinct
格式:select distinct 列名 from 表名;(删除列中的重复元素)
查询修改列名(临时)
关键字as
格式:select 列名 as ‘新列名’ from 表名
模糊查询
关键字like
通配符“_”表示任意一个字符
通配符“%”表示任意多个字符
查询对结果升序或降序排列
order by 列名 ASC 升序(升序为默认选项可不写ASC)
order by 列名 DESC 降序
注意:如果查询内容还需要过滤条件,那么先过滤条件再排序
聚合函数:
select count(*) from 表名 统计表中行数
select sum(列名) from 表名 求列中数据总和
select max(列名) from 表名 获取最大值
select min(列名) from 表名 获取最小值
select avg(列名) from 表名 获取平均值
分组查询:
重复出现的数据分为一组,必须跟随聚合函数使用
group by 列名
分组后不能再使用where,若分组后需要再排序则用having 临时列名
数据库的分层关系:
view-->controller控制-->services业务-->dao-->datebase
Ait + Shift + M 将选中的代码抽取为方法;
三十一,网络编程
IP地址:
ping 127.0.0.1 本机回环地址
端口号:范围:0~65535,且0~1024不可用
* 表示互联网当中的地址
* java.net.InetAddress
* 静态 InetAddress getLocalHost() LocalHost 本地主机
* 返回本地主机,返回值InetAddress对象
静态 InetAddress getByName(String hostName) 传递一个主机名,获取IP地址对象
非静态方法:
String getHostAddress()获取本机IP地址
String getHostName()获取本机计算机名
UDP协议发送端:
DataGramPacket 包装包
DataGramSocket 发送包
创建DataGramPacket 封装:数据,接收的地址和端口
调用DataGramSocket方法send,发送数据包
DataGramPacket构造方法(byte[] buf,int length,InetAddress address,int port)
DataGramSocket构造方法()空参,send(DataGramPacket d)
UDP协议接收端:
实现封装数据包java.net.DatagramPacket 将数据接收
实现输出传输 java.net.DatagramSocket 接受数据包
实现步骤:
1.创建DatagramSocket对象,绑定端口号
要和发送端口号一致
2.创建字节数组,接受发来的数据
3.创建数据包对象DatagramPacket
4.调用DattagramSocket对象方法receive(DatagramPacket dp )接收数据,数据放在数据包中
5.拆包
发送的IP地址
数据包对象DatagramPacket方法getAddress()获取发送方的IP地址,返回InetAddress对象
接收到的字节数组个数
数据包对象DatagramPacket方法getlength();获取发送数据的有效字节个数
发送方的端口号
数据包对象DatagramPacket方法getport()获取发送方端口号
6.关闭资源
三十二,反射
三种获取CLASS对象的方式
1.对象获取
Person p = new Person();
Class c = p.getClass();
2.类名获取
Class c1 = Person.class;
3.Class类的静态方法获取(必须带包名走)
Class c2 = Class.forName("demo1.Person");
System.out.println(c2);
通过反射获取class文件中的构造方法,运行构造方法
* 运行构造方法,创建对象
* 获取Class文件对象
* 从class文件对象中,获取需要的成员
Constructor[] getDeclaredConstructors()获取私有构造方法
Constructor[] getConstructors()获取所有公共权限的构造方法
Constructor[] getConstructor(Class)获取指定公共权限的构造方法
反射获取到的私有权限对象方法getAccessible(true)强制取消Java的访问检查
Fielad[] getDeclaredFielads()获取私有的成员变量;
newInstance()创建类对象
Method[] getMetheds 获取class文件的公共成员方法,包括继承的方法
Method[] getMethed(String 方法名,方法的参数列表) 获取指定方法
Method对象方法Object invoke(object对象,object 实际参数)运行获取到的成员方法

浙公网安备 33010602011771号