java数据类型包括八种基本数据类型,其中有六种基本数据类型(4个整数型,2个浮点类型),一种字符类型,还有一种布尔类型。
注:低类型自动转换高类型,高类型转换低类型需强制类型转换
java中变量类型包括,局部变量,成员变量,类变量
此时的i就是局部变量
public class Demo {
public void test(){
int i=0;
i=i+1;
System.out.println(i);
}
/**
* 局部变量 i
* @param args
*/
public static void main(String[] args) {
Demo demo=new Demo();
demo.test();
}
}
}
public class Employee{
//salary是静态私有变量
private static double salary;
public static final String DEPARTMENT="开发人员";
public static void main(String []args){
salary=1000;
System.out.println(DEPARTMENT+"平均工资"+salary);
}
}
String类是不可改变的,所以一旦创建了String对象,那它的值就无法改变了,如果需要对字符串进行修改则需要选择使用StringBuffer或者StringBuilder。
String str=new String("abc");
创建了两个String 对象,可以把上面的代码分成String str、=、“abc”、new String()四部分看,String str只是定义了一个名为str的变量,并没有创建对象,=只是对str进行初始化,将某个对象的引用赋值给它,显然也没有创建对象,现在就剩下new String("abc"),即new String() 和 abc;
String str=“abc”;
创建了一个对象;
String str="ab"+"cd";
创建了三个对象;
在JVM中存在一个字符串池,其中保存着许多String对象,并且可以被共享使用,因此他提高了效率。由于String类是final的它的值一经创建不可改变,因此不用担心String对象共享带来的程序混乱。比如:String str="abc",这行代码被执行的时候java虚拟机会在字符串池中查找是否已经存在“abc”这个对象,它的判断依据是String类的equals(object obj)方法的返回值,如果有则创建新的对象,直接返回对象的引用,如果没有则先创建这个对象,然后把它加入到字符串池中,再将它返回。
对于引号包含文本创建String对象已提高效率这种方式效率最高。
当字符串进行修改时需要使用StringBuffer和StringBuilder类。
和String类不同的是StringBuffer和StringBuilder类的对象能够被多次修改,并且不产生新的对象。
StringBuilder类在java5中提出,它和StringBuffer之间的最大不同之处在于StringBuilder的方法不是线程安全的(不能同步访问)。
由于StringBuilder相较于StringBuffer有速度优势,所以多数情况下建议使用StringBuilder类。如果要求线程安全的情况下则必须使用StringBuffer类。
正则表达式定义了字符串的模式。
正则表达式可以用来搜索、编辑、处理文本。
正则表达式不仅限于某一种语言,但是在每种语言中有细微的差别。
正则表达是一个简单的例子,匹配 cat 出现的次数
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Demo03 {
private static final String REGEX="\\bcat\\b"; // \b匹配一个字边界,即字与空格间的位置。例如,"er\b"匹配"never"中的"er",但不匹配"verb"中的"er"。
private static final String INPUT="cat cat cattie cat";
public static void main(String[] args) {
Pattern p=Pattern.compile(REGEX);
Matcher m=p.matcher(INPUT);
int count=0;
while(m.find()){
count++;
}
System.out.println(count);
}
}
当一个对象被创建时候,构造方法用来初始化该对象,构造方法和它所在类的名字相同,但构造方法没有返回值。
通常会使用构造方法给一个类的实力变量赋值,或者执行其他必要的步骤来完成对象的创建。
不管你是否自定义构造方法,所有类都有构造方法,因为java自动提供一个默认构造方法,他把所有成员初始化为0。
一旦你定义自己的构造方法,默认构造方法就会失效。
Java.io包几乎包含了所有操作输入、输出需要的类。所有这些流代表了输入源和输出目标。
Java.io包中的流支持很多种格式,比如:基本类型、对象、本地化字符集等。
一个流可以理解为一个数据的序列。输入流表示从一个源读取数据,输出流表示向目标写数据。
Java为I/O提供了强大而灵活的支持,使其广泛的应用到网络编程和文件传输中。
FileInputStream
该流用于从文件读取数据,他的对象可以用关键字new创建。
有多种构造方法可以用来创建对象。
可以使用字符串类型的文件名来创建一个输入流对象来读文件。
InputStream f =new FileInputStream("d://aaa.txt");
也可以使用一个文件对象创建一个输入流对象读取文件,我们先使用File()方法来创建一个文件对象。
File f=new File("d://aaa.txt");
InputStream f=new FileInputStream(f);
异常是指程序中的错误,但并不是所有的错误都是异常,并且错误有时候是可以避免的。
所有的异常类是从java.lang.Exception类继承的子类。
Exception类是Throwable类的子类,除了Exception类外,Throwable还有一个子类Error。
Java程序通常不捕获错误。错误一般发生严重故障时,他们在Java程序处理的范围之外。
Exception有两个子类:IOException和RuntimeException类
public class Test{
public static void main(String []args){
Test t=new Test();
int a=t.get();
System.out.println(a);
}
public int get(){
try{return 1;}
finally{return 2;}
}
}
输出结果是2 注 finally代码块在try之后执行
final用于声明属性,方法和类,分别表示属性不可变,方法不可覆盖,类不可继承。
finally是处理语句结构的一部分,表示总是执行。
finalize是Object的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,可以覆盖此方法提供的垃圾收集时的其他资源回收,例如关闭文件等。JVM不保证此方法总被调用。
继承是java面向对象编程技术的一块基石,因为它允许创建分等级层次的类。继承可以理解为一个对象从另一个对象获取属性的过程。
在Java中,类的继承是单一继承,也就是说一个子类只能有一个父类。
重写是子类对父类的允许访问的方法的实现过程进行重新编写,返回值和形参都不能改变。
重写的好处在于子类可以根据需要,定义自己特定的行为。
也就是子类根据需要实现父类的方法。
重载是在一个类里面,方法名相同,而参数不同,返回类型可以相同,也可以不同。
每个重载的方法都必须有独一无二的参数类型列表。
只能重载构造函数。
多态是同一个行为具有多个不同的表现形式或者形态的能力。
多态存在的三个必要条件:
当使用多态方式调用方法时,首先检查父类中是否有该方法,如果没有,则编译错误,如果有,再去调用子类的同名方法,
多态的好处:可以使程序有良好的扩展,并可以对多有类的对象进行通用处理。
在面向对象的概念中,所有的对象都是通过类来描述的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描述一个具体的对象,这样的类就是抽象类。
抽象类除了不能实例化对象之外,类的其他功能依然存在,成员变量,成员方法和构造方法的访问形式和普通类一样。
由于抽象类不能实例化对象,所以抽象类必须被继承才能被使用。
如果你想设计一个类,该类包含一个特别的成员方法,该方法的具体实现由它的子类确定,那么你可以在父类中声明该方法为抽象方法。
abstract关键字同样可以用来声明抽象方法,抽象方法只包含一个方法名,而没有方法体。
抽象方法没有定义,方法名后面直接跟一个分号,而不是花括号。
声明抽象方法会造成以下两个结果:
public abstract class Demo04 {
private String name;
public abstract void get();
}
public class Demo05 extends Demo04{
public static void main(String[] args) {
// TODO Auto-generated method stub
Demo04 d=new Demo05();
d.get();
}
@Override
public void get() {
System.out.println("111111");
}
}
接口,在java编程语言中是一个抽象模型,是抽象方法的集合,接口通常以interface来声明。一个类通过继承接口的方式实现接口中的抽象方法。
接口并不是类,编写接口的方式和类很类似,但是他们属于不同的概念,类描述对象的属性和方法,接口则包含类要实现的方法。
除非实现接口的类是抽象类,否则该类要定义接口中所有的方法。
接口无法被实例化,但是可以被实现。一个类实现接口的类,必须实现接口中所有的方法,否则必须声明为抽象类,另外,在java中,接口类型可以用来声明一个变量,他们可以成为一个空指针,或者被绑定在一个以此接口实现的对象。
接口与类的相似点:
接口与类的区别
接口有以下特性