java基础相关属性简介

1.JAVA基础环境
1)Java开发环境

(1)JDK:Java开发工具包(JRE+编译运行的工具)
(2)JRE:Java开发环境(JVM+Java系统类库)
(3)JVM:Java虚拟机,运行class文件,有自己单独的硬件系统,可以运行在不同平台。

2)配置环境

JAVA_HOME:指定JDK的安装目录
classpath:表类的搜索路径
path:指向JDK下的bin目录。

3)垃圾回收机制

(1)没有垃圾回收机制的缺点
a.程序忘记及时回收利用内存,从而导致内存泄露,降低系统性能;
b.程序错误的回收程序核心类库的内存,从而导致系统崩溃;
c.对象所占的内存在程序结束之前一直被占用,被明确释放之前不能分配给其他对象。
(2)Java怎样实现垃圾回收
a.Java语言不需要直接控制内存回收,Java程序的内存分配和回收都是由JRE在后台自动进行的。
JRE会负责回收那些不再使用的内存。
b.通常JRE会提供一个后台线程来进行检测和控制,一般都是在CPU空间或内存不足时自动进行垃圾回收,
而程序员无法控制垃圾回收的时间和顺序。
(3) 垃圾回收的缺点
    垃圾回收的开销影响程序性能,Java虚拟机必须跟踪程序中的有用对象,才可以确定那些对象是无用的对象,
并最终释放这些无用的对象,这个过程需要花费处理器时间。

2.java特性简介
1)方法

(1)用于封装一段特定的逻辑功能;
(2)方法尽可能独立
(3) 方法可以反复被调用
(4)有利于代码的重用,便于团队开发。
方法的签名:方法名+参数列表
    一个类中,不可以有俩个方法的签名完全一致。

2)继承

(1)作用:提高代码的复用性,减少代码的重复
(2)super:指代当前对象的父类,继承不能继承父类中的private属性声明的方法。
    注:super()必须放在第一行,同样this()也必须放在第一行,  所以super()和this()不能同时使用。

3)内存管理

(1)堆:
a.存储所有使用new关键字所创建的对象(包括成员变量)
b.成员变量的生命周期:创建对象时存在在堆中,对象被回收一并消失
c.垃圾回收器(gc):不定时清理垃圾
    没有任何引用所指向的对象就是垃圾
    垃圾回收的过程是透明的,不一定是看到垃圾就立刻回收的
    调用System.gc()可以建议它尽快来回收垃圾
(2)栈
a.用于存储正在调用的方法中的所有局部变量
b.调用方法时,在栈中为该方法分配一块对应的栈帧,栈帧中存储该方法的参数、局部变量等数据,当该方法调用后,
其对应的栈帧将被消除,局部变量消失。

4)方法重写

(1)发生在父类、子类之中,签名相同,方法体不同
(2)重写方法被调用时,看对象的类型。
注:a. 子类的返回类型小于或等于父类的返回类型
   b.子类抛出的异常小于或等于父类抛出的异常
   c.子类的访问权限大于或等于父类的权限

5) 方法重载

(1)多个同名函数同时存在,具有不同的参数个数/类型。
型别作为重载函数的区分标准。
(2) 重载的时候,方法名要一样,但是参数类型和个数不一样,返回值类型可以相同也可以不相同。无法以返回型
别作为重载函数的区分标准。

6)接口与抽象类的区别

(1)接口中的方法都市抽象的,抽象类中不是;
(2)类可以实现很多个接口,但是只能继承一个抽象类;
 (3)抽象类可以在不提供接口方法实现的情况下实现接口。
 (4)Java接口中声明的变量默认都是final的。抽象类可以包含非final的变量。
 (5)Java接口中的成员函数默认是public的。抽象类的成员函数可以是private,protected或者是public。
 (6)接口是绝对抽象的,不可以被实例化。抽象类也不可以被实例化,但是,如果它包含main方法的话是可以被调用的。

7)static关键字

(1)设置变量,该变量的内存只被分配一次,因此其值在下次调用时仍维持上次的值;
(2)限制变量的作用域,在模块内的static全局变量可以被模块内所用函数访问,但不能被模块外其它函数访问;
(3)限制函数的作用域,在模块内的static函数只可被这一模块内的其它函数调用,这个函数的使用范围被限制在
声明它的模块内;
(4)在类中的static成员变量意味着它为该类的所有实例所共享,也就是说当某个类的实例修改了该静态成员变量,
其修改值为该类的其它所有实例所见;
(5)在类中的static成员函数属于整个类所拥有,这个函数不接收this指针,因而只能访问类的static成员变量。

8)final关键字

(1)修饰类    如果一个类被声明为final,意味着它不能再派生出新的子类,不能作为父类被继承。因此一个类不能
    既被声明为 abstract的,又被声明为final的。
