java基础知识点总结

来源:互联网 发布:重庆药交所网络事业部 编辑:程序博客网 时间:2024/06/03 15:58

数据类型

java数据类型包括八种基本数据类型,其中有六种基本数据类型(4个整数型,2个浮点类型),一种字符类型,还有一种布尔类型。

注:低类型自动转换高类型,高类型转换低类型需强制类型转换

byte

  • byte数据类型是8位,有符号的。
  • 最小值-128,最大值127
  • 默认值是0

short

  • short数据类型是16位
  • 默认值是0

int

  • int数据类型是32位
  • 默认值是0
  • 一般的整型默认为int

long

  • long数据类型是64位
  • 默认0l
  • 主要使用在比较大整数的系统上

float

  • float数据类型是64位
  • 默认值0.0f
  • 不能表示比较精确的数字,如货币。

double

  • double是双精度,64位
  • 浮点数默认是double类型
  • 默认值0.0d
  • 同样不能表示精确的数字,如货币。

boolean

  • boolean是数据类型表示一位信息
  • 只有两个可取值 true false
  • 默认值是false

char

  • char类型是一个单一的16位Unicode自符
  • 最小值为‘\u0000’,即0
  • 最大值为'\uffff',即65535
  • char类型可以存放任何字符

引用类型

  • 在java中类似于c/c++里面的指针。引用类型指向一个对象,指向对象的变量称为引用变量,这些变量在声明时被指定为一个特定的类型,一旦声明,无法改变。
  • 对象、数组都是引用数据类型
  • 所有的引用数据类型默认值都是null
  • 一个引用变量可以引用任何一个与其兼容的类型

变量类型

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 Demo02 {
    // 这个变量对子类可见
    public String username;
    //这个变量只对本类可见
    private String password;
    public Demo02(String username) {
        this.username=username;
    }
    public void setPassword(String password) {
        this.password = password;
    }
    public void print(){
        System.out.println("username  : " + username );
        System.out.println("password :" + password);
     }
    public static void main(String[] args) {
        Demo02 demo=new Demo02("张三");
        demo.setPassword("1111");
        demo.print();
    }

}

类变量

  • 类变量也称为静态变量,在类中以static为关键字声明,但必须在构造方法和语句块之外。
  • 无论一个类创建了多少对象,类只拥有类变量的一份拷贝。
  • 静态变量除了被声明为常量外很少使用。常量是指声明为public/private,final和static类型的变量。初始化后不可改变。
  • 静态变量存储于静态存储区。经常被声明为常量,很少单独使用static声明变量。
  • 静态变量程序开始时创建,在程序结束时销毁。
  • 与实例变量具有相似的可见性,但为了对类的使用者可见,大多数静态类型变量声明为public类型。
  • 默认值和实例变量相似。静态变量可以在静态语句块中初始化。
  • 静态变量通过 类名.变量名 访问
  • 类变量被声明为public static final时变量名必须使用大写字母,如果不是public final 类型时,其命名方式与


实例

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类是不可改变的,所以一旦创建了String对象,那它的值就无法改变了,如果需要对字符串进行修改则需要选择使用StringBuffer或者StringBuilder。

关于String的面试问题

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类

当字符串进行修改时需要使用StringBuffer和StringBuilder类。

和String类不同的是StringBuffer和StringBuilder类的对象能够被多次修改,并且不产生新的对象。

StringBuilder类在java5中提出,它和StringBuffer之间的最大不同之处在于StringBuilder的方法不是线程安全的(不能同步访问)。

由于StringBuilder相较于StringBuffer有速度优势,所以多数情况下建议使用StringBuilder类。如果要求线程安全的情况下则必须使用StringBuffer类。

Java正则表达式

正则表达式定义了字符串的模式。

正则表达式可以用来搜索、编辑、处理文本。

正则表达式不仅限于某一种语言,但是在每种语言中有细微的差别。

正则表达是一个简单的例子,匹配  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.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异常处理

异常是指程序中的错误,但并不是所有的错误都是异常,并且错误有时候是可以避免的。

Exception类的层次

所有的异常类是从java.lang.Exception类继承的子类。

Exception类是Throwable类的子类,除了Exception类外,Throwable还有一个子类Error。

Java程序通常不捕获错误。错误一般发生严重故障时,他们在Java程序处理的范围之外。

Exception有两个子类:IOException和RuntimeException类

关于try..catch..finally的面试问题

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的区别

final用于声明属性,方法和类,分别表示属性不可变,方法不可覆盖,类不可继承。

finally是处理语句结构的一部分,表示总是执行。

finalize是Object的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,可以覆盖此方法提供的垃圾收集时的其他资源回收,例如关闭文件等。JVM不保证此方法总被调用。



























0 0
原创粉丝点击