javase基础

今天复习了一下,以前的学习笔记。把曾经使用过的基本类,java基础过了一遍,简单的理解了一下,开发中可能能用到的。

基本概念:
对象初始化过程:先在栈分配空间,就是初始话局部变量,然后执行new 操作 在堆里分配空间,成员变量默认初始话,显示初始话,局部变量只能显示初始话,然后调用构造函数。还有常量池或者叫方法池一般常量方法放在里面。
     成员变量和局部变量的区别?
          A:在类中的位置不同
               成员变量:在类中方法外
               局部变量:在方法定义中或者方法声明上
          B:在内存中的位置不同
               成员变量:在堆内存
               局部变量:在栈内存
          C:生命周期不同
               成员变量:随着对象的创建而存在,随着对象的消失而消失
               局部变量:随着方法的调用而存在,随着方法的调用完毕而消失
          D:初始化值不同
               成员变量:有默认初始化值
               局部变量:没有默认初始化值,必须定义,赋值,然后才能使用。
             
          注意事项:
               局部变量名称可以和成员变量名称一样,在方法中使用的时候,采用的是就近原则。
break和continue区别:
    break是直接跳出循环
    continue是跳出本次循环执行下一次循环

this和super区别:
  this是指本类,本对象,super是指父类,父对象
while和do while区别,以及for  for和while可能一次都不执行,do while至少会执行一次。for(;;)只要有两个分号,语句就是对的。只是死循环,注意写代码时候避免死循环,一般我这些用的比较少,foreach用的比较多用来遍历列表输出。
if if else switch 三目运算符:if else 主要用于区间判断 swicth case 主要用于等值判断,注意一般别忘了写break 除非有需求的时候。三目运算符:if else 简单替换方法:
表达式?表示1:表达2 如果表达式为true 返回表达1结果。如果为false 返回表示2结果。表达式只有两种选择true 或者false。
== 判断值是否相等,Equals 一般判断引用地址是否相等。他们都可以判断值是否相等。
修饰符:private  私有 一般用于封装,本类可以访问。默认(friendly)本类和同包可以访问,protected 本类 同包 子类 public 本项目
static 静态的主要作用就是为了共享数据,静态方法,静态变量,静态代码块,属于类,在jvm加载的时候就执行了,并且只执行一次。静态方法可以直接通过类名调用,不需要new
final:1,修饰变量,要求变量只能被赋值一次 2,修饰类,要求该类不能被其他类继承 3,修饰方法 ,要求该方法不能被继承(重写)

@Override和@Overload 重写用于子类对父类的方法重写,继承中。实际开发中,用的比较多,一般是重写接口抽象方法,面向接口编程。重载同一个类中方法名相同,参数列表不同,用的也多,一般根据传的数据不懂,写不同的方法 1,比如参数数量一致,类型不能一样
2,比如参数数量一致,类型一样,顺序一定不能一样。

封装:简单理解目的就是为了,代码安全性,以及少写代码。也便于我们开发,不需要考虑具体实现的细节,只需要一个我们想要的对象就可以。封装隐藏一些代码内部实现细节,提供一些公用的方法方法。比如getter setter 方法,jdk中的类,方法,和框架都是封装实现的
继承:为了分类管理,父类一般拥有所有子类的一些共同属性,或者功能,只是子类中具体的实现方法可能不一样。满足is a 条件下使用继承,抽象方法(子类必须实现的方法),抽象类(不能实列话)
多态:同一个引用类型,使用不同的实例而执行不同操作,简单理解一个人会写代码,会演讲,等当他扮演不同的角色的时候,执行不同的操作。
接口:用来替代抽象类,接口可以多继承(抽象类只能单继承),所有方法都是抽象方法,不能被实例化,所有的成员变量都是静态常量
包装类:[/size]主要目的是为了我们方面使用包装类里面的一些基本方法,常见的类型转换valueof(),自动装箱:jvm自动将一个基本类型,自动帮我们转换成一个引用类型,自动拆箱:将一个引用类型自动转换成基本类型。byte        ---> Byte
short       ---> Short
int           ---> Integer 
long        ---> Long
float        ---> Float
double    ---> Double
boolean   --->Boolean
char         --->Character
在实际开发中定义类型,基本都用包装类。
[size=large]基本类:

  statck 类堆栈得使用:常用方法:pop()移除堆栈顶部对象,并返回改对象。peek(),查看堆栈顶部的对象,但不从堆栈中移除它,search()表示以 1 为基数,距离堆栈顶部的距离,如果现实为-1表示此对象不再堆栈中。empty()判断是否为空。push(),将对象加入堆栈顶部。
字符String Stringbuffer(多线程安全)用于字符串拼装 StringBuidder(单线程)一般不用
日期Date ,日历Calender ,随机数,Random,数学类 math.Arrays类提供对数组的方法,排序,查询sort(a)数组名
异常处理 :声明(throws):抛出:直接在方法中调用:throw new Ex();
用try将可能会出异常的代码括起来,catch进行处理,catch可以有多个,finally 表示只要进入try,无论执行不执行catch都会执行finally里面的代码,即便含有return也会执行。
错误信息:error 程序员无论为力的错误,看JDK api
常见的异常:
ArithmeticException:算术错误情形,如以零作除数,ArrayIndexOutOfBoundsException:数组下标越界,NullPointerException:空指针 InputMismatchException:欲得到数据类型与实际输入类型不匹配 NumberFormatException:数字格式转换异常,如把"abc"转换成数字 IllegalArgumentException:方法接收到非法参数 ClassCastException:对象强制类型转换出错
ClassNotFoundException:类没找到。异常处理两种形式:可以抛出或者自己处理,一般选择自己处理,如果实在处理不了,才抛出 ExceptionInInitializerError - 如果该方法激发的初始化失败,LinkageError - 如果链接失败,IllegalAccessException - 如果该类或其 null 构造方法是不可访问的,InstantiationException - 如果此 Class 表示一个抽象类、接口、数组类、基本类型或 void; 或者该类没有 null 构造方法; 或者由于其他某种原因导致实例化失败。


