Java 基础(一)

1. Java数据类型

Java 的数据类型分为两种:基本数据类型 和 引用类型。

 1)基本类型:Java有8中基本类型数据。分别是byte、short、char、int、long、float、double、boolean。

        整型:byte(最小的计算单元为字节), short(2个byte), int(4个字节), long(8个字节)

        字符型:char

        浮点型:float(4个字节), double(8个字节)

        布尔型:boolean

  byte=8bit  即8个比特位,简称8位。

2)引用类型:对象、数组都是引用数据类型。

2、 类的初始化 & 实例化顺序

父类静态代码块(按static声明的先后顺序)--》

子类静态代码块(按static声明的先后顺序)--》

父类实例代码块(按声明的先后顺序)--》

父类构造函数 --》

子类实例代码块(按声明的先后顺序)--》

子类构造函数。(类中“{}”修饰的代码算实例代码在static后面执行)。

3、 如何理解Java中的final、static、final static、static final?

1) final 是一个关键字。它可以修饰类、方法、变量。

修饰类:类不能被继承。

修饰方法:方法不能被重写。

修饰变量: fianl修饰的变量必须初始化值,赋值有两种方式:

         a.直接赋值。 b.全部在构造方法中赋初值。

如果修饰的成员变量是基本类型,则表示这个变量的值不能改变。

如果修饰的成员变量是一个引用类型,则是说这个引用的地址的值不能修改,但是这个引用所指向的对象里面的内容还是可以改变的变量。

2) static 的主要作用 是 在于创建独立于具体对象的域变量者方法,即使没有创建对象,也能使用属性和调用方法。

static可以修饰 成员变量、成员方法、内部类、代码块。

被static修饰的成员变量叫做静态变量,也叫做类变量,说明这个变量是属于这个类的,而不是属于是对象。

被static修饰的方法也叫做静态方法,因为对于静态方法来说是不属于任何实例对象的,那么就是说在静态方法内部是不能使用this的。

3) final static与static final没有区别,一般static写在前面。static final修饰的属性表示一旦给值,就不可修改,并且可以通过类名访问。

4、synchronized

      synchronized是Java中的关键字,是一种同步锁。可修饰 代码块、方法,被修饰的对象会被锁住,其它线程在访问的时候,会被阻塞。

      synchronized 和Lock区别

synchronized 和Lock区别

区别如下:

来源:

lock是一个接口,而synchronized是java的一个关键字,synchronized是内置的语言实现;

异常是否释放锁:

synchronized在发生异常时候会自动释放占有的锁,因此不会出现死锁;而lock发生异常时候,不会主动释放占有的锁,必须手动unlock来释放锁,可能引起死锁的发生。(所以最好将同步代码块用try catch包起来,finally中写入unlock,避免死锁的发生。)

是否响应中断

lock等待锁过程中可以用interrupt来中断等待,而synchronized只能等待锁的释放,不能响应中断;

是否知道获取锁

Lock可以通过trylock来知道有没有获取锁,而synchronized不能;

Lock可以提高多个线程进行读操作的效率。(可以通过readwritelock实现读写分离)

在性能上来说,如果竞争资源不激烈,两者的性能是差不多的,而当竞争资源非常激烈时(即有大量线程同时竞争),此时Lock的性能要远远优于synchronized。所以说,在具体使用时要根据适当情况选择。

synchronized使用Object对象本身的wait 、notify、notifyAll调度机制,而Lock可以使用Condition进行线程之间的调度,

//Condition定义了等待/通知两种类型的方法

Lock lock=new ReentrantLock();

Condition condition=lock.newCondition();

...condition.await();

...condition.signal();

condition.signalAll();

5、悲观锁、乐观锁

指的是心态。乐观锁与悲观锁并不是特指某个锁,而是在并发情况下保证数据完整性的不同策略。悲观锁指的就是我们平常使用的加锁机制,它假设我们总是处于最坏的情况下,如果不加锁数据完整性就会被破坏。而乐观锁指是一种基于冲突检测的方法,检测到冲突时操作就会失败

     悲观的认为所有的线程都会导致数据错误,每一个线程都需要排队等待。优点:数据一致性,缺点:效率低

     在并发数不是特别高的情况下,使用CAS的乐观锁在性能上要优于使用加锁方式的悲观锁。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • final、finally、finallize的区别;int和Integer的区别;数据类型;数据类型内存。 fi...
    isuntong阅读 516评论 0 0
  • Win7下如何打开DOS控制台? a:开始--所有程序--附件--命令提示符 b:开始--搜索程序和文件--cmd...
    逍遥叹6阅读 1,634评论 4 12
  • 前言 相信很多朋友在面试的时候都会问些java 数据结构 Android的相关知识。总要提前准备准备一些东西。多...
    WilliamIT阅读 1,041评论 0 8
  • 一:java概述:1,JDK:Java Development Kit,java的开发和运行环境,java的开发工...
    ZaneInTheSun阅读 2,719评论 0 11
  • 1:面向对象和面向过程的区别: 面向过程:   优点:性能比面向对象高,因为类调用时需要实例化,开销比较大,比较消...
    panda249阅读 393评论 0 0