1.java基础架构
java的三种技术架构:
javaee:java的企业版开发平台,主要用于web开发;
javase:java的标准版开发平台,主要用于桌面程序的开发;
javame:java的电子开发平台,主要用于手机等程序的开发。
2.环境变量的配置
分为两种方法:
永久:java_home=%...;path=%java_home%in;
临时:set path=%path%;%java_homein
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_