欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

javase基础

程序员文章站 2024-03-23 14:54:22
...
今天复习了一下,以前的学习笔记。把曾经使用过的基本类,java基础过了一遍,简单的理解了一下,开发中可能能用到的。

[color=blue][size=large]基本概念:[/size][/color]
[size=medium]对象初始化过程:[/size]先在栈分配空间,就是初始话局部变量,然后执行new 操作 在堆里分配空间,成员变量默认初始话,显示初始话,局部变量只能显示初始话,然后调用构造函数。还有常量池或者叫方法池一般常量方法放在里面。
成员变量和局部变量的区别?
A:在类中的位置不同
成员变量:在类中方法外
局部变量:在方法定义中或者方法声明上
B:在内存中的位置不同
成员变量:在堆内存
局部变量:在栈内存
C:生命周期不同
成员变量:随着对象的创建而存在,随着对象的消失而消失
局部变量:随着方法的调用而存在,随着方法的调用完毕而消失
D:初始化值不同
成员变量:有默认初始化值
局部变量:没有默认初始化值,必须定义,赋值,然后才能使用。

注意事项:
局部变量名称可以和成员变量名称一样,在方法中使用的时候,采用的是就近原则。
[color=blue][size=medium]break和continue区别:[/size][/color]
break是直接跳出循环
continue是跳出本次循环执行下一次循环

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

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

[color=blue][size=medium]封装[/size][/color]:简单理解目的就是为了,代码安全性,以及少写代码。也便于我们开发,不需要考虑具体实现的细节,只需要一个我们想要的对象就可以。封装隐藏一些代码内部实现细节,提供一些公用的方法方法。比如getter setter 方法,jdk中的类,方法,和框架都是封装实现的
[color=blue][size=medium]继承[/size][/color]:为了分类管理,父类一般拥有所有子类的一些共同属性,或者功能,只是子类中具体的实现方法可能不一样。满足is a 条件下使用继承,抽象方法(子类必须实现的方法),抽象类(不能实列话)
[color=blue][size=medium]多态[/size][/color]:同一个引用类型,使用不同的实例而执行不同操作,简单理解一个人会写代码,会演讲,等当他扮演不同的角色的时候,执行不同的操作。
[color=blue][size=medium]接口[/size][/color]:用来替代抽象类,接口可以多继承(抽象类只能单继承),所有方法都是抽象方法,不能被实例化,所有的成员变量都是静态常量
[color=blue][size=medium]包装类:[/size[/color]]主要目的是为了我们方面使用包装类里面的一些基本方法,常见的类型转换valueof(),自动装箱:jvm自动将一个基本类型,自动帮我们转换成一个引用类型,自动拆箱:将一个引用类型自动转换成基本类型。byte ---> Byte
short ---> Short
int ---> Integer
long ---> Long
float ---> Float
double ---> Double
boolean --->Boolean
char --->Character
在实际开发中定义类型,基本都用包装类。
[color=blue][size=large]基本类:[/size][/color]
statck 类堆栈得使用:常用方法:pop()移除堆栈顶部对象,并返回改对象。peek(),查看堆栈顶部的对象,但不从堆栈中移除它,search()表示以 1 为基数,距离堆栈顶部的距离,如果现实为-1表示此对象不再堆栈中。empty()判断是否为空。push(),将对象加入堆栈顶部。
字符String Stringbuffer(多线程安全)用于字符串拼装 StringBuidder(单线程)一般不用
日期Date ,日历Calender ,随机数,Random,数学类 math.Arrays类提供对数组的方法,排序,查询sort(a)数组名
[color=blue][size=medium]异常处理 :[/size][/color]声明(throws):抛出:直接在方法中调用:throw new Ex();
用try将可能会出异常的代码括起来,catch进行处理,catch可以有多个,finally 表示只要进入try,无论执行不执行catch都会执行finally里面的代码,即便含有return也会执行。
错误信息:error 程序员无论为力的错误,看JDK api
[color=blue]常见的异常:
ArithmeticException:算术错误情形,如以零作除数,ArrayIndexOutOfBoundsException:数组下标越界,NullPointerException:空指针 InputMismatchException:欲得到数据类型与实际输入类型不匹配 NumberFormatException:数字格式转换异常,如把"abc"转换成数字 IllegalArgumentException:方法接收到非法参数 ClassCastException:对象强制类型转换出错
ClassNotFoundException:类没找到。异常处理两种形式:可以抛出或者自己处理,一般选择自己处理,如果实在处理不了,才抛出 ExceptionInInitializerError - 如果该方法激发的初始化失败,LinkageError - 如果链接失败,IllegalAccessException - 如果该类或其 null 构造方法是不可访问的,InstantiationException - 如果此 Class 表示一个抽象类、接口、数组类、基本类型或 void; 或者该类没有 null 构造方法; 或者由于其他某种原因导致实例化失败。[/color]

[color=blue][size=large]集合框架JCF:[/size][/color]
[size=medium]接口结构:collection[/size] :
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)应用场景:排队,发送邮件,发送短信,工作。
[size=medium]Map键值对:[/size]
比较重要的方法,keySet(),values,实现类HashMap 线程不安全
允许空值,HashTable 线程安全不允许空值

[size=medium]集合迭代:[/size]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());
}

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

[size=large]IO 流:[/size]

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();}
}


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

上一篇: SpringSecurity (1) Quickstart

下一篇: