当前位置:网站首页 > Java基础 > 正文

java基础复习



static的作用

static表示静态修饰符,使用static修饰的变量,在Java中分配内存后一直存在,直到程序退出才释放空间。用static修饰的变量可以直接使用类名加“.”的方式访问。

final的作用

final表示不可改变的。如果修饰类,表示该类是一个最终类,不可被继承,默认其中的方法都为final方法。如果修饰方法,不能被子类覆盖,但是能被子类继承(父类中的private方法也是不能被子类覆盖的,默认也是final)。如果修饰成员变量,表示该变量是一个常量,只能被赋值一次,赋值之后不可以被改变。

overload和override的区别

内部类

每个内部类都能独立的继承一个接口,与外围类无关。
成员内部类,作为外部类的成员,可以使用外部类的所有成员和方法,但是外部类要先拥有成员内部类的实例对象,才可以访问内部类。成员内部类不能有任何static的变量或方法。只有先创建java基础复习外部类,才能在创建成员内部类。(new 外部类实例;外部类名.内部类名 内部类对象名 = 外部类实例.new 内部类类名)。
局部内部类,是定义在一个方法或者一个作用域里面的类,它的访问权限仅限于该方法或者该作用域内。
匿名内部类,没有访问修饰符;new 匿名内部类;这里举个简单例子。

 

再看一个例子

 

Java 二维数组

定义,type arrayName[][]或者type[][] arrayName。
静态初始化,int array[][] = {{1,2},{1,2,3},{1,2,3,4}};
在Java中,把二维数组看作是数组的数组,数组的空间是不连续的,所以不要求二维数组每一维大小相等。
动态初始化,可以直接给数组的每一维赋值同样的大小,也可以先确定数组最高维的大小,然后给每一维具体分配。int array[][] = new int[2][3];int array[][] = new int[2][],array[0] = new int[5],array[1]=new int[10]。

接口和抽象类

抽象类
可以含有具体的方法;
子类使用extends关键字来继承抽象类,如果子类不是抽象类,它需要实现父类中所有的抽象方法,或者继续声明为抽象类;
抽象类中也可以不含抽象方法;
抽象类中可以有成员变量;
抽象类可以有构造函数,只是不能直接用来创建抽象类的实例,在继承了抽象类的子类中可以通过super调用抽象类中的构造函数;
抽象类可以继承一个类实现多个接口。
接口
接口中可以且只能有 public static final修饰的常量。
子类需要使用implements实现接口,需要实现接口中声明的所有方法;
接口没有构造函数;
接口默认修饰符是public,不能改为其他修饰符。

反射机制

Java反射机制是在运行状态中,对于任意一个类,都能知道这个类的所有属性和方法,对于任意一个对象,都能调用他的任意方法和属性。这种动态获取的信息以及动态调用对象的方法的功能称为Java语言的反射机制。

通过反射获得类的包名和类名等类的相关信息。

 

通过Class类获得Test类的实例对象

 

通过反射,用Class创建类对象

 

java面向对象的三个特征和含义

继承:继承是从已有的类得到继承信息创建新类的过程。提供继承信息的类被称为父类(基类、超类);得到继承信息的类被称为子类(派生类)。继承让变化中的软件系统有了一定的可延续性,同时继承也是封装程序中可变因素的重要手段。
封装:在类中编写的方法是对实现细节的封装,编写一个类就是对数据和数据操作的封装。封装就是隐藏一切可隐藏的东西,只向外界提供最简单的接口。
多态:多态是指允许不同子类型的对象堆同一消息做出不同的响应。
编译时多态:是指根据参数列表不同来区分不同的函数,编译之后就会变成两个函数,主要指方法的重载。
运行时多态:(动态绑定),指在程序运行期间判断所引用对象的实际类型,根据实际类型判断并调用相应的方法和属性。
要实现多态需要做两件事:1. 方法重写(子类继承父类并重写父类中已有的或抽象的方法);2. 对象造型(用父类型引用引用子类型对象,这样同样的引用调用同样的方法就会根据子类对象的不同而表现出不同的行为)。

Java线程和进程

进程的基本状态及其转换

一个线程可以处于以下四种状态之一:


1.新建。当线程被创建时,它只会短暂的处于这种状态。此时它已经分配了必须的系统资源,并执行了初始化。此刻线程已经有资格获取CPU时间了,之后调度器把这个线程转变为可运行状态或者阻塞态。


2.就绪。在这种状态下,只要调度器把时间片分配给线程,线程就可以运行。也就是说,在任意时刻,线程可以运行或者不运行。只要调度器能分配时间片给线程,他就可以运行,这不同于死亡和阻塞状态。


3.阻塞。线程能够运行,但是有个条件阻止它的运行。当线程处于阻塞状态时,调度器会忽略线程,不会分配给线程CPU时间。直到线程重新进入就绪态,它才有可能执行操作。


4.死亡。处于死亡或者终止状态的线程不再是可调度的。并且再也不会得到CPU时间。任务死亡的通常方式是从run()方法返回,但是任务线程还可以被中断。


Java中使用synchronized关键字来实现同步。


run()和start()

系统通过调用start()方法来启动一个线程,此时该线程处于就绪态。直接调用run()方法,这会被当成一个普通的函数调用,程序中仍然只有主线程一个线程。


wait()和notify()

在synchronized代码被执行期间,线程可以调用对象的wait()方法,释放对象锁,进入等待状态,直到其他线程调用此对象的 notify()方法或 notifyAll()方法。notify()唤醒等待队列的第一个线程,并运行它去获取锁。notifyAll(),唤醒等待队列的全部线程,让他们去竞争锁。


Java 5加入了Lock接口以及他的一个实现类ReentrantLock(重入锁)。lock()方法。以阻塞的方式获取锁。如果获得到锁,立即返回;如果别的线程持有锁,则当前线程等待,直到获取锁之后返回。tryLock(),非阻塞形式获取锁,如果获取到返回true,没有获取到,返回false。


sleep()和wait()

sleep不会释放锁,wait会释放锁。


join

join方法用线程对象调用,如果在一个线程A中调用另一个线程B的join方法,线程A将会等待线程B执行完毕后再执行。


this和super

this用来指向当前实例的对象,用来区分成员变量和方法的形参,如果方法的形参和成员变量的名字相同的时候,方法的形参会覆盖成员变量。


super用来访问父类的方法或成员变量。


volatile

使用这个修饰符修饰的变量,程序在读取它的值时直接从内存中获取,一定是最新值。而不是从缓存中获取。

其他

  • 上一篇: java基础 chm
  • 下一篇: 基础java与企业java
  • 版权声明


    相关文章:

  • java基础 chm2025-04-10 12:58:00
  • java基础pdf文件2025-04-10 12:58:00
  • 零基础java培训学费2025-04-10 12:58:00
  • java 基础io2025-04-10 12:58:00
  • java推荐基础书籍2025-04-10 12:58:00
  • 基础java与企业java2025-04-10 12:58:00
  • java移动开发基础2025-04-10 12:58:00
  • java cgi基础2025-04-10 12:58:00
  • 金狐零基础java2025-04-10 12:58:00
  • java基础递归2025-04-10 12:58:00