java的学习笔记
判断java字符数组里下标i的数是否为字母:
Character.isLetter(数组名[i]);
判断java字符数组里下标i的数是否为数字:
Character.isDigit(数组名[i]);
异常断点(如空指针异常):
breakpoints->add java exception breakpoint 输入:NullPointerException
使用断点三点建议:
- 不要使用System.out.println作为调试工具
- 把所有涉及到的组件日志级别激活并使用
- 使用日志分析器来读取日志
java判等(equals 和 ‘==’):
equals:以字符串为例:用来比较两个字符串是否相等,相等返回true,不等返回false。不用考虑两个变量在堆中 存放的不同位置。
equals 不能用来判断数据类型的大小。
'==':如果是通过new了一个实例String对象,那么这两个实例对象在堆中的位置是不同的,所以这两个对象用‘==’比较的返回值是false。
java 正则表达式:
正则基本用法:\b 单词边界 \d 匹配一个数字字符 \w 表示字符类(包括大小写字母,数字) \s 空白字符 \单词大写与意义相反之
pattern类:
Pattern类用于创建一个正则表达式,也可以说创建一个匹配模式,它的构造方法是私有的,不可以直接创建,
但可以通过Pattern.complie(String regex)简单工厂方法创建一个正则表达式,
Pattern p=Pattern.compile("\\w+");
p.pattern();//返回 \w+
Pattern.split(CharSequence input)方法,用于分隔字符串,并返回一个String[]
Pattern p=Pattern.compile("\\d+");
String[] str=p.split("我的QQ是:456456我的电话是:0532214我的邮箱是:aaa@aaa.com");
结果:str[0]="我的QQ是:" str[1]="我的电话是:" str[2]="我的邮箱是:aaa@aaa.com"
Pattern.matcher(String regex,CharSequence input)是一个静态方法,用于快速匹配字符串,该方法适合用于只匹配一次,且匹配全部字符串.
Pattern.matches("\\d+","2223");//返回true
Pattern.matches("\\d+","2223aa");//返回false,需要匹配到所有字符串才能返回true,这里aa不能匹配到
Pattern.matches("\\d+","22bb23");//返回false,需要匹配到所有字符串才能返回true,这里bb不能匹配到
matches类:
Pattern.matcher(CharSequence input)返回一个Matcher对象.
Matcher类的构造方法也是私有的,不能随意创建,只能通过Pattern.matcher(CharSequence input)方法得到该类的实例.必须实例化
Pattern p=Pattern.compile("\\d+");
Matcher m=p.matcher("22bb23");
m.pattern();//返回p 也就是返回该Matcher对象是由哪个Pattern对象的创建的
Integer类中有静态方法toBinaryString(int i)方法,此方法返回int变量的二进制表示的字符串
同理,Integer类中也提供了toHexString(int i)方法和toOctalString(int i)方法来分别返回int变量的16进制表示和8进制表示字符串.
堆栈理解:
栈:一些基本类型的变量和对象的引用变量都是在函数的栈内存中分配
堆: 堆内存用于存放由new创建的对象和数组
按照编译原理的观点,程序运行时的内存分配有三种策略,分别是静态的,栈式的,·和堆式的.
从堆和栈的功能和作用来通俗的比较,堆主要用来存放对象的,栈主要是用来执行程序的.
从Java的这种分配机制来看,堆栈又可以这样理解:堆栈(Stack)是操作系统在建立某个进程时或者线程(在支持多线程的操作系统中是线程)
为这个线程建立的存储区域,该区域具有先进后出的特性。
栈的优势是,存取速度比堆要快,仅次于寄存器,栈数据可以共享。但缺点是,存在栈中的数据大小与生存期必须是确定的,
缺乏灵活性。栈中主要存放一些基本类型的变量(,int, short, long, byte, float, double, boolean, char)和对象句柄。
线程:
线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。线程自己基本上不拥有系统资源,
只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源。
什么时候使用多线程?
当多个任务可以并行执行时,可以为每个任务启动一个线程。
java io流的概念:
把流理解成一个中间介质,所谓的input和out是针对这个介质来说的,input是进入这个介质,out是这个介质输出。
流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象。即数据在两设备间的传输称为流,流的本质是数据传输,
根据数据传输特性将流抽象为各种类,方便更直观的进行数据操作。
举个例子:
比如你家的水龙头的管道就是一个流:流又分为输入输出流,输入流就是你家水龙头抽水库水的那头
(FileInputStream:将水抽到管道里面),输出流就是你家水龙头流到你家大水缸的那头(FileOutputStream:将水流到缸里)。
现在有个A.txt文件,你要读取里面的信息,就相当于水龙头抽水库水到管道(FileInputStream),然后读取完后写入到另一个文件
里面(FileOutputStream),就是相当于水龙头将抽到水后流到大水缸。
处理纯文本数据,就优先考虑使用字符流。 除此之外都使用字节流。
io流的分类:
根据处理数据类型的不同分为:字符流和字节流
根据数据流向不同分为:输入流和输出流
对io流详细理解:http://blog.csdn.net/zhaoyanjun6/article/details/54292148
集合类:
Collection接口是集合类的根接口,Java中没有提供这个接口的直接的实现类。但是却让其被继承产生了两个接口,就是Set和List。
Set中不能包含重复的元素。List是一个有序的集合,可以包含重复的元素,提供了按索引访问的方式。
Map是Java.util包中的另一个接口,它和Collection接口没有关系,是相互独立的,但是都属于集合类的一部分。Map包含了key-value对。
Map不能包含重复的key,但是可以包含相同的value。
Iterator,所有的集合类,都实现了Iterator接口,这是一个用于遍历集合中元素的接口,主要包含以下三种方法:
1.hasNext()是否还有下一个元素。
2.next()返回下一个元素。
3.remove()删除当前元素。
For-Each循环:
For-Each循环也叫增强型的for循环,或者叫foreach循环。
For-Each循环是JDK5.0的新特性(其他新特性比如泛型、自动装箱等)。
For-Each循环的加入简化了集合的遍历。
规则:
for(type element: array)
{
System.out.println(element);
}
pojo:
具有一部分getter/setter方法的那种类就可以称作POJO
JavaBean可分为两种:
一种是有用户界面(UI,User Interface)的JavaBean;
还有一种是没有用户界面,主要负责处理事务(如数据运算,操纵数据库)的JavaBean。
JSP通常访问的是后一种JavaBean。
Integer和int的区别:
1、Integer是int提供的封装类,而int是Java的基本数据类型;
2、Integer默认值是null,而int默认值是0;
3、声明为Integer的变量需要实例化,而声明为int的变量不需要实例化;
4、Integer是对象,用一个引用指向这个对象,而int是基本类型,直接存储数值。