您的位置:首页 > 编程语言 > Java开发

java基础知识总结

2016-03-23 17:11 281 查看
1.java基础架构

java的三种技术架构:

javaee:java的企业版开发平台,主要用于web开发;

javase:java的标准版开发平台,主要用于桌面程序的开发;

javame:java的电子开发平台,主要用于手机等程序的开发。

2.环境变量的配置

分为两种方法:

永久:java_home=%...;path=%java_home%\bin;

临时:set path=%path%;%java_home\bin

classpth用于配置运行时,jvm查找.class文件的路径

3.jdk and jre

jdk是java development kit,java开发原件,用于开发;

jre是java runtime environment,java运行环境,主要包括java运行的类库和jvm.

4.java命令

javac用于程序的编译,组织.java文件,生成.class文件。

java用于程序的运行,启动jvm执行.class文件。

5.jvm

jvm是java的虚拟机,是一个以软件模拟形成的具有所有硬件功能,有独立指令,堆栈和寄存器的独立操作系统。jvm用于运行所有的java程序。运行java程序就必须要有jvm,在真机上不能直接运行java程序,正是因为java程序要在jvm上运行,所以java程序可以不经过任何修改适用于任何平台(平台无关性)。(jre部分)

6.数据类型

基本数据类型:byte short int long float double char boolean

引用数据类型:数组/类/接口

级别高低:byte char short (平级)-->int-->float-->long-->double(由低到高)

自动类型的转换是有低级到高级,强制类型的转换,当把高级别的数据赋给低级的变量时。eg:int a=(int)1.02f

逻辑运算符:

|和||的区别:

|:两边都运算。

||:短路或,如果左边为true,那么右边不参与运算。

&和&&区别:

&:无论左边为什么,右边都参与运算。

&&:短路与,如果左边为false,那么右边不参与运算。

7.break和continue

break:作用于switch和循环语句,用于跳出或结束。

当循环嵌套时break只跳出当前所在的循环。要跳出嵌套中的外部循环,只要给循环器名字即可。

eg:

outer:

for(int i=0;i<3;i++){

for(int j=0;j<3;j++){

System.out.println(i+"---"+j);

//当j=2时结束outer标识符指定的循环

if(j==2){

break outer;

}

}

}

continue:只作用于循环结构,继续循环作用。

结束本次循环,继续下次循环,该语句单独存在时,下面不可以定义语句,执行不到。

与break类似,continue也可以紧跟一个标签,用于直接结束所标志的循环的档次循环,重新开始下一次循环(或者不加标签)。

return也可以结束一个循环,但是与continue和break不同的屙屎,return直接结束整个方法,不管这个return处于多少层循环之内。

8.java分了5个内存

寄存器、本地方法区、方法区、栈、堆

栈:存储的都是局部变量(函数中定义的局部变量,函数上的参数,语句中的变量);只要数据运算完成所在的区域结束,该数据就会被释放。

堆:用于存储数组和对象,即实体(封装多个数据)。

1.每个实体都有内存首地址。

2.堆内存中的变量都有默认初始值,数据类型不同,值也不同。

3.具有垃圾回收机制。

9.面向对象

过程和对象,过程其实就是函数,对象就是将函数等一些内容进行了封装。

类的实例化就是对象。

匿名对象:在定义对象时有两种方法:

1.A a=new A(); fangfaming(a); a是对象的名字

2.fangfaming(new A());//此时的new A()就是匿名对象

类中定义的都成为成员:成员变量和成员函数。

成员变量是事物的属性;成员函数就是事物的行为(方法)。

private int age;私有的访问权限最低,只有在本类中访问有效。

(私有仅仅是封装的一种体现形式而已)(类具有封装性)

私有成员:不能直接创建对象访问,只能通过本类对外提供的具体的访问方式(可以提供函数)来完成对私有的访问。

好处:可以在函数中加入逻辑判断等操作,对数据进行判断等操作。

总结:开发时,属性是用于存储数据的,直接访问容易出现安全隐患,所以类中属性通常私有化,并通过getXX()/setXX()对外提供公共的访问。

主类是程序执行的入口,保证被jvm调用。如果某个类不需要独立运行则不用加入主类。

成员变量和局部变量:

成员变量定义在类中;在这个类中有效;存储在堆内存中随对象的产生儿存在,消失而消失。

局部变量定义在方法、参数上,语句中;在自己所属的大括号中有效;存储在栈中,随所属区域的运行儿存在,结束而释放。

