java发展
- 1995年5月,sun发布了java语言。
- 1998年12月,发布了里程碑的版本1.2,也称为java 2。然后一分为3,标准版(J2SE),微缩版(J2ME),企业版(J2EE)
- 2004年10月,发布了1.5版本,也称为java5.0
- 2006年11月,java6.0发布,java2改为java。
- 2009年,甲骨文公司宣布收购Sun
- 2011年,Java7正式发布
- 2014年,甲骨文公司发布了Java8正式版
Java特点
- Java具有简单性、面向对象、分布式、健壮性、安全性、平台独立与可移植性、多线程、动态性等特点
- 一次编写,随处运行
- 无论在什么环境下编译的,可以在任何运行有java虚拟机的平台上运行java程序,不需要修改代码或重新编译。
Java虚拟机
- java虚拟机是软件模拟的计算机,可以在任何处理器上(无论是在计算机中还是在其它电子设备中)安全并且兼容的执行保存在.class文件中的字节码。java虚拟机的”机器码”保存在.class文件中,有时也可以称之为字节码文件。java程序的跨平台主要是指字节码文件可以在任何具有java虚拟机的计算机或者电子设备上运行,java虚拟机中的java解释器(java命令)负责将字节码文件解释成为特定的机器码进行运行。
Java无用内存自动回收机制
- 在java运行环境中,始终存在着一个系统级的线程,专门跟踪内存的使用情况,定期检测出不再使用的内存,并进行自动回收,避免了内存的泄露,也减轻了程序员的工作量。
- 强制的垃圾回收System.gc(),也只是发送请求,具体什么时候执行垃圾回收,还是系统垃圾回收器决定的。
触发垃圾回收的方法:
- 将无用对象赋值为null。
- 重新为引用变量赋值。比如: Person p = new Person(“aaa”); p = new
Person(“bbb”); 这样,new Person(“aaa”)这个对象就是垃圾了—-符合垃圾回收条件了。
java程序中也存在内存泄漏
Vector v = new Vector(10);
for (int i = 1; i < 100; i++) {
Object o = new Object();
v.add(o);
o = null; }
在这个例子中,我们循环申请Object对象,并将所申请的对象放入一个 Vector 中,如果我们仅仅释放引用本身,那么 Vector 仍然引用该对象,所以这个对象对 GC 来说是不可回收的。因此,如果对象加入到Vector 后,还必须从 Vector 中删除,最简单的方法就是将 Vector 对象设置为 null。
安装和配置环境
1、安装jdk
2、配置环境变量
配置java_home,是为了给电脑里其他需要调用java的程序使用,不是java开发必须的。
配置path,是java开发必须的配置,配置后可以在任意位置使用jdk。
第一个程序
public class HelloWorld{
public static void main(String[] args){
System.out.println(“hello,world”);
}
}
保存为 HelloWorld.java
执行
javac HelloWorld.java
java HelloWorld
基本规则:
- 1、java拼写大小写敏感
- 2、一个源文件中可以定义多个java类,但只能有一个类被定义为public类
- 3、若源文件中定义了public类,那文件名必须和public类同名
- 4、一个源文件包括多个类时,编译后会生成多个.class文件,每个文件名对应各个类名
Java基本属性
- java语言中,类的声明也叫类的定义
- 属性,是java中描述事物状态参数的部分-用单个数据就能描述清楚。java属性也称数据成员,实例变量或者域
- 方法,相当于其他语言的函数,是java语言中描述事物行为/功能的部分
构造方法,也称构造函数或者构造器,实际上也是java方法的一种,其功能是创建一个所属类的对象。若类中没有显示的定义构造方法,则会默认创建一个不带参数的构造方法。
public class Person{ //类定义
- public int age;// 属性
- public void setAge(int age){ //方法
- this.age = age;
- }
- public Person(String n){//构造方法
- name=n;
- }
- }
对象
- 对象的作用:封装信息和调用功能
- 对象通过包含属性(成员变量)实现信息封装,并对这些属性进行操作,即获取和修改属性值,称为“存/取”操作。
注释
- 1、// 从开始到本行结尾
- 2、/* 开头到 */结束,可以跨行
- 3、以/* 开头,/结束,可以跨行,使用javadoc工具可以把注释内容提取出来生成软件说明文档。
注:javadoc生成功能在“project-Generator Javadoc”中。
分隔符
- 分号; 是每句java语句结束的标记
- 逗号,当一个方法有多个参数时,用逗号分隔。
- 圆点. 用于访问对象成员(属性或方法)时标名调用或隶属关系,格式为“对象名.对象成员”
- 空格 用于分隔源代码中的不同成分。例如修饰符和数据类型之间,数据类型和变量名或方法名之间。
- 花括号{} 用于限定某一成分的范围,成对使用。花括号括起来的零至多条语句叫语句块。
标识符
- 例如:类名,方法名,变量名
- 标识符由java字母,下划线,美元符开头,后跟字母,下划线,美元符或数字。
- java字母可以理解为a-z,A-Z
- java是大小写敏感的。
关键字
- java中将一些特定的单词保留专门的用途
- 例如:class,abstract,assert,byte,case,if,import,public,for等等
- 总结:java关键字都是小写的,所以避免关键字可以把首字母大写,例如For,Public
数据类型
- 强类型语言(java)
- 例如 int i = 5;
- 弱类型语言(javascript)
- i = 5;
基本数据类型
- 1、整型(byte,short,int,long,直接以数字给出的整型常量默认为int)
- 2、浮点型(float,double)
- 3、字符型
常用的是英文半角的单引号括起来的字符,例如’a’,’字’,’ ‘(空格)
4、布尔型
- boolean类型数据有两种状态:true和 false
- java不允许使用0或非0的整数来作为boolean使用
引用数据类型
- 类
- 接口类型
- 数组类型
- 枚举类型
- 注解类型
Java数据类型
- 方法:相当于其他语言的函数,是用来完成相对独立的一段代码集合。
- 方法必须定义在类中。
- 形参,实参和返回值。
- 例如方法定义
- public String m(String name){
- return name;
- }
- 每个方法的结尾都是以return结尾的,void方法只有单独的return;有些void没有写return,其实系统编译器运行时会自动加上。
方法的调用
- 必须由所属类的对象以“对象名.方法名(实参列表)”方法来调用,实参与形参列表必须匹配。
- 调用有返回值的方法时,可以接收返回值,也可以不接收返回值,但调用无返回值的方法,则一定不能接收,否则报错。
变量
- 类中声明的属性也称成员变量,变量的范围是其所属对象的作用范围。
- java变量按所属的数据类型可以分为基本类型变量和引用类型变量;按照声明位置可以分为成员变量和局部变量。
- java类中声明的属性,称为成员变量或域
- 方法或语句块中声明的变量叫局部变量,只在所属方法或语句块中可用。
理解:
- java中方法参数传递方式是按值传递(即传递的都是值的副本)。 如果参数是基本类型,传递的是基本类型的字面量值的拷贝。
如果参数是引用类型,传递的是该参量所引用的对象在堆中地址值的拷贝 - 引用类型栈,堆。
- 例子:
- Person p = new Person();
- Person q=p;
关键字 this
- 表明了方法的当前对象
- 在java方法中,调用该方法所属对象的其他方法
java命名惯例
算术运算符
- +
- -
- *
- /
- %
关系运算符
- >
- <
- >=
- <=
- ==
- !=
其他运算符
- 1、条件运算符
- ? 例如:表达式1?表达式2:表达式3
- 2、自增,自减
- ++ 例如:i++,++i
- – 例如:i–, –i
- 3、字符串连接运算符
- 当+两边是数值型,则进行运算。当两边有一侧是字符串型,则会把另一侧也按字符串处理,结果是字符串连接。
分支结构
if-else的三种形式
1、if(<表达式>)
<语句>2、if(<表达式>)
<语句1> else <语句2>- 3、if(<表达式1>)
<语句1> else if(<表达式2>) <语句2> else if(<表达式3>) <语句3> else <语句4>
if语句的嵌套
if(<表达式1>)
if(<表达式2>)
<语句1>
else
<语句2>
else
<语句3>
switch
switch(<表达式>)
case<常量1>:[<语句1>]
case<常量2>:[<语句2>]
case<常量3>:[<语句3>]
default:[<语句n>]
switch的表达式类型有基本类型byte,short,char,int和引用类型枚举还有四种封装类型Character,Byte,Short,Integer.
语句一般用break跳出。
for
for(<初始化表达式>;<循环条件表达式>;<迭代表达式>)
<语句>
具体流程
1、执行初始化表达式
2、计算循环条件表达式的值,若为true,则执行第三步,否则结束循环
3、执行循环体语句
4、执行迭代表达式,然后进入到第2步继续执行。
while
while(<循环条件表达式>)
<语句>
do-while
do
<语句>
while(<循环条件表达式>)
for-each
for(<迭代变量声明>:<数组或集合>)
<语句>
break
终止所在的switch语句或循环语句的运行
continue
结束所在的循环语句本次运行,即跳过其后的循环体语句,开始下一次循环。
递归:
递归,就是在运行的过程中调用自己。
构成递归需具备的条件:
1. 子问题须与原始问题为同样的事,且更为简单;
2. 不能无限制地调用本身,须有个出口,化简为非递归状况处理。
递归示例
public int f(int n){
if(n==1){
return 1;
}
else{
int k = f(n-1);
return n*k;
}
}
数组声明
<类型> var[] 或 <类型>[] var
数组对象的创建
new <类型>[length]
例如:
int[] a;
a = new int[3];
int[] a={1,2,3};
a[0]=23;
数组的length属性
int[] a;
a = new int[3];
int arraylength = a.length;
数组的初始化
int a[]={2,5,4};
多维数组
int[][] a = new int[2][];
a[0]=new int[2];
a[1]=new int[4];
或者
int[][] a = {{1,2},{4,5,8}};
包
就是若干相关类型组成的一个分组
使用关键字package来定义包
例如:package pkg1;
导入包中的类
例如:import pkg1;
由于JDK中 java.lang 包中的类经常被用到,如String类,System类等,编译器自动为我们引入了,不必显示的引入。
继承
作用是在已有类型基础上继续扩充或改造,得到新的数据类型,以满足新的需求。
例如:
public class Student extends Person{}
Student在Person基础上增加属性了方法。
java只能单重继承,不能多重继承。
继承
作用是在已有类型基础上继续扩充或改造,得到新的数据类型,以满足新的需求。
例如:
public class Student extends Person{}
Student在Person基础上增加属性了方法。
java只能单重继承,不能多重继承。