java基础知识概要.docx
- 文档编号:9669186
- 上传时间:2023-02-05
- 格式:DOCX
- 页数:51
- 大小:2.55MB
java基础知识概要.docx
《java基础知识概要.docx》由会员分享,可在线阅读,更多相关《java基础知识概要.docx(51页珍藏版)》请在冰豆网上搜索。
java基础知识概要
1.Java概述
1.1.简单介绍
Java是一种广泛使用的网络编程语言 ,它是一种新的计算概念。
作为一种程序设计语言 ,它简单、面向对象、不依赖于机器的结构。
具有可移植性、安全性、并且提供了并发的机制、具有很高的性能,最大限度地利用了网络,,Java还提供了丰富的类库 ,使程序设计者可以很方便地建立自己的系统。
大部分的程序设计语言都必须先经过编译(compile)或解释的操作才能在计算机上运行,例如:
C/C++与Pascal等是属于编译式的语言,而Basic等属于解释式的语言。
然而JAVA程序比较特殊,它必须先经过编译,然后在利用解释的方式来运行。
通过编译器(compiler)可将Java程序转成与平台无关的机器码,Java称之为“字节玛”。
通过Java的解释器便可解释并运行Java的字节码。
任何一种可以运行Java程序的软件均可看成是Java的“虚拟机”,如浏览器与Java的开发工具等皆可视为一部虚拟机。
自然,我们可以把Java的字节码看成是虚拟机所运行是的机器码,因此只要有适当的虚拟机就可执行Java程序,这真正实现跨平台无论Windows、Unix、Linux都可运行相同的Java程序,让“编写一次,到处运行”的梦想成真。
Java和其它一些编程语言相比主要提出了面向对象的概念,产生了类的说法,并有了数据封装、抽象、多态、继承等一系列的思想概念。
1.2.java语言的特点
一种面向对象的语言
一种平台无关的语言,提供程序运行的解释环境
一种健壮的语言,吸收了C/C++语言的优点,但去除了其程序健壮性的部分(如:
指针、内存的申请与释放)
1.3.三大体系
J2SE:
桌面应用程序(如操作系统上的窗口、菜单),属于B/S架构(客户端也是要安装程序的,如大型网游),定义了整个java体系的类库、语法,J2EE、J2ME都依赖J2SE。
J2EE:
企业级应用(B/S),浏览器/服务器
J2ME:
手机、嵌入式设备解决方案
类似的手机上android系统(不是J2ME,但属于JAVA体系)
1.4.两种核心机制
1.4.1.jvm(java虚拟机)
Java虚拟机可以理解成一个字节码为机器指令的CPU
对于不同的运行平台,有不同的虚拟机。
Java虚拟机机制屏蔽了底层运行平台的差别,实现了“一次编译,随处运行”。
1.4.2.垃圾回收机制
内存中的对象不存在引用的对象会被垃圾回收器回收,从而主动的释放内存,避免内存溢出。
在C/C++等语言中,由程序员负责回收无用的内存
Java语言消除了程序员回收无用的内存空间的责任;他提供一种系统级线程跟踪内存存储空间的分配情况。
并在JVM的空闲时,检查并释放那些可被释放的的存储空间。
垃圾收集在Java程序运行过程中自动运行,程序员无法精确控制和干预。
2.Java开发准备
2.1.jdk
包括了Java运行环境,Java工具和Java基础的类库。
目前的版本是jdk1.6以上
目录结构
2.2.eclipse
开发工具
收费:
MyEclipse
免费:
Lombz等
2.3.环境变量
JAVA_HOME:
Tomcat、Eclipse以来的环境变量。
path:
windows系统执行命令时要搜寻的路径。
classpath:
java在编译和运行时需要找的class所在的路径
3.JAVA基础
Java源文件以“java”为扩展名。
源文件的基本组成部分是类(class)
一个源文件中最多只能有一个public类。
其它类得个数不限,如果源文件中包含一个public类,它必须按此类名命名。
Java语言严格区分大小写。
Java方法由一条条语句构成,每个语句以分号结束。
Java语言有三种注释方式:
//单行注释
/*
用于多行注释
*/
/**
*用于多行注释,且可以被doc工具解析。
*/
3.1.HelloWord的简单例子
3.2.Java基本语法
3.2.1.标示符
Java对各种变量、方法和类等要素命名时所使用的字符序列称之为标示符
Java标示符命名规则
以正常人的思维来书写标示符。
约定俗称:
Java标示符选取因注意“见名知意”且不能与java语言的关键字重名。
3.2.2.关键字
Java中一些赋予特定的含义,用作专门用途的字符串称之为关键字(keyword)
不需要记住,写代码的时候会有提示。
3.2.3.变量与常量
3.2.3.1.常量
是不同于变量的另一种类型,它的值是固定的。
Java的常量用字符串表示,区分为不同的数据类型。
◆如整型常量123
◆实型常量3.14
◆字符常量’a’
◆逻辑常量true,false
◆字符串常量”helloword”
如:
System.out.println(123)
注意:
区分字符常量和字符串常量
注意:
“常量”这个名词还会用在另外其他环境中表示值不可变的变量。
不可变的变量,给变量指定一个值之后,这个变量的值不可再发生改变。
◆参见final关键字
finalintintValue=100
3.2.3.2.变量
例如:
有这样一个小程序,弹出一个对话框,要求输入用户,用户输入完之后,后台给出提示“欢迎您,xxx”,那么这个xxx就是我们在对话框中输入的名字,考虑这个程序,我们应该知道有这样的一个东西保存了我们输入了用户,这样东西我们可以理解成变量。
ØJava变量是程序中最基本的存储单位,其要素包括变量名、变量类型和作用域。
ØJava中每一个变量都属于特定的数据类型,在使用前必须对其声明,声明格式为:
TypevarName[=value][{,varName[=value]}]
例如:
inta=200;
floatf=12.3f;
doublea,b,c=0.235,
Stringstr=“nihao”;
Ø从本质上讲,变量其实是内存中的一小块区域,使用变量名来访问这一小块区域,因此,每一个变量使用前必须先申请(声明),然后必须进行赋值(填充内容),然后才能使用。
程序是在内存中运行的,所以每个变量都有自己的名称(地址),变量的内容通过值来表示,内容的大小通过数据类型来决定。
Ø程序的执行过程:
程序在内存中的执行过程分四部分(不同的操作系统可能不一样)。
运行exe或者是运行java应用程序时或Tomcat,代码被load至内存中(存放在codesegment中),main(或Tomcat)方法开始执行,类变量(static)和字符串常量存放在datasegment中,局部变量存放在statckmemory(栈),new出来的东西放在heapmemory中
ØJava变量的分类
按被声明的位置划分:
✧成员变量:
方法外部、类的内部定义的变量
✧局部变量:
方法或语句内部定义的变量
按所属的数据类型划分:
✧基本数据类型的变量
✧引用数据类型的变量
3.2.4.Java的运算符
Ø按 照 运 算 符 功 能 来 分 ,基 本 的 运 算 符 有 下 面 几 类 :
Ø算 术 运 算 符 (+,-,*,/,%,++,--)
Ø关 系 运 算 符 (>,<,>=,<=,==,!
=
Ø 逻 辑 运 算 符 (!
&&,||)
Ø赋 值 运 算 符 (=,及 其 扩 展 赋 值 运 算 符 如 +=)
Ø字符串连接符:
Ø条 件 运 算 符 ( ?
:
)
例如:
inta=5,b=13,max;
max=(a>b)?
a:
b;
表达式是由常量、变量或是其他操作对象与操作符所组成的语句。
例如:
a+b-c/(d*3-9);
Ø自加自减运算符
注意:
++(—)
在前时先运算在取值
在后时先取值在运算
详见例子Test.java
3.2.5.数据类型
3.2.5.1.基本数据类型:
long长整数8字节
int整数4字节
short短整数2字节
byte位1字节
char字符1字节
boolean布尔1字节
只允许取值true或false,不可以以0或非0来替代true和false,这点和C语言不一样。
float浮点数4字节
double倍精数8字节
3.2.5.2.数据类型的转换
ØBoolean类型不可以转换为其他的数据类型
A、自动类型转换
整 型 、 实 型 、 字 符 型 数 据 可 以 混 合 运 算 。
运 算 中 ,不 同 类 型 的 数 据 先 转 化 为 同 一 类 型,然 后 进 行 运 算 。
转 换 从 低 级 到 高 级 ,如 下 图 :
转 换 规 则 为 :
✧容量小的类型自动转换容量大的数据类型;数据类型按容量大小排序为:
byte,short,char--->intlongfloatdouble
✧byte,short,char之间不会转换,他们三者在计算时首先会转换为int类型。
✧容量大的数据类型转换为容量小的数据类型时,要加上强制转换符,但可能造成精度降低或溢出;使用时要格外注意。
✧有多种类型的数据混合运算时,系统首先自动的将所有数据转换成容量最大的那一种数据类型,然后再计算。
① (byte或 short) op int→ int
② (byte或 short或 int) op long→ long
③ (byte或 short或 int或 long) op float→ float
④ (byte或 short或 int或 long或 float) op double→ double
⑤ char op int→ int
其 中 ,箭 头 左 边 表 示 参 与 运 算 的 数 据 类 型 ,op为 运 算 符 (如 加 、 减 、 乘 、 除 等 ),右 边 表 示转 换 成 的 进 行 运 算 的 数 据 类 型 。
B、强制类性转换
低级数据转换成高级数据 ,如 :
int i;
float b=(float)i; //把 int型 变 量 i强 制 转 换 为 float型
高级数据换成低级数据转 ,如 :
doubleb;
inta=(int)b;
这 种 使 用 可 能 会 导 致 溢 出 或 精 度 的 下 降 ,最 好 不 要 使 用。
ØString类型和其他类型的转换
详见例子StringConvert.java
3.3.编码格式
格式很重要
格式原则:
✧要让别人看得清楚
✧要让别人看得舒服
Ø大括号对齐
Ø遇到{缩进,Tab/Shift+Tab
Ø程序块之间加空行
Ø并排语句之间加空格
Ø运算符两侧加空格
Ø{前面有空格
Ø成对编程
3.4.编码规范
Ø类名的首字母大写
Ø变量名和方法名的首字母小写
Ø运用驼峰标示
3.5.流程控制
Java中 的 流 控 制 语 句 ,包 括
1.分 支 语 句 :
if-else, break, switch, return.
2.循 环 语 句 :
while, do-while, for, continue.
详见例子ForTest.java
3.例外处理语句 :
try-catch-finally, throw
注意switch语句:
4.面向对象
4.1.类和对象
4.2.类(对象)之间的关系
4.2.1.继承关系
4.2.2.实现关系
4.2.3.多态
4.2.4.为什么要使用对象
Ø面向对象的编程一一组对象互相配合通过沟通完成特定功能
✧所有的paradigm都是对现实问题的抽象
汇编是对机器语言的抽象
面向过程的语言是对汇编的抽象
对象更加符合对于现实问题的抽象
Ø对象都有对外服务的接口
通过继承可以复用
Ø对象隐藏内部服务的实现
通过聚合可以复用
Ø面向对象更加容易使我们达到这些年来苦苦追求的境界
Extensibiity.维护和替换更加方便、…
Ø组件一比对象更高的层次上的抽象(二进制级别)
EJB、WebService.CORBA.COM、.
4.3.类的声明及方法的定义
class类名称
{
//声明field
数据类型1field名称1;
数据类型2field名称2;
。
。
。
。
。
。
。
//定义method
返回值的数据类型method名称(参数1,参数2,。
。
。
。
。
。
)
{
程序语句;
return表达式;
}
}
例如:
我们可以定义如下的长方形类:
classCcfx//定义长方形类
{
intwidth;//声明数据成员width
intheitht;//声明数据成员heitht
intarea()//定义方法area(),用来计算面积
{
returnwidth*heitht;
}
intzhouchang()//定义方法zhouchang(),用来计算周长
{
return2*(width+heitht);
}
}
4.4.创建新的对象
publicclassapp7_1
{
publicstaticvoidmain(Stringargs[])
{
Ccfxcfx1;//声明新的对象
cfx1=newCcfx();//创建新的对象
cfx1.width=10;
cfx1.height=5;
System.out.println(“area”+cfx1.area());
System.out.println(“zhouchang”+cfx1.zhouchang());
}
}
输出为
area=50
zhouchang=30
4.4.1.对象的创建和使用
Ø必须便用new关键字创建对象。
Ø成员属性的访问格式:
实例对象.属性名
Ø成员方法的调用格式:
实例对象.方法名(参数1、参数2…….)
Ø同一类的每个对象有不同的成员变量存储空间。
Ø同一类的每个对象共享该类的方法。
4.5.方法method
我们在看一个关于圆的一个类
classCcircle
{
doublepi=3.14;
doubleradius;
voidshow_area()
{
System.out.println(“area=”+pi*radius*radius);
}
voidshow_all()
{
System.out.println(“radius”+radius);
Show_area();//在类的内部调用show_area方法
}
}
pubicclassapp7_6
{
publicstaticvoidmain(Stringargs[])
{
CcircleCir1=newCcircle();
Cir1.radius=2.0;
Cir1.show_all();
}
}
4.6.方法的参数传递
在app7_6类中调用了Ccircle类中的show_all()方法,可以看出没有参数的传递也没有返回值。
classCcircle
{
doublepi;
doubleradius;
doublegetradius()
{
returnradius;
}
voidsetCcircle(doubler,doublep)
{
pi=p;
radius=r;
}
}
pubicclassapp7_6
{
publicstaticvoidmain(Stringargs[]){
CcircleCir1=newCcircle();
Cir1.setCcircle(2.0,3.1416);
System.out.println(“radius=”+Cir1.getradius());
}
}
Øjava中进行函数调用中传递参数时,遵循值传递的原则:
基本类型传递的是该数据值本身。
引用类型传递的是对对象的引用,而不是对象本身。
4.7.公有成员与私有成员
classCcircle
{
doublepi=3.14;
doubleradius;
show_area()
{
System.out.println(“area=”+pi*radius*radius);
}
}
pubicclassapp7_6
{
publicstaticvoidmain(Stringargs[])
{
CcircleCir1=newCcircle();
Cir1.radius=-2.0;//在Ccircle外部可以直接改变radius的值
System.out.println(“bj=”+Cir1.getbj());
}
}
可以看出,虽然半径为负数,但面积还是误答误撞的算对了。
为了防止一些错误的发生,我们可以对成员属性做一定的限制如:
classCcircle
{
//创建私有成员属性,只能在其所在的类中才能修改
privatedoublepi=3.14;
privatedoubleradius;
show_area()
{
System.out.println(“area=”+pi*radius*radius);
}
publicvoidsetRadius(doubler)
{
if(r>0)
{
radius=r;
System.out.println(“radius=”+radius);
}
else
System.out.println(“inputerror”);
}
}
pubicclassapp7_6
{
publicstaticvoidmain(Stringargs[])
{
CcircleCir1=newCcircle();
//Cir1.radius=-2.0;报错
Cir1.setRadius(-2.0);
System.out.println(“bj=”+Cir1.getbj());
}
}
可以看到我们在Ccircle类中添加了一个公共(public)的成员方法setRadius来对半径赋值并进行校验。
4.8.引用
ØJava语言中除基本类型之外,变量类型都称之为引用类型。
ØJava中的对篆是通过引用对其操作的。
例如:
Ø如何在内存中区分类和对象
✧类是静态的概念,代码区
✧对象是new出来的,位于堆内存,类的每个成员变量在不同的对象中都有不同的值(除了静态变量)而方法只有一份。
堆内存比较大,对象动态分配的,运行期间分配的,
4.9.方法的重载
classCcircle
{
privateStringcolor;
privatedoublepi=3.14;
privatedoubleradius;
publicvoidsetCcircle(Stringcolor)
{
this.color=color;
}
publicvoidsetCcircle(doubler)
{
radius=r;
}
publicvoidsetCcircle(Stringstr,doubler)
{
color=str;
radius=r;
}
publicvoidshow()
{
System.out.println(“color”+color+”,radius=”+radius);
System.out.println(“area=”+pi*radius*radius);
}
}
publicclassapp8_1
{
publicstaticvoidmain(Stringargs[])
{
CcircleCir1=newCcircle();
Cir1.setCcircle(“Red”);
Cir1.setCcircle(2.0);
Cir1.show();
Cir1.setCcircle(“Bule”,4.0);
Cir1.show();
}
}
注意:
1、使用重载时,参数的个数或参数类型至少有一种不同
2、我们无法设计出参数个数和类型完全相同,但返回类型不同的重载。
例如:
publicvoidsetCircle(doublea);
publicintsetCircle(doubleb);
4.10.构造函数
在实例化类时被激发执行。
例如:
classCcircle
{
doublepi=3.14;
doubleradius;
publicCcircle(){}
publicCcircle(doubler)
{
radius=r;
}
voidshow_area()
{
System.out.println(“area=”+pi*radius*radius);
}
}
pubicclassapp7_6
{
publicstaticvoidmain(Stringargs[])
{
CcircleCir1=newCcircle(2.0);
CcircleCir2=newCcircle();
System.out.println(“area=”+Cir1.show_area()());
System.out.println(“area=”+Cir2.show_area()());
}
}
注意:
名称,无返回。
构造方法也可以重载
4.11.类变量和类方法
4.11.1.类变量与实例变量
在上例中针对Ccircle产生了两个实例对象Cir1,Cir2也即在内存中分别开了两个大小完全一样的单元分别寄存实例变量pi与radius的值.
类变量与实例变量同样都需要声明,不同的是再声明类变量时需在变量之前加上static,与实例变量不同的是声明的类变量被所有的实例对象所共享,所以在更改某个实例对象的“类变量“时其他的实例对象也随之改变。
我们可以用下面的例子来证实。
classCcircle
{
privatestaticintnum=0;
privatestaticdoublepi=3.14;
privatedoubleradius;
publicCcircle(doubler)
{
radius=r;
num++;
}
publicvoidcount()
{
System.out.println(num+”objectcreated”);
}
}
pubicclassapp7_6
{
publicstat
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- java 基础知识 概要