假设需要将体重和身高与一个人的名字和出生日期相关联,虽然可以分别声明几个变量才存储这些值,但这些值没有内在的耦合关联,将他们耦合在一起的方法就是创建一个包含它们的对象
1.输出格式double的小数位精确
Scanner sc = new Scanner(System.in);
sc.next() 读取空白字符结束的字符串
sc.nextLine() 读取回车结束的字符串 使用nextInt nextDouble next() 之
后再使用nextLine会有问题
不要在nextDouble() nextInt() 、next()等之后使用nextLine()
/t tab
/n 换行
/f 换页
/r 回车
Math.random() 返回0到1之间,不包括1,包括0.0
Math.pow(x,2)
Math.abs() 绝对值
Math.sqrt() 平方根
Math.min() max()
Character.isDigit(ch) 是否数字
。。。。.isLetter(ch) 是否字母
.toLowerCase(ch)
.toUpperCase(ch)
String.length(0
String.charAt(index)
String.concat(String s1)
String.toUpperCase()
String.toLowerCase(0
String.trim() 去掉空白符包括转义字符
String.equals(s1)
String.equalsIgnoreCase(s1)
String.compareTo(s1) 返回字符串比较后的差值,
String.compareToIgnoreCase(s1)
String.startsWith(特定前缀)返回true
String.endWith(特定后缀)
String.contains(s1) 是否包含子串
String.replace('h','j')
String.substring(beginIndex) 指定索引到结尾
String.substring(beginIndex,endIndex) 指定索引到结束索引,不包含结束索
引
这个方法是全小写!!!!
String.indexOf(ch) 返回第一个出现字符 ch 的索引,无匹配,则返回-1
String.indexOf(ch, fromIndex) 从开始索引fromIndex后出现的第一个ch
String.indexOf(String s)
int value = Integer.parseInt(intString) 将数字内容的字符串转换为数字
若超出int 范围会如何?
或char '9' - '0'
如何将数字转换为字符? String.valueOf(9) + String1
数字int 或long 转字符串 + “”
字符转字符串 char c + 字符串即可自动转型
string 和int之间的转换
string转换成int :Integer.valueOf("12")
int转换成string : String.valueOf(12)
char和int之间的转换
首先将char转换成string
String str=String.valueOf('2')
Integer.valueof(str) 或者Integer.ParseInt(str)
Integer.valueof返回的是Integer对象,Integer.paseInt返回的是int
int转成数字型char字符 加上 48再强制转换,因为 ASCII 编码 48 到 57 为
字符 '0' ~ '9' 的编码。
A到Z 65--90 中间6个字符[ \ ] ^ _ ` 小写从 a 97 a~z 97-122
int 和 string 的逆序
类似 double
java中 double 类型只是一个简单类型,是不能其输出位数及精度是固定的
可以利用其它方法进行位数输出,如:
方法一、使用
Math.round()
Double value = 0.254668;
(double)Math.round(value*100)/100
public static void main(String[] args) {
// 1. 使用 String.format() 方法
double data = 11.8982389283293;
System.out.println(String.format("%.2f", data));
// 2. 使用 printf 输出
System.out.printf("%.2f", data);
// 3. 使用 DecimalFormat 对象格式化
DecimalFormat format = new DecimalFormat("#.00");
System.out.println(format.format(data));
多重循环跳出和继续用标识符
% 是 10 % 2 == 0
while ( a || b ) do .. 需要a 和b均不成立才能跳出循环
数组:
int [] list = new int [length];
myList.length
处理数组随机打乱:每个下标元素随机产生一个下标互换
foreach
for (double e :myList ){
仅能用于遍历数组
sout(e); 不能用myList[e]
}
二分查找
选择排序
冒泡排序
for (int n = 0 ; n<list.length;n++){
for (int i = 0 ; i< list.length-1;i++){
if (list[i]>list[i+1]){
temp = list[i];
list[i] = list[i+1];
list[i+1] = temp;
}
}
}
java.util.Arrays.sort(list[])
java.util.Arrays.parall(list[]) 多处理器并行操作
java.util.Arrays.binarySearch(list[],number) 升序排列后二分查找 若不
存在元素则返回 -(插入点下标+1)
java.util.Arrays.fill(list[],number)
java.util.Arrays.fill(list[],beginIndex,endIndex,number)
java.util.Arrays.toString(list[])
System.arraycopy(list,0,newList,0,list.length) 复制整个数组,需先初始
化 newList
int[] a1 = {1, 2, 3, 4, 5};
int[] a2 = new int[10];
System.arraycopy(a1, 1, a2, 3, 3);
System.out.println(Arrays.toString(a1)); // [1, 2, 3, 4, 5]
System.out.println(Arrays.toString(a2)); // [0, 0, 0, 2, 3, 4, 0, 0,
0, 0]
public static void method(int...arg) args实际上是数组
startTime = System.currentTimeMillis();
endTime = System.currentTimeMillis();
executionTime = endTime - startTime;
Arrays.toString(list)
String.length()
数组中除了交换值,还可以交换索引值
扑克牌随机洗牌:随机生成索引值进行互换
System.currentTimeMillis()获取当前毫秒值
Date类:
java.util.Date date = new java.util.Date();
date.getTime()
date.toString() Mon Dec 26 07:43:39 EST 2011
Random():以当前时间为种子创建Random对象
javafx.geometry.Point2D
Point2D p1 = new Point2D(x1,y1);
p1.distance(p2);
String 类
welcome.replace('e','A') wAlcomA
welcome.replaceFirst("e","AB") wABlcome
welcomw.replace("e","AB") wABlcomAB
replaceAll("","")
"Java#HTML#Perl".split("#") Java HTML Perl 字符串数组
“Java”.toCharArray()
String.valueOf( new char[] {'j','a','v','a'} );
正则表达式
Integer.parseInt(str)
String.matches("Java.*")
\d 单个数字位 \d{3} 三个数字
“a+b+#]","NNN") aNNNbNNNNNNc
String.format("%7.2f%6d%-4s",45.556,14,"AB")
-45.56--14AB-
StringBuilder.append(“”)
子父类构造方法链
多态:父类变量可以指向子类对象
变量的声明类型和实际类型
方法调用时 按照引用变量的实际类型(new 的类型)
ArrayList
add(Object o)
clear()
contains( Object o)
get(int index)
indexOF(Object o)
isEmpty()
remove(Object o)
set(in index,Object o)
new ArrayList<String>(Arrays.asList(array) );将数组列表的元素构造出一
个ArrayList
java.util.Collections.sort(ArrayList) 数值和字符串进行排序
java.util.Collections.max(ArrayList)
java.util.Collections.min(ArrayList)
java.util.Collections.shuffle(ArrayList) 随机打乱
异常捕获:
异常是一种对象,从异常类继承 java.lang.Throwable
异常:Exception: ClassNotFoundException IOException
RuntimeException(ArithmeticException NullPointEception
IndexOutOfBoundsException IllegalArgumentException )
系统错误:Error: LinkageError VirtualMachineError
声明异常 在方法参数后声明要throw的异常
抛出异常:
捕获异常:
如果try 抛出异常,try中其余语句会被跳过
catch 父类的异常则 可以捕获所有子类的异常
父类catch出现在子类catch之前会报错,应先catch子类的异常,再catch 父类
异常
方法调用会先被原方法中的catch捕获
如果没有异常:执行try 和finally以及之后的后续语句
264 如果异常被捕获:执行catch语句及finally 及后续语句
265 如果异常未被捕获:则将异常传递给调用者或执行finally后程序中止,后续语句不会被执行
无论是否有异常产生,均执行:finally
try {
statements;
}catch (Exception){
handling ex;
}finally{
finalStatements;
}
如果没有异常:执行finalStatements,再执行try语句的下一条
有异常并被捕获:执行catch和finally后再继续之后的语句
如果异常没被捕获:跳过try 执行finally 并将异常传递给方法调用者
即使finally 有return语句,finally 还是会执行
Exception.printStackTrace() 先打印接收到的最近的异常路径,再打印调用者
的调用者,一直到最开始出现异常的方法中
方法头不应该声明error和runtimeException 只声明IOException类似的受查异
常(checked Exception)
日期格式处理:
Date currentTime = new Date();
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd
HH:mm:ss");
创建文件:
public boolean createNewFile()
File file = new File("C:\a.txt");
file.createNewFile();
创建目录:
public boolean mkdir()
public boolean mkdirs() 若父文件夹不存在,则创建父文件夹
同样在File 的构造方法参数中传文件夹的路径
删除文件或文件夹
public boolean delete()
String getName() 返回路径中最后部分表示的文件或文件名
long length() 返回路径中表示的文件的字节数
String getAbsolutePath() 获取绝对路径的String对象
File getAbsoluteFile() 获取绝对路径的对象
new File("C:\Users\q06285\Desktop\qzqz")
String getName()
同样在File 的构造方法参数中传文件夹的路径
boolean exists() 判断File构造方法中封装路径是否存在
boolean isDirectory() 判断是不是文件夹
boolean isFile() 判断是不是文件
static File[] listRoots() 列出可用的文件系统根
String[] list() 获取File构造方法中路径的文件和文件夹名。遍历一个目录,
返回文件名
File[] listFiles() 返回的是指定目录下的文件和文件夹的全路径
文件过滤器:
自定义过滤器,实现FileFilter接口,重写抽象方法 accept
public String[] list(FilenameFilter filter)
public File[] listFiles(FileFilter filter) 参数为自己重写的过滤器实现
FileFilter接口
字节流:InputStream OutputStream
字符流:Reader Writer
IO程序:
使用前:导入IO
使用时:进行IO异常处理
使用后:释放资源(finally)
void write(byte[] b)
void write(byte[] b,int startIndex,int length)
FileOutputStream fos = new FileOutputStream("C:we.txt")
创建流对象后调用write方法写数据
byte[] bytes = {65,66,67,68};
fos.write(bytes);
写入字符串:fos.write("hello".getBytes() );
文件追加 类型shell的>>
new FileOutputStream("C:we.txt",true);
换行:
fos.write("123\r\nworld".getBytes());
IOException :
//try 外面声明变量,try 里面建立对象
FileOutputStream fos = null;
try{
fos = new FileOutputStream("s:\a.txt");
fos.write(100);
}catch(IOException ex){
System.out.println(ex);
throw new RuntimeException("文件写入失败,重
试");
}finally{
try{
if(fos!=null)
fos.close();
}catch(IOException ex){
throw new RuntimeException("关闭资源失
败");
}
}
字节输入流 FileInputStream
(char)new FileInputStream("c.txt").read();返回读取的一个字节,文件尾
返回-1
int len = read(byte[] b) 读取一定数量字节,存储到缓冲区的数组b中
len 表示读取到多少个有效字节,若不是正好读取到最后一个字节,则会重新往
回读取,但byte数组的长度为有效字节的个数,超过文件尾的数组其余部分为倒
序的数组
java.io.Write
write(int c) int值的ASCII码
write(char[] c)
write(char[] c,int index,int length)
write(String s)
int read() 读取单个字符
int read(char [] cbuf) 将字符读到char数组中,返回值为成功读取的字符数
java.io.File file = new java.io.File("Score.txt");
Scanner in = new Scanner(file);
java.io.PrintWriter output = new java.io.PrintWriter(file) 如果文件不
存在,则创建该文件
output.close();
new Scanner(Paths.get("c:\mydirectory\myfile.txt"),"UTF-8");
Runtime.addShutdownHook
日志:
Logger.getGlobal().info("File->Open menu item selected");
Logger.getGobal().setLevel(Level,OFF);
try{
Thread.currentThread().sleep(5 * 1000);
} catch (InterruptedException e){ }
多线程:
并发:一个时间段内的同时运行
并行:同一时刻点同时运行
线程调度:
分时调度
抢占式调度:Java 实有抢占式,优先级高的优先运行,相同的优先级随机选择
继承Thread类创建并启动线程:
1.定义Thread类的子类,重写run()方法,方法体代表线程需要完成的任务
2.创建该子类的对象,即创建了线程对象
3.调用线程对象的start()启动线程