java基础 1

来源:互联网 发布:福富软件 国企 编辑:程序博客网 时间:2024/05/21 15:47

1.编译及运行

$ javac HelloWorld.java$ java HelloWorldHello World

2.Java语言是多线程的:

在Java语言中,线程是一种特殊的对象,它必须由Thread类或其子(孙)类来创建。通常有两种方法来创建线程:其一,使用型构为Thread(Runnable)的构造子将一个实现了Runnable接口的对象包装成一个线程,其二,从Thread类派生出子类并重写run方法,使用该子类创建的对象即为线程。值得注意的是Thread类已经实现了Runnable接口,因此,任何一个线程均有它的run方法,而run方法中包含了线程所要运行的代码。线程的活动由一组方法来控制。Java语言支持多个线程的同时执行,并提供多线程之间的同步机制(关键字为synchronized)。

3. 关键字

  synchronized表示同一时间只能由一个线程访问的代码块
4.Java 源程序与编译型运行区别

如下图所示:

5.

常用的转义字符:

"\b" (退格)"\f" (换页)"\n" (换行)"\r" (回车)"\t" (水平制表符(到下一个tab位置))"\' " (单引号)"\" " (双引号) "\\" (反斜杠)
6.Java的八种基本类型:(按字节来分)

boolean   布尔型   1个字节 8bit(8位)

byte     字节类型   1个字节

char     字符类型   2个字节

short     短整型     2个字节

int          整型        4个字节

float      浮点型(单精度)4个字节

long      长整型      8个字节

double   双精度类型  8个字节

Java中默认的整数类型是int,如果要定义为long ,则要在数值后加上L或者l

默认的浮点型是双精度浮点,如果要定义float,则要在数值后面加上f或者F

一个字节等于8位,1个字节等于256个数。2^8

一个英文字母或者阿拉伯数字占一个字节

一个汉字占2个字节

7.类变量类型:

1.局部变量:在方法、构造方法、语句块中定义的变量。其声明和初始化在方法中实现,在方法结束后自动销毁

public class  ClassName{    public void printNumber(){        int a;    }    // 其他代码}

2.成员变量:定义在类中,方法体之外。变量在创建对象时实例化。成员变量可被类中的方法、构造方法以及特定类的语句块访问。

public class  ClassName{    int a;    public void printNumber(){        // 其他代码    }}

3.类变量:定义在类中,方法体之外,但必须要有 static 来声明变量类型。静态成员属于整个类,可通过对象名或类名来调用。

public class  ClassName{    static int a;    public void printNumber(){        // 其他代码    }}
8.

什么时候定义静态成员呢?或者说:定义成员时,到底需不需要被静态修饰呢?

成员分两种:

   1、成员变量。(数据共享时静态化)

      该成员变量的数据是否是所有对象都一样:

      如果是,那么该变量需要被静态修饰,因为是共享的数据。 

      如果不是,那么就说这是对象的特有数据,要存储到对象中。 

   2、成员函数。(方法中没有调用特有数据时就定义成静态)

      如果判断成员函数是否需要被静态修饰呢?

      只要参考,该函数内是否访问了对象中的特有数据:

      如果有访问特有数据,那方法不能被静态修饰。

      如果没有访问过特有数据,那么这个方法需要被静态修饰。

成员变量和静态变量的区别:

   1、成员变量所属于对象。所以也称为实例变量。

      静态变量所属于类。所以也称为类变量。

   2、成员变量存在于堆内存中。

      静态变量存在于方法区中。

   3、成员变量随着对象创建而存在。随着对象被回收而消失。

      静态变量随着类的加载而存在。随着类的消失而消失。

   4、成员变量只能被对象所调用 。

      静态变量可以被对象调用,也可以被类名调用。

   所以,成员变量可以称为对象的特有数据,静态变量称为对象的共享数据。


9.java因强制要求类名(唯一的public类)和文件名统一,因此在引用其它类时无需显式声明。在编译时,编译器会根据类名去寻找同名文件。


10自动类型转换

整型、实型(常量)、字符型数据可以混合运算。运算中,不同类型的数据先转化为同一类型,然后进行运算。

转换从低级到高级。

  ------------------------------------>  byte,short,char—> int —> long—> float —> double 

数据类型转换必须满足如下规则:

  • 1. 不能对boolean类型进行类型转换。

  • 2. 不能把对象类型转换成不相关类的对象。

  • 3. 在把容量大的类型转换为容量小的类型时必须使用强制类型转换。

  • 4. 转换过程中可能导致溢出或损失精度,例如:

11.Java 里使用 long 类型的数据一定要在数值后面加上 L,否则将作为整型解析:

12。

数据类型转换的补充

1、包装类过渡类型转换

一般情况下,我们首先声明一个变量,然后生成一个对应的包装类,就可以利用包装类的各种方法进行类型转换了。例如:

当希望把float型转换为double型时:

float f1=100.00f;Float F1=new Float(f1);double d1=F1.doubleValue();//F1.doubleValue()为Float类的返回double值型的方法

简单类型的变量转换为相应的包装类,可以利用包装类的构造函数。即:Boolean(boolean value)、Character(char value)、Integer(int value)、Long(long value)、Float(float value)、Double(double value)

而在各个包装类中,总有形为××Value()的方法,来得到其对应的简单类型数据。利用这种方法,也可以实现不同数值型变量间的转换,例如,对于一个双精度实型类,intValue()可以得到其对应的整型变量,而doubleValue()可以得到其对应的双精度实型变量。

2、字符串与其它类型间的转换

其它类型向字符串的转换

