corejava流的笔记
- 格式:doc
- 大小:252.00 KB
- 文档页数:16
Java IO流的基本知识●对一下几个类的理解:⏹类File⏹类FileInputStream:类 FireOutputStream :BufferedReader:从字符输入流中读取文本,缓冲各个字符,从而实现字符,数组和行的高效读取。
通常采用此操作时常常将BufferedReader包装其所有read()操作以提高开销很高的Reader(如FileReader ,Inputstream Reader)。
具体实现:BufferdReader br = new BufferdReader (new FileReader(“Sharon.text”)); “Sharon.text”为文件名BufferedWriter:将文本将文本写入字符输出流,缓冲各个字符,从而提供单个字符、数组和字符串的高效写入。
可以指定缓冲区的大小,或者接受默认的大小。
在大多数情况下,默认值就足够大了。
该类提供了 newLine() 方法,它使用平台自己的行分隔符概念,此概念由系统属性 line.separator 定义。
并非所有平台都使用新行符 ('\n') 来终止各行。
因此调用此方法来终止每个输出行要优于直接写入新行符。
通常 Writer 将其输出立即发送到底层字符或字节流。
除非要求提示输出,否则建议用 BufferedWriter 包装所有其 write() 操作可能开销很高的 Writer(如 FileWriters 和 OutputStreamWriters)。
例如,PrintWriter out= new PrintWriter(new BufferedWriter(newFileWriter("foo.out")));⏹DataInputStream:数据输入流允许应用程序对于底层输入流中基本数据的读取。
⏹DataInputStream:数据输出流允许应用程序以适当方式将基本 Java 数据类型写入输出流中。
java高级知识点笔记以下是一些Java高级知识点的笔记:1. 泛型(Generics):泛型是Java 5中引入的一个新特性,它允许在编译时定义类型参数化的类、接口和方法。
使用泛型可以提高代码的可重用性和可读性,并减少类型转换的错误。
2. 注解(Annotations):注解是Java提供的一种元数据机制,用于为代码添加元信息。
注解本身不改变程序的执行逻辑,但可以通过反射机制在运行时读取注解中的信息,对程序进行配置、跟踪、调试等操作。
3. 并发编程(Concurrency):Java提供了丰富的并发编程工具,包括线程(Thread)、锁(Lock)、并发集合(ConcurrentHashMap、CopyOnWriteArrayList等)、并发包(包)等。
使用这些工具可以帮助开发人员编写高效的多线程程序。
4. 反射(Reflection):反射是Java提供的一种机制,可以在运行时动态地获取类的信息,包括类的方法、属性、注解等。
反射可以用于实现动态代理、插件架构、框架开发等场景。
5. 泛型与类型擦除(Type Erasure):泛型在编译时会进行类型擦除,将类型参数替换为具体的类型。
类型擦除是为了保持与旧版本的兼容性,但也带来了一些限制,例如不能在运行时获取泛型类型信息。
6. 泛型通配符(Wildcards):泛型通配符是Java泛型的一个高级特性,它允许使用未知类型作为参数,增加了泛型的灵活性。
7. Lambda表达式:Lambda表达式是Java 8中引入的一个新特性,它允许以简洁的方式表示匿名函数式接口的实现。
Lambda表达式可以用于实现函数式编程风格,提高代码的可读性和可维护性。
8. Stream API:Stream API是Java 8中引入的一个新特性,它提供了一种声明式的方式来处理集合数据。
Stream API可以帮助开发人员以函数式编程的方式对集合进行转换、过滤、映射等操作。
IO流总结IO(Input Output)流●IO流用来处理设备之间的数据传输●Java对数据的操作是通过流的方式●Java用于操作流的对象都在IO包中●流按操作数据分为两种:字节流与字符流。
●流按流向分为:输入流,输出流。
输入流和输出流的流向的理解?流就是处理数据的一种方式或者一种手段,或者理解为一种数据流。
从硬盘已有的数据读取出来放存里面的这个过程就是输入流。
把存中的数据存储到硬盘中的这个过程就是输出流。
简单理解就是:以存为中心。
什么时候使用流对象?操作设备上的数据或操作文件的时候可以使用。
字符流字符流的抽象基类:Reader , Writer。
字符流的理解,由来和作用?由于很多国家的文字融入进来,比如说中文在编码表中默认占2个字节。
而为了按照文字的单位来处理,所以出现了字符流。
由来:早期的字节流+编码表,为了更便于操作文字数据。
作用:为了处理文字数据。
复制文件的原理和代码。
原理:首先用一个读取流对象和一个文件进行关联,然后用一个写入流对象作为目地的,为了把读取流中的文件传输到目的地流对象中,我们就提供了一个字符数组,为了关联这个数组,所以读取流对象有一个read()方法与这个字符数组进行关联,同理,写入流对象也有一个write()方法与这个字符数组进行关联,这样2个流对象就相连接了,而这个字符数组就相当于一个中转站。
import java.io.FileReader;import java.io.FileWriter;import java.io.IOException;/** 对文本文件进行复制。
将c盘的文件复制到d盘中。
* 原理:其实就是一个最简单的读写过程。
* 从c盘源,读取数据,并将读到的数据,写入到目的d盘中。
*/public class CopyTextFileTest {public static void main(String[] args) {FileReader fr = null;FileWriter fw = null;try {//1,创建一个字符读取流读取与源数据相关联。
第⼀章-Java基础笔记Java语⾔的概述Java是⼀门⾯向对象的语⾔,Java相对于C语⾔来说学习相对简单,它主要的三⼤特点就是:封装、继承、多态,并且只需要进⾏⼀次源码编译,在任何装有对应版本的JVM 虚拟机环境的计算机下运⾏;Java的三个版本JavaSE主要⽤于桌⾯应⽤的开发JavaME主要⽤于嵌⼊式系统的开发JavaEE主要⽤于企业级的WEB端开发和服务器开发Java环境介绍JDK - 提供了开发者的⼀些⼯具包,并包含了[JRE和JVM]JRE - Java的运⾏环境,提供了运⾏时需要的类库,并包含了[JVM]JVM - Java的虚拟⼀块内存区域,⽤于执⾏Java的代码Java跨平台交互图Java代码的运⾏机制后缀点java的⽂件会通过 javac命令进⾏⽂件的编译成⼀个能够被JVM读懂的字节码⽂件,通过加载、校验、初始化的过程都内存中,通过JVM寄存器读取⽂件中的⾏号,进⾏执⾏相关代码;注释注释是为了在编写程序时对某个类、⽅法或是⼀段代码进⾏功能作⽤的说明,它不会被编译成代码执⾏,只是起到⼀个描述作⽤,便于对代码的理解;Java中的注释分为3种:单⾏注释://多⾏注释:/* */⽂档注释:/** */对注解的内容⽣成JavaDoc⽂档DOS命令进⼊到要⽣成Doc⽂档的层级⽬录,执⾏:javadoc -encoding UTF-8 -charset UTF-8 ⽂件名称/*** @Author JavaCat7* @Description 这是⼀个⽂档注释*/public class Demo{/*** @Parameter args 对参数的描述* @Description 这是⼀个⽂档注释*/public static void main(String[] args){//这是⼀个单⾏注释System.out.println("Hello Java");/*这是多⾏注释这是多⾏注释*/}}标识符每个⼈都有名字,⽽标识符是为了给代码中的类、接⼝、⽅法、变量取⼀个名字,但它们的明⽩是有着严格规范的;规范:每个⼈都有名字,⽽标识符是为了给代码中的类、接⼝、⽅法、变量取⼀个名字,但它们的明⽩是有着严格规范的;**规范:**1.严格区分⼤⼩写;2.开头可以是$ 或 _ 或 A-Z a-z的字母组成,也可以汉字(不会这么⼲);3.可以由数字、字母或者是 $ 或 _ 组成,但数字不能⽤于开始;4.不可以包含特殊字符;5.不能以Java语⾔中的保留字作为命名;6.类名采取⼤驼峰命名法;7.⽅法和变量采取⼩驼峰命名法;8.常量采取⼤学加_进⾏命名;基本数据类型Java是强类型计算机语⾔,所有的变量必须先定义才能使⽤,对于强类型⽽⾔主要就是指的数据安全,强类型的语⾔有很多,⽐如C、C++、python...计算机存储单位换算bit(位) - 是计算内部数据存储的最⼩单元,通过8个⼆进制位进⾏表⽰;byte(字节) - 是计算机中数据处理的基本单位,通常使⽤B来表⽰;8个bit(位) = 1B(字节)1024个B(字节) = 1KB1024个KB = 1MB1024个MB = 1GB....//整数类型byte a = 1;short b = 2;int c = 3;long d = 4L;//⼩数类型float e = 5.0f;duble f = 6.0d;//字符类型char g = 'a';//布尔类型boolean h = true;boolean i = false;数据类型的转换各数值相关数据类型⽀持类型上的转换,既可以把排序级别较低的类型转换成排序级别较⼤的类型,也可以把排序级别较⾼的类型转换成级别较低的类型(但会造成数据的丢失);数据的转换强制类型转换 - 在要转换的变量前使⽤:要转换的对应数据类型如- (int)⾃动类型转换 - 在不同的数值数据类型运算中,它会以排序级别较⾼的数据类型作为基础⾃动转换int number1 = 128;//正常byte的值是 -128 - 127,强制把int类型转换成byte会造成数据的不精确byte number2 = (byte)number1;int number3 = 519;float number4 = 1.0f;//在运算过程中因为float的排序级别⽐int⾼,那么它会⾃动转换成float类型在完成运算float number5 = number3 + number4;变量,静态变量,常量及作⽤域变量是指可以变化的值,通过数据类型和变量名可以在内存中申请⼀块存储的空间,通过内存的引⽤地址可以设置改变内存中存储的值或者修改值,所有的变量必须先赋值才可以使⽤;成员变量成员变量是指在类中与⽅法同级的位置中定义的成员变量,在该位置定义的变量可以不⽤设置值就可以使⽤,因为它会对类进⾏初始化,并完成初始化赋值,就算不给他们赋值也会有默认的初始值,他们的默认初始值都是最⼩的单元;作⽤域成员位置的变量,可以在⾮静态⽅法的所有位置使⽤,如果要在静态⽅法中使⽤,需要先创建对象;public class Variable{int a; //默认为:0float b; //默认为:0.0char c; //默认为:''boolean d; //默认为:false}局部变量局部变量是指在⽅法内部定义的变量,必须要先完成初始化后,才可以被使⽤;作⽤域局部位置的变量,外部⽆法使⽤,只能在⽅法内部使⽤,可以和外部的变量名称相同;public class Variable{int number;public void method(){int number = 3;//可以和成员位置的变量名称相同}}静态变量静态变量是指被static关键字修饰的变量,被修饰的变量⼜称为类变量;作⽤域静态变量可以作⽤域与所有⽅法中,静态变量只能定义在类的成员位置;public class Variable{static int number ;public static void main(String[] arags){System.out.println(number);}public void method(){System.out.println(numbe);}}常量常量是指不能被改变的值,它在创建到成员位置必须要先完成赋值,⼀旦被创建它的值是不允许被更改的;作⽤域它的作⽤域和成员变量相同public class Variable{final int NUMBER = 3.1415926;}静态常量静态常量是指从属于类的常量,在完成初始化以后是不可以被修改的,并且被public所进⾏修饰;作⽤域它的作⽤域和静态变量相同运算符算术运算符int a = 5;int b = 2;int number = a + b; //number = 7;int number = b - a; //number = 3;int number = a * b; //number = 10;int number = a / b; //number = 2,只取整数;double number = a / (double)b; //number = 2.5int number = a % b; //number = 1;⾃增⾃减运算符int a = 1;int b;b = a++; //b = 1; 先把a的值赋值给b,后a进⾏ +1 操作;b = a--; //b = 2; a前⾯进⾏了⾃增那么就是2,先把2赋值给b,然后进⾏ -1 操作;b = ++a; //b = 2; 前⾯a进⾏了⾃减那么就是1,先对a进⾏⾃增加1,然后在赋值给b;b = --a; //b = 1; 前⾯a是2,先对a进⾏⾃减1,在赋值给b;赋值运算符int a = 5;//把 5 赋值给 a;int b = 2;//把 2 赋值给 b;a += b; // a = 7(a+b的结果在赋值给a);a -= b; // a = 3;a *= b; // a = 10;a /= b; // a = 2;a %= b; // a = 1;关系运算符int a = 5;int b = 2;a > b; //truea < b; //falsea >= b; //falsea <= b; //truea == b; //falsea != b; //true逻辑运算符boolean a = true;boolean b = false;a &&b = false;//都true则true,第⼀个条件为false就不会在看第⼆个条件,直接返回falsea ||b = true;//⼀个条件为true则true,第⼀个条件为tre就不看第⼆个条件,直接返回true! a = false;//取反a &b = false;//2个条件都要执⾏a |b = true;三元运算符int a = 5;int b = 5;a ==b ? "等于":"不等于"; //为true返回第⼀个,为false返回第⼆个流程控制语句If语句if语句就是判断条件是否成⽴,成⽴就执⾏if中的代码,不成⽴就不进⼊;boolean flag = true;if(flag){System.out.println("...");}if...else语句if...else语句就是根据判断的条件是否成⽴,成⽴⾛if语句,不成⽴⾛else语句;boolean flag = true;if(flag){System.out.println("成⽴");}else{System.out.println("不成⽴");}if...else if语句if...else if⽀持多条件的判断,只会进⼊⼀个匹配的条件;boolean flag = true;boolean fail = false;if(flag){System.out.println("条件匹配");}else if(fail){System.out.println("条件匹配");}else{System.out.println("条件都不匹配");}switch条件控制语句witch语句从JDK1.7开始可以⽀持匹配:String字符串;注意事项:每个case 后⾯必须跟⼀个数值常量或字符串常量⽤于匹配;匹配的语句后⾯需要加上break关键字,防⽌case穿透;String week = "星期⼀";switch(week){case "星期⼀":System.out.println("今天是星期⼀");break;case "星期⼆":System.out.println("今天是星期⼆");break;case "星期三":System.out.println("今天是星期⼆");break;default:System.out.println("今天星期⼏都不是");}循环控制语句for循环语句for(初始值,条件表达式,更新)for(int i = 1 ; i <= 10 ; i++){System.out.println(i);}增强for循环for(接收类型的变量,表达式)int [] arrays = {1,2,3,4,5,6,7,8,9,10};for(int i : arrays){System.out.println(arrays);}while循环语句while(条件表达式)int number = 1;while(number <= 100){System.out.println(number);number ++;}do...while循环语句do{先把语句执⾏⼀遍}while(条件表达式);boolean flag = true;do{System.out.println("先执⾏⼀遍");flag = false;}while(flag);break和continue关键字break关键字结束循环的意思;for(int i = 1; i <= 100; i++){if(i == 10){System.out.println("打印10后结束循环");break;}}continue关键字跳过当前循环,进⼊下⼀次循环;for(int i = 1 ; i <= 10; i ++){if(i % 2 == 1){continue;}System.out.println("打印:"+i);}⽅法概述:⽅法就相当于使⽤多⾏代码进⾏组合去实现的⼀个功能⽚段,对代码进⾏封装利⽤,可实现多次调⽤;⽅法的定义修饰符返回值⽅法名称(形参形参名称){⽅法体}public class Function{public static void main(String[] arags){}public void method1(){}public void method2(String name,int age){}public static void method3(){}public int method03(){int a = 3;return a;}public int method04(int a,int b){if(a == b){System.out.println(a + "和" + b + "相等");return -1;}return a > b ? a : b;}}⽅法的重载⽅法的重载是指⽅法名称相同,传递的参数类型不同,个数不同,顺序不同与返回值⽆关;这样的⽅法被称为⽅法的重载;public class Function{public int max(int a,int b) {return a > b ? a : b;}public double max(double a,double b){return a > b ? a : b;}}形参和实参形参是指在()内部的参数,实参是指被真实传递的参数;public class Function{public static vid main(String[] args){Function function = new Function();function.max(3,5);}public int max(int a,int b) {return a > b ? a : b;}}可变参数在⽅法的()中我们有时候不知道要传递多少参数,那么我们可以传递⼀个数据类型紧跟后⾯加上...来表⽰;但需要注意的是⼀个⽅法中指允许⼀个可变参,如果有其他类型的参数,那么可变参数需要写在最后⾯;可变参数本质上就是⼀个数组;public class Function{public void method(String name,int... numbers){for(int num : numbers){System.out.println(num);}}}递归递归的本质就是⾃⼰调⽤⾃⼰,它可以解决⼀些业务,但效率和开销较⼤,对⼀些⽐较⼩的运算可以使⽤;//递归求3的阶乘public class Founction{public static void main(String[] args){}public int founction(int number){int result = 1;if(number == result){return result;}return number * founction(number - 1);}}数组数组就是⼀组数据的集合,Java中的数组必须存储和数据类型相符合的值,不允许与定义的数据类型不匹配;⼀旦数组被创建出来,它的长度就不允许被改变,数组有下标(索引)的概念,都是从0开始,如果操作的数据超过数组的长度那么就会报出下标索引越界异常[ IndexOutofBoundsException ];数组的定义int[] array = new int[3];int array[] = new int[3];int array[] = {1,2,3};数组的内存模型图数组的遍历⽅式int[] arr = new int[10];//⽅式⼀for (int i = 0; i < arr.length ; i ++) {System.out.println(arr[i]);}//⽅式⼆for (int num : arr) {System.out.println(num);}⼆维数组int[][] arr = new int[3][2];String[][] strArr = {{"hello","hello"},{"hi","hi","hi",{"java","java","java","java"}}Arrays⼯具类Arrays数组的⼯具类,是jdk已经帮我们提供好的⼀套数据⼯具类,⽅便我们对数据相关进⾏⼀些操作;int[] arr = {3,51,1,33,82,22,55,53};Arrays.toString(arr);//把数组变成⼀个字符串Arrays.sort(arr);//对数组内容进⾏升序排列Arrays.fill(arr,0);//把数组的内容全部进⾏替换为0常见算法冒泡排序public static int[] arr = new int[]{5, 2, 7, 4, 6, 9, 8, 13, 19, 11, 17, 15};//冒泡排序算法public static void popArithmetic(int[] arr) {//⽐较的轮数是数组长度-1for (int i = 0; i < arr.length - 1; i++) {//每次⽐较⼀轮,需要减少1次⽐较的次数for (int j = 0; j < arr.length - i - 1; j++) {//如果前⾯的数据⽐后⾯⼤,那么就交换位置if (arr[j] > arr[j + 1]) {int temp = arr[j];arr[j] = arr[j + 1];arr[j + 1] = temp;}}}System.out.println("最终结果是:" + Arrays.toString(arr));}选择排序public static int[] arr = new int[]{5, 2, 7, 4, 6, 9, 8, 13, 19, 11, 17, 15};//选择排序public static void selectOrderArithmetic(int[] arr) {//⽐较的轮数是数组长度-1for (int i = 0; i < arr.length - 1; i++) {//每⽐较⼀次,需要减少1次⽐较的次数,会把⼩的先往前排for(int j = i+1;j<arr.length;j++){if(arr[i]>arr[j]){int temp = arr[i];arr[i] = arr[j];arr[j] = temp;}}}System.out.println("最终结果是:" + Arrays.toString(arr));}⼆分查找public static int[] arr = new int[]{1, 2, 3 , 4, 6, 7, 8, 13, 19};//2分查找法public static void branchFind(int [] arr,int number){int startNode = 0;int endNode = arr.length-1;int middle = 0;while (startNode <= endNode){//中间的指针由开始节点和结束节点计算得来middle = (startNode+endNode)/2;if(number == arr[middle]){System.out.println("找到了");break;}else if(number < arr[middle]){endNode=middle-1;System.out.println(number+"⼩于中间值,结束节点变更为中间节点-1"); }else if(number > arr[middle]){startNode = middle+1;System.out.println(number+"⼤于中间值,开始节点变更为中间节点+1"); }else{System.out.println("没有找到该元素");break;}}}。
诚信、创新、开放、合作JAVA的面向对象编程--------课堂笔记面向对象主要针对面向过程。
面向过程的基本单元是函数。
什么是对象:EVERYTHING IS OBJECT(万物皆对象)所有的事物都有两个方面:有什么(属性):用来描述对象。
能够做什么(方法):告诉外界对象有那些功能。
后者以前者为基础。
大的对象的属性也可以是一个对象。
为什么要使用面向对象:首先,面向对象符合人类看待事物的一般规律。
对象的方法的实现细节是屏蔽的,只有对象方法的实现者了解细节。
方法的定义非常重要。
方法有参数,也可能有返回值。
注意区分:对象(本身)、对象的实现者、对象的调用者。
分析对象主要从方法开始。
我们通过类来看待对象,类是对象的抽象。
其次,采用面向对象方法可以使系统各部分各司其职、各尽所能。
对象之间的耦合性一定要低(比如不同硬盘和不同主板之间的关系)。
这样才能使每个对象本身做成最好的。
对于对象的要求:高内聚、低耦合,这样容易拼装成为一个系统。
实现高内聚就是要最大限度低提高复用性(复用性好是因为高内聚)。
可复用性是OOP的基础。
比较面向过程的思想和面向对象的思想:面向过程的思想:由过程、步骤、函数组成,以过程为核心;面向对象的思想:以对象为中心,先开发类,得到对象,通过对象之间相互通信实现功能。
面向过程是先有算法,后有数据结构。
面向对象是先有数据结构,然后再有算法。
在用面向对象思想开发的过程中,可以复用对象就进行复用,如无法进行复用则开发新的对象。
开发过程是用对个简单的对象的多个简单的方法,来实现复杂的功能。
从语法上来看,一个类是一个新的数据类型。
在面向对象编程中,除了简单数据类型,就是对象类型。
定义类的格式:class Student{代码}注意类名中单词的首字母大写。
实例变量:定义在类中但在任何方法之外。
(New出来的均有初值)局部变量:定义在方法之中的变量。
局部变量要先赋值,再进行运算,而实例变量均已经赋初值。
这是局部变量和实例变量的一大区别。
java完美经典读书笔记第一章概述第二章JAVA语言基础关键字:基本数据类型:bytehortintcharlongfloatdoubleboolean循环控制:dowhileforbreakcontinue分支控制:ifelewitchcaedefaultbreak方法变量和类得修饰府:privatepublicprotectedfinaltaticabtractynchronizedvolatiletrictf ptranient字面值常量:faletruenull方法相关得关键字:returnvoid包相关得关键字:packageimport异常处理:trycatchfinallythrowthrow对象相关:newe某tendimplementuperclaintanceofthi很多算术运算操作可以产生浮点型无法表达的数字,如无限大,无限小等,这些数据的表达通过浮点数封装类(Float和Double)所提供的特殊属性来表达。
Float.NaN非数字Float.NEGATIVE_INFINITY无限小Float.POSITIVE_INFINITY无限大Double.NaN非数字Double.NEGATIVE_INFINITY无限小Double.POSITIVE_INFINITY无限大数据类型的自动转换图:char--->{int-->long-->float-->doublebyte-->hort-->{内置类对应的基本类型:Byte-->byte;Short-->hort;Integer-->int;Long-->long;Float-->float;Double-->doubleBoolean-->boolean;Character-->char;String-->char[]将基本数据类型转为String类型:tringtr1;intintv1=300;tr1=String.valueOf(intv1);将tring类型转为基本数据类型:tringtr1="126";inti1=Integer.pareInt(tr1);取得tring对象内含的char[]值,必须使用它的toCharArray()方法来取得。
java基础知识总结笔记对于很多只会C语言的初学者而言,面对java基础语法学习,反而感觉很难,其实其中最大的问题不是语法难,而是一种编程思想的转变。
下面是为大家的关于java基础知识总结笔记,希望大家喜欢!Java基础入门学习路线可以总结为四步走:1.java开发环境的搭建;2.java初级之基础语法学习(80%类似C语言);3.java中级之面向对象编程学习(重点);4.java中级之应用编程学习。
第一步:JDK软件开发包时java软件开发环境,包括jre运行环境和jvm虚拟机,在oricle官网下载javaSE 版本JDK包;配置好环境变量就可以使用了。
第二步:java初级语法学习,1.基本数据类型整形,字符型,字节型,长整形,短整形,浮点型,双精度,布尔型;2.运算符+,-,*,/,%等;3.控制流(while,switch,ifelse);4.数组的定义方式。
此阶段基本无难度,只要了解练习例题。
第三步:java面向对象学习,1.类和对象;2.java语言三大特性,封装、继承、多态;3.一些关键字学习(static,final,abstract,extends)等。
这是重点,大家根据知识点一步步研究学习才是关键。
第四步:java应用编程,例如:文件IO,集合(类似C语言数据结构),异常处理,线程,网络,JDBC数据库操作等,都是掌握面向对象以后,在查找不同的类使用类中不同的方法达到应用的效果,所以并不会很难。
等基础语法掌握了就可以继续后面框架学习(javaweb方向,android学习),相信明确思路你会豁然开朗,更有学习动力。
以上没有具体的实例和知识点讲解,分享的只是完全没接触过java的初学者自学java的思路和学习的流程,应该把握的重点,希望大家有所帮助。
1991年Sun公司的JamesGosling(詹姆斯·高斯林)等人开始开发名称为Oak的语言,希望用于控制嵌入在有线电视交换盒、PDA等的微处理器;1994年将Oak语言更名为Java;Java的三种技术架构:JAVAEE:JavaPlatformEnterpriseEdition,开发企业环境下的应用程序,主要针对web程序开发;JAVASE:JavaPlatformStandardEdition,完成桌面应用程序的开发,是其它两者的基础;JAVAME:JavaPlatformMicroEdition,开发电子消费产品和嵌入式设备,如手机中的程序;1,JDK:JavaDevelopmentKit,java的开发和运行环境,java 的开发工具和jre。
1.输入InputStream,输出OutputStream以字节为单位存取相对于内存/管道来说OutputStream(write)内存----------------------------------> 硬盘文件管道内存<---------------------------------- 硬盘文件InputStream(read)2.FileOutputStream f =new FileOutputStream("tarena.txt");//如果之前有这文件,将会覆盖FileOutputStream f =new FileOutputStream("tengbx.txt",true); //如果有这文件,只会追加3.处理字节流的两个基础类是:InputStream OutputStrean处理字符流的两个基础类是:Reader Writer1.InputStream 和 OutputStream(抽象类,以字节为单位进行读写)1)InputStream介绍:->InputStream in = new FileInputStream("file.txt");byte[] buf = new byte[in.available()];int count = in.read(buf);in.close();int read()读取一个字节,并返回读取的字节数int read(byte[] buffer)将数据读入一个字节数组,同时返回读取的字节数int read(byte[] buffer,int offset,int length)将数据读入一个字符数组,放到数组的offset指定的位置开始,并用length指定读取的最大字节数void close():用完流以后一定要关闭int available():用于返回在不发生阻塞的情况下,该流可以读取的字节数2)OutputStream 介绍:write(int c):写入一个字节到流中write(byte[] buffer):将字节数组中的数据写入到流中int write(byte[] buffer,int offset,int length)将字节数组中从offset开始的length个字节写入流中。
java学习笔记(5)控制语句、键盘输⼊控制语句:java控制可以分为7种:*控制选择结构语句: *if if else *switch*控制循环结构语句: *for *while *do while*改变控制语句顺序: *break *continueif控制语句:/*关于java语⾔当中的if语句,属于选择结构,if语句⼜被称为分⽀语句/条件控制语句;1、if语句的运发结构:包含4中编写⽅式第⼀种:if(布尔表达式){java语句;...};第⼆种:if(布尔表达式){java语句;...}else{java语句;...}第三种:if(布尔表达式){java语句;...}else if(布尔表达式){java语句;...}...第四种:if(布尔表达式){java语句;...}else if(布尔表达式){java语句;...}else{java语句;...}重点:只要有⼀个if分⽀执⾏,整个if语句结束;注意:所有控制语句都是可以互相嵌套的。
注意:嵌套使⽤的时候,代码格式要保证完美。
注意:if语句中,只有⼀条java语句的话,⼤括号可以省略;if(true/false){java语句;}if(true/false) java语句;//但是不推荐使⽤,这种代码风格不好。
不容易看清。
*/public class ifTest01{public static void main(String[] args){// 需求,所在位置的5公⾥范围内有肯德基的话,去KFC吃午饭。
// 公⾥数double distance = 6.0;//单位KM// 判断语句if(distance<=5){System.out.println("⾛着去KFC吃午饭");}else if(distance<=7.0&&distance>5){System.out.println("跑着去KFC吃午饭");}else{System.out.println("在附近吃别的");}}}接收⽤户键盘输⼊:/*System.out.println() 负责向控制台输出,【从内存到控制台,输出的过程,这是从内存中出来了】接收⽤户键盘输⼊,从"键盘"到"内存"。
java中的各种流(⽼师的有道云笔记)内存操作流-字节之前的⽂件操作流是以⽂件的输⼊输出为主的,当输出的位置变成了内存,那么就称为内存操作流。
此时得使⽤内存流完成内存的输⼊和输出操作。
如果程序运⾏过程中要产⽣⼀些临时⽂件,可采⽤虚拟⽂件⽅式实现;直接操作磁盘的⽂件很耗性能,使⽤内存流可以提升性能;jdk⾥提供了内存流可实现类似于内存虚拟⽂件的功能。
•ByteArrayInputStream:将内容写到内存中•ByteArrayOutputStream:将内存中的数据写出ByteArrayInputStream:构造⽅法:•public ByteArrayInputStream(byte[] buf):全部内容•public ByteArrayInputStream(byte[] buf,int offset,int length):指定范围的内容ByteArrayOutputStream:•public ByteArrayOutputStream()public class ByteArrayDemo { public static void main(String[] args) throws Exception { String info = "helloworld"; InputStream input = new ByteArrayInputStream(info.getBytes()); OutputStream output = new ByteArrayOutputStream(); int temp = 0; while ((temp = input.read()) != -1) { output.write(Character.toUpperCase((char) temp)); } String str = output.toString(); // 取出内容 input.close() ;//关闭⽆⽤ output.close() ;//⽆效 System.out.println(str) ; }}打印流思考:如果现在要想完成⼀个字符串或者是boolean型或者是字符型的数据输出使⽤OutputStream是否⽅便?肯定是不⽅便的,因为OutputStream中只能操作字节数据,所以其他的数据类型很难操作,那么在Java的IO包中为了解决这种问题增加了两种类:PrintStream、PrintWriter。
IO+Thead+Net 一. IO四大家族 1. InputStream OutputStream 字节输入流:IO中的InputStream为抽象类,返回一个字节, Int read():8bit-----低8位 Int read(byte[] b);---FileInputStream 字节输出流:IO中的OutputStream为抽象类,输出一个字节,截取int类型b的低8位void write(int b) Void write(byte[] b); ---FileInputStream void write(byte[] b,index,length); ---FileInputStream 1) FileInputStream和FileOutputStream 【案例1】创建一个Eson.txt,用IO写一些文字“HelloWorld”,用IO读出来 //条件传一个String-------》得到FileInputStream File file=new File("D:/Eson.txt"); FileInputStream fis=new FileInputStream(file); FileOutputStream fos=new FileOutputStream(file); //先写 String str="HelloWorld"; byte[] b=str.getBytes(); fos.write(b); //在读 int a=-1; while((a=fis.read())!=-1){ System.out.print((char)a); } fis.close(); fos.close(); a的值表示:一个一个的字节,所以我们可以把一个一个的字节变成字符char显示出来 注意:FileInputStream传一个File进去的时候。有就会使用当前的文件,若没有会自动的创建文件。而FileOutputStream则不会 若使用缓冲: //在读 int a=-1; byte[] by=new byte[1024]; //一次读1K while((a=fis.read(by))!=-1){ System.out.print(a); } a的值表示:读取的总字节数,满1024个Byte,就返回1024,若不满就返回当前的字节数(如刚才读出来的是10个字节,也就是文件的大小)
FileInputStream{ Private File file=null; Public FileInputStream(File file){ This.file=file; } Public FileInputStream(String name){ This.file=new File(name); }
} 2. Writer Reader 1) InputStreamReader和OutputStreamReader Reader:int reade() 返回char类型,占int的低16位 Writer:int write(int b) 输出一个char,为参数int的低16位 【案例2】即能将英文字节变成字符,也能将中文字节变成字符 InputStreamReader isr=new InputStreamReader(
new FileInputStream("D:/Eson.txt")); // H e l l o W o r l d 李 顺 //72,101,108,108,111,87,111,114,108,100,192,238,203,179, //在读 int a=-1; while((a=isr.read())!=-1){ System.out.print((char)a); } isr.close(); 【案例3】完成文件的复制:将D盘Eson.txt,复制到E盘 方式1:纯一个一个字节的去复制,效率很慢 FileInputStream fis=new FileInputStream(new File("D:/Eson.txt")); FileOutputStream fos=new FileOutputStream(new File("E:/Eson.txt")); int b=-1; while((b=fis.read())!=-1){ fos.write(b); } fis.close(); fos.close(); 方式2:使用byte[]数组去复制,效率比较高 FileInputStream fis=new FileInputStream(new File("D:/Eson.txt"));
FileOutputStream fos=new FileOutputStream(new File("E:/Eson.txt")); int b=-1; byte[] by=new byte[1024];//2.5K while((b=fis.read(by))!=-1){ fos.write(by,0,b); } fis.close(); fos.close(); 方式3:使用BufferedInputStream和BufferedOutputStream去复制 BufferedInputStream bis=new BufferedInputStream(new FileInputStream(new File("D:/Eson.txt"))); BufferedOutputStream bos=new BufferedOutputStream(new FileOutputStream(new File("E:/Eson.txt"))); int b=-1; while((b=bis.read())!=-1){ bos.write(b); } bis.close(); bos.close(); 方式4:针对文件复制的时候,一般不适用这种类似的流,适用于程序需要用到文件里面的字符串数据的时候,读进较大的文件 BufferedReader和BufferedWriter //字节(水分子)---》字符(一滴水)---》字符串(一桶水)
BufferedReader br=new BufferedReader(new InputStreamReader( new FileInputStream("D:/Eson.txt"))); BufferedWriter bw=new BufferedWriter(new OutputStreamWriter( new FileOutputStream("E:/Eson2.txt"))); int b=-1; while((b=br.read())!=-1){ bw.write(b); System.out.print((char)b); } br.close(); bw.close(); 2) FileReader和FileWriter FileReader= new InputStreamReader(new FileInputStream("D:/Eson.txt")) FileWriter= new OutputStreamWriter(new FileOutputStream("E:/Eson2.txt")) 区别在于:使用FileReader不能改变编码,它使用的是默认的编码 3. Properties public class ConnectionUtils { private static Properties prop=new Properties(); static{ try { //方式1:针对于本地文件,不在项目中的文件 // prop.load(new FileInputStream(new File("E:/db1.properties"))); // prop.load(new FileReader("src/db.properties")); ClassLoader loader=ConnectionUtils.class.getClassLoader(); //类加载器将db.properties变成一个一个字节流 //方式2:针对于本项目中的文件 // prop.load(loader.getResourceAsStream("db.properties")); //方式3:针对于网络中的文件 // URL url=new URL("E:/db1.properties"); URL url=loader.getResource("db.properties"); prop.load(url.openConnection().getInputStream());
} catch (Exception e) { e.printStackTrace(); } } public static String getValue(String name) { return prop.getProperty(name); } } 测试类: public static void main(String[] args) throws Exception { ConnectionUtils conn=new ConnectionUtils(); String name=conn.getValue("name"); String passsword=conn.getValue("password"); System.out.println(name+":"+passsword); } 打印的结果:lishun:123 注意:方式1和方式2的区别:主要是服务器的内存消耗,如几百万人访问该程序,如果使用方式1,那么FileInputStream会不停的创建,若使用ClassLoader则只会创建一次 【问题2】解决Properties中文乱码的问题 使用JDK/bin下的工具命令:native2ascii.exe name=\u674e\u987a password=123 或者使用Java程序手动的变成16进制编码 类加载的顺序: 1. 去当前目录下去加载(String.class) 2. 去我们JDK系统类库(tools.jar/rt.jar/dt.jar)中寻找 3. 最后去ClassPath下去寻找
Thead 一, 神马叫线程和进程? Main入口函数是主线程。 class MyThread1 extends Thread{ @Override public void run() { System.out.println("******MyThread2*******"); } } class MyThread2 implements Runnable{ @Override public void run() { System.out.println("******MyThread2*******"); }