(2)修饰方法和变量    将变量或方法声明为final,可以保证它们在使用中不被改变。被声明为final的变量必须在
声明时给定初值,而在以后的引用中只能读取,不可修改。被声明为final的方法也同样只能使用,不能重载.
(3)修饰对象句柄声明为final的对象句柄,声明时必须具体初始化到一个具体的对象,而且不能将句柄指向另外一个对象。
(4)用在局部内部类中    当一个局部内部类访问类的局部变量时,那么这个变量就要声明为final类型,否则不能通过编译。

9)内部类

(1)内部类的共性
   a.内部类仍然是一个独立的类,在编译之后内部类会被编译成独立的.class文件,但是前面冠以外部类的类名和$符号 。
   b. 内部类不能用普通的方式访问。内部类是外部类的一个成员,因此内部类可以自由地访问外部类的成员变量,
 无论是否是private的 。
   c. 内部类声明成静态的,就不能随便的访问外部类的成员变量了,此时内部类只能访问外部类的静态成员变量 。
(2)成员内部类:即普通定义在类中的内部类
(3)方法内部类(局部内部类)
 a.只能在定义该内部类的方法内实例化,不可以在此方法外对其实例化。
 b.方法内部类对象不能使用该内部类所在方法的非final局部变量。  
(4)匿名内部类
     匿名内部类就是没有名字的内部类。什么情况下需要使用匿名内部类?如果满足下面的一些条件,使用匿名内部类
 是比较合适的:
a.只用到类的一个实例 。
b.类在定义后马上用到。
c.类非常小(SUN推荐是在4行代码以下)
d.给类命名并不会导致你的代码更容易被理解。
在使用匿名内部类时,要记住以下几个原则:
a·匿名内部类不能有构造方法。
b·匿名内部类不能定义任何静态成员、静态方法。
c·匿名内部类不能是public,protected,private,static。
d·只能创建匿名内部类的一个实例。
e·一个匿名内部类一定是在new的后面,用其隐含实现一个接口或实现一个类。
f·因匿名内部类为局部内部类,所以局部内部类的所有限制都对其生效。
(5)静态嵌套类:静态内部类中可以定义静态或者非静态的成员。
静态的含义是该内部类可以像其他静态成员一样,没有外部类对象时,也能够访问它。静态嵌套类仅能访问外部类的
静态成员和方法。
(6)为什么需要内部类
a.每个内部类都能独立地继承自一个(接口的)实现,所以无论外围类是否已经继承了某个(接口的)实现,对
于内部类都没有影响。
b.如果没有内部类提供的可以继承多个具体的或抽象的类的能力,一些设计与编程问题就很难解决。从这个角度看,
内部类使得多重继承的解决方案变得完整。接口解决了部分问题,而内部类有效地实现了“多重继承”。

10)引用对象

(1)强引用(StrongReference):强引用是使用最普遍的引用。如果一个对象具有强引用,那垃圾回收器绝不会回收它
(2)软引用(SoftReference):如果一个对象只具有软引用,则内存空间足够,垃圾回收器就不会回收它;如果内存空
间不足了,就会回收这些对象的内存。
(3)弱引用(WeakReference):在垃圾回收器线程扫描它所管辖的内存区域的过程中,一旦发现了只具有弱引用的对象,
不管当前内存空间足够与否,都会回收它的内存。
(4)虚引用(PhantomReference):“虚引用”顾名思义,就是形同虚设,与其他几种引用都不同,虚引用并不会决定对象的

11)代码块

  (1)普通代码块:直接在一个方法中出现的{}就称为普通代码块
  (2)构造代码块:直接在类中定义的没有加static关键字的代码块{}称为构造代码块
  (3)静态代码块:使用static关键字声明的代码块称为静态代码块,静态块的主要目的是用来为静态属性初始化
注:静态块优先于主方法的执行,静态块优先于构造方法的执行,而且只执行一次! 
 (4)同步代码块:同步代码块主要出现在多线程中。 
注:a.一个类的代码块的执行顺序为:静态代码块,普通代码块,构造代码块
   b. 一个子类继承父类实例化:父类静态、子类静态、父类普通
 父类构造、子类普通、子类构造

11) 封装

    封装是把对象的属性和操作结合一个独立的整体,并尽可能隐藏对象  的内部细节。控制用户对类的修改和访问数据
的程度。适当的封装可以让程   序更容易理解和维护,也加强了程序的安全性。(用户对数据的访问只能通   过已定义的接口)

12)多态

    指允许不同类的对象对同一消息做出响应。即同一消息可以根据发送  对象的不同而采用不同的行为方式。
    实现动态的技术:动态绑定,是指在执行期间判断所引起对象的实际  类型,根据其实际类型调用相应的方法。
    多态的作用是为了消除类型之间的耦合.
    其中重载和重写就为多态的表现。
注:1.父类用子类实例化,该对象只能调用父类里拥有的方法和属性。

猜你喜欢

转载自blog.csdn.net/qq_36831305/article/details/82461748