集合框架JCF:
   接口结构:collection :
                   list不唯一,有序,常用的add,remove,get等等方法,查API仔细看。实现类ArrayList(遍历,随机访问时效率比较高)LinkedList(插入,删除时效率比较高,额外提供了关于头部和尾部的  添加,获取,删除方法。)Stack 后进先出 lifo  (last in  first out)
                   set唯一,无序,实现类HashSet iterator遍历对象.如果用法忘记了看API讲的很详细,去重,原理重写hashCode equals两个方法,可以自定义去重。TreeSet
去重复, 并且可以按照某种顺序排序 TreeSet的add方法会将对象转为Comparable, 然后调用compareTo方法, 所以存储在TreeSet中的对象必须实现Comparable, 重写compareTo方法,Integer能排序(有默认顺序), String能排序(有默认顺序), 自定义的类存储的时候出现异常(没有顺序)  queue先进先出 fifo  (first in first out)应用场景:排队,发送邮件,发送短信,工作。
Map键值对:
比较重要的方法,keySet(),values,实现类HashMap 线程不安全
允许空值,HashTable 线程安全不允许空值

集合迭代:iterator
System.out.println("获取hashmap中的keyset,遍历打印");
		Set set = map.keySet();
		Iterator iter = set.iterator();
		while (iter.hasNext()) {
			Object each = iter.next();
			System.out.println(iter.next());
		}

             
 System.out.println("获取hashmap中的value 集合,遍历打印");
		Collection con = map.values();
		// foreach的方式可以迭代实现了iterator接口的集合
		// con 表示当前迭代的集合
		// each 当前迭代获取到的对象
		for (Object each : con) {
			Dog dogEach = (Dog) each;
			System.out.println(dogEach.getName());
		}

泛型集合:作用:指定集合只能存放某一种类型元素,使运行时异常提前到编译时异常。
                  
Map<String,String> map = new HashMap<String,String>();
map.put("key","value");

IO 流:

file类:用于文件和文件夹操作的类,一般要实现Serializable可序列化接口,在网络中传输数据流,都要实现序列化。


           //判断是否有这个文件 ,如果没有就创建这个文件夹
          File file = null;
          File file1 = new File("D:"+file .separator+"Program                             Files"+file.separator+ "test");
           if(!file1 .exists()){
//创建文件夹
               file1.mkdirs();
          }
           //创建一文件
          File file2 = new File(file1+file .separator+"test.txt");
           if(!file2 .exists()){
               try {
//创建文件
                    file2.createNewFile();
              } catch (IOException e ) {
                    e.printStackTrace();
              }
          }
          
     //删除文件或者文件 注意删除时候要先确定文件夹内容是空的才能删掉文件夹
           file2.delete();
           file1.delete();
从命名:注意重命名后要先赋给一个新的对象在操作新的对象
File file3  = file2;
file3.renameTo( new File(file1+file .separator+"test3.txt"));
//只读操作
file3.setReadOnly();

public class CopyFunction {
	/**
	 * 封装拷贝函数
	 * @param fileold
	 * @param filenew
	 */
	public static void copyfunction(File fileold, File filenew) {
		FileInputStream fis = null;
		FileOutputStream fos = null;
		try {
			fis = new FileInputStream(fileold);
			/**
			 * 文件要拷贝的位置
			 */
			fos = new FileOutputStream(filenew);
			/**
			 * 按照512字节读取文件
			 */
			byte[] bytearr = new byte[512];
			int readEnd = -1;
			while((readEnd = fis.read(bytearr))!=-1){
				fos.write(bytearr);
			}
		} catch (FileNotFoundException e) {
			System.out.println("文件没有找到");
			e.printStackTrace();
		}
		catch (IOException e) {
			
			e.printStackTrace();
		}finally{
			/**
			 * 关闭输入输出流
			 */
			try {
				fis.close();
				fos.close();
			} catch (IOException e) {
				System.out.println("输入输出流关闭异常");
				e.printStackTrace();}}}
	public void cutfunction(File fileold1, File filenew1) {
		/**
		 * 剪切文件
		 */
		copyfunction(fileold1, filenew1);
		fileold1.delete();}
	}


字节流:InputStream输入流(FileInputStream,ObjectInputStream(读写对象需要实现可序列),ByteArrayInputStream,DataInputStream(用于8中基本数据的传输))OutputStream.
字符流:Reader输入(BufferedReader,InputStreamReader,FileReader)writer输出(除了对应的还有一个PrintWriter),以及他们的子流,用的时候看API 一般要什么就给他什么就好了。
http://blog.csdn.net/hguisu/article/details/7418161介绍的很详细,想仔细研究的话可以去看。其他的内容太多,就单独分类吧











   

  

猜你喜欢

转载自daimajia.iteye.com/blog/2283610