  •  调用类的串转换方法:X.toString();
  •  自动转换:X+"";
  •  使用String的方法:String.volueOf(X);

3、字符串作为值,向其它类型的转换

1、先转换成相应的封装器实例,再调用对应的方法转换成其它类型

例如,字符中"32.1"转换double型的值的格式为:new Float("32.1").doubleValue()。也可以用:Double.valueOf("32.1").doubleValue()

2、静态parseXXX方法

String s = "1";byte b = Byte.parseByte( s );short t = Short.parseShort( s );int i = Integer.parseInt( s );long l = Long.parseLong( s );Float f = Float.parseFloat( s );Double d = Double.parseDouble( s );

3、Character的getNumericValue(char ch)方法


13.

Java 常量

常量在程序运行时是不能被修改的。

在 Java 中使用 final 关键字来修饰常量,声明方式和变量类似:

final double PI = 3.1415927;
  • 14.

    volatile 修饰符

    volatile 修饰的成员变量在每次被线程访问时,都强制从共享内存中重新读取该成员变量的值。而且,当成员变量发生变化时,会强制线程将变化值回写到共享内存。这样在任何时刻,两个不同的线程总是看到某个成员变量的同一个值。

    一个 volatile 对象引用可能是 null。

    实例

    public class MyRunnable implements Runnable{ private volatile boolean active; public void run() { active = true; while (active) // 第一行 { // 代码 } } public void stop() { active = false; // 第二行 }}

    通常情况下,在一个线程调用 run() 方法(在 Runnable 开启的线程),在另一个线程调用 stop() 方法。 如果 第一行 中缓冲区的 active 值被使用,那么在 第二行 的 active 值为 false 时循环不会停止。

    但是以上代码中我们使用了 volatile 修饰 active,所以该循环会停止。

  • 15.

       Real

      zen***0522@163.com

       参考地址

    静态变量并不是说其就不能改变值,不能改变值的量叫常量。 其拥有的值是可变的 ,而且它会保持最新的值。说其静态,是因为它不会随着函数的调用和退出而发生变化。即上次调用函数的时候,如果我们给静态变量赋予某个值的话,下次函数调用时,这个值保持不变。

  • 16

       Real

      zen***0522@163.com

       参考地址

    静态变量并不是说其就不能改变值,不能改变值的量叫常量。 其拥有的值是可变的 ,而且它会保持最新的值。说其静态,是因为它不会随着函数的调用和退出而发生变化。即上次调用函数的时候,如果我们给静态变量赋予某个值的话,下次函数调用时,这个值保持不变。


    volatile

    volatile可以用在任何变量前面,但不能用于final变量前面,因为final型的变量是禁止修改的。

    使用的场景之一,单例模式中采用DCL双锁检测(double checked locking)机制,在多线程访问的情况下,可使用volatitle修改,保证多线程下的可见性。缺点是性能有损失,因此单线程情况下不必用此修饰符。

    class Singleton{    private volatile static Singleton instance = null;    private Singleton() {    }    public static Singleton getInstance() {        if(instance==null) {            synchronized (Singleton.class) {                if(instance==null)                    instance = new Singleton();            }        }        return instance;    }}
  •    Real

      zen***0522@163.com

       参考地址17静态变量并不是说其就不能改变值,不能改变值的量叫常量。 其拥有的值是可变的 ,而且它会保持最新的值。说其静态,是因为它不会随着函数的调用和退出而发生变化。即上次调用函数的时候,如果我们给静态变量赋予某个值的话,下次函数调用时,这个值保持不变。

    18.transient

    当对象被序列化时(写入字节序列到目标文件)时,transient阻止实例中那些用此关键字声明的变量持久化;当对象被反序列化时(从源文件读取字节序列进行重构),这样的实例变量值不会被持久化和恢复。

    import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.io.ObjectInputStream;import java.io.ObjectOutputStream;import java.io.Serializable;//定义一个需要序列化的类class People implements Serializable{    String name; //姓名    transient Integer age; //年龄    public People(String name,int age){        this.name = name;        this.age = age;    }    public String toString(){        return "姓名 = "+name+" ,年龄 = "+age;    }}public class TransientPeople {    public static void main(String[] args) throws FileNotFoundException, IOException, ClassNotFoundException {        People a = new People("李雷",30);        System.out.println(a); //打印对象的值        ObjectOutputStream os = new ObjectOutputStream(new FileOutputStream("d://people.txt"));        os.writeObject(a);//写入文件(序列化)        os.close();        ObjectInputStream is = new ObjectInputStream(new FileInputStream("d://people.txt"));        a = (People)is.readObject();//将文件数据转换为对象(反序列化)        System.out.println(a); // 年龄 数据未定义        is.close();    }}

    运行结果如下:

    姓名 = 李雷 ,年龄 = 30姓名 = 李雷 ,年龄 = null

   Real

  zen***0522@163.com

   参考地址

静态变量并不是说其就不能改变值,不能改变值的量叫常量。 其拥有的值是可变的 ,而且它会保持最新的值。说其静态,是因为它不会随着函数的调用和退出而发生变化。即上次调用函数的时候,如果我们给静态变量赋予某个值的话,下次函数调用时,这个值保持不变。

原创粉丝点击