构造函数:用于给对象初始化,具有针对性。(如果类中没有定义,系统自动生成)

特点:名字和类相同;无需返回类型;没有具体的返回值。

用重载来进行同一个构造函数不同形式的定义。

构造函数和一般函数的不同:构造函数在对象的创建时被调用,且只执行一次,一般函数在对象被创建之后,需要调用时才执行。

关于类中的普通代码块、构造块和静态代码块的区别见链接:

(普通代码块:在方法或代码中出现的{},依顺序执行;构造块:在类中直接定义且没加static的{},每次创建对象时调用,早于构造方法;静态块:在类中加static的{},每个static代码块只执行一次,用于初始化类,在jvm加载时调用,所以早于主方法)http://www.cnblogs.com/sophine/p/3531282.html

百度来的java运行内存分配图1和自己理解的图2



ps图丑见谅!^_^



10.封装:

封装原则:将不需要对外提供的内容都隐藏起来,把属性隐藏起来,进队外提供公共方法。

this代表对象,是所在函数对所属对象的引用。

this. 调用的是成员属性或成员方法。

this()调用的是本类的构造方法。(必须定义在构造函数的第一行,用于初始化)

static用于修饰成员(变量或函数)

特点:

1.加static修饰,可以实现对象中的共性数据的对象共享;

  2.加static修饰的成员,可以直接被类名调用。

  3.静态随类的加载而加载所以优先于对象存在。

弊端:静态方法只能访问静态的成员变量,无法加载非静态的成员变量。(因为静态的方法和成员变量优先于对象而存在,而非静态的成员变量要等对象建立后才能存在)

静态方法中不能使用this super等关键字。this代表对象(但调用静态方法时对象还没有建立)

当子类和父类定义了同样的成员变量,那么在用子类实例化的对象调用的是子类中成员变量的值,要想调用父类中的成员变量的值可以用super.代表子类所属的父类中的内存空间的引用。
http://www.educity.cn/java/627401.html(介绍了堆栈和方法区)
java之所以占内存是因为,当java中用类或数组时,将实例化的对象赋给栈中的一个变量,当应用完毕后栈中的变量自动释放,但是堆中的实例虽然不能被使用,但仍占据着内存。知道某个不确定的时间被垃圾回收器释放。

11.继承

Java中不支持多继承的原因:

因为当一个类继承自多个父类时,若两个父类拥有相同名字的方法,那子类调用该功能时,到底要调用哪个呢。

构造函数;子类在实例化对象时,首先会调用父类的构造函数,因为在子类的构造函数中的第一行隐含了super()语句,这是对父类无参构造函数的引用。(子类继承父类会继承到父类的数据,所有要看父类如何对自己的数据进行初始化)

this() 和super(0都要定义在第一行:因为两者都是调用构造函数,进行初始化。两者只能出现一个。

12.覆盖

1.子类覆盖父类时,必须保证子类方法的权限大于等于父类犯法权限。

2.静态只能覆盖静态。要么都不静态。

13.关键字final

可以修饰类,方法和变量。

类不可以被继承,方法不可以被覆盖,变量成为一个常量,只能赋值一次(通常大写_链接)

14.抽象类

抽象类的特点;

1.抽象类可以定义抽象方法和非抽象方法,但是抽象的方法只能定义在抽象类中。抽象用abstract修饰

2.抽象方法制定一方法生命,不定义方法实现。

3.抽象类必须被继承了之后才能实例化(创建对象,且子类要覆盖抽象类的所有抽象方法)

4.abstract不能和private final static共存。

15.接口

用关键字interface定义。

接口中最常见的成员有全局常量和抽象方法。

注意:接口中的成员都有固定的修饰符。

成员变量:public static final

成员方法:public abstract

接口不可以直接实例化,接口的自雷必须实现了接口的所有抽象方法才能实例化。

一个类只能继承一个父类,但是一个类可以同时实现多个接口。

抽象类描述的一般是基本内容,接口定义的对象的扩展内容。

抽象类和接口的共性:都是不断向上抽取的结果。
http://wenku.baidu.com/link?url=qU9U9Q2a_-iiMwUlXJHPAUsUcV-GdXUPIFHgmOx5Gtj9xPpIEuD1zEdD1ICUT4zdkwXa3cZ6IP2WbNZm_lKD-bUu2q9MhyBE3MPPUM3CBX_
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: