null课时一
Java开发环境和程序设计初步
2012-2-27课时一
Java开发环境和程序设计初步
2012-2-27讲授:夏冰冰
Phone:13583118912
E-mail:jennifer_xiababy@yahoo.com.cn
办公室:实验楼421主要内容主要内容1.1 Java语言发展历史
1.2 Java语言的特点
1.3 Java的工作原理
1.4 Java运行环境JDK
1.5 构建Java程序
1.6 开发工具1.人物1.人物James Gosling
-Java之父
-戴着眼睛的蜘蛛
-Sun副总裁
Bill Joy -Sun创始人之一
-软件业的爱迪生
-2003年离开Sun2.关键词2.关键词绿色
计划
项目进度计划表范例计划下载计划下载计划下载课程教学计划下载
Green
与平台无关
Java最初的名字:橡树Oak
一杯飘香的咖啡Java
网络与Java现在请观看java+youSun(Stanford University Network)
原硅谷总部图片
现成为Facebook总部Sun(Stanford University Network)
原硅谷总部图片
现成为Facebook总部Sun原硅谷总部图片Sun原硅谷总部图片Sun原硅谷总部图片Sun原硅谷总部图片Sun原硅谷总部图片Sun原硅谷总部图片Sun原硅谷总部图片Sun原硅谷总部图片Sun公司创立之初就提出:
The Network is the Computer
网络就是计算机。Sun公司创立之初就提出:
The Network is the Computer
网络就是计算机。Sun董事会主席:Scott McNealy
Sun CEO(任期1982-2006)Sun董事会主席:Scott McNealy
Sun CEO(任期1982-2006)Scott McNealyScott McNealySun公司CEO:
Joanthan Schwartz
2006-2010任职Sun公司CEO:
Joanthan Schwartz
2006-2010任职Joanthan SchwartzJoanthan SchwartzSun和Oracle介绍Sun和Oracle介绍Sun和Oracle
2009.4 Oracle提出74亿美元收购Sun
2010.1 欧盟批准Oracle收购Sun Sun和Oracle
2009.4 Oracle提出74亿美元收购Sun
2010.1 欧盟批准Oracle收购Sun Sun沉浮史
http://job.51cto.com/art/200904/121500.htmSun沉浮史
http://job.51cto.com/art/200904/121500.htmIBM、Sun、Oracle三家公司比较IBM、Sun、Oracle三家公司比较Oracle主页
www.oracle.comOracle主页
www.oracle.comOracle目标Oracle目标Jonathan宣布辞职Jonathan宣布辞职www.java.comwww.java.comJava应用:Google地图Java应用:Google地图Java应用:小游戏Java应用:小游戏3.Java开发平台3.Java开发平台J2SE( Java 2 Standard Edition),Java的
标准
excel标准偏差excel标准偏差函数exl标准差函数国标检验抽样标准表免费下载红头文件格式标准下载
版,针对普通PC应用。
J2EE( Java 2 Enterprise Edition),Java的企业版,针对企业网应用。
J2ME(Java 2 Micro Edition),针对嵌入式设备和消费类电器,如手机等。 1.2 Java的特点1.2 Java的特点Java是一种具有简单、面向对象、分布式、解释性、
健壮性、安全、平台无关、可移植、高性能、多线程
和动态执行等特性的语言。特点特点简单并面向对象
鲁棒并安全
结构中立并可以移植
高性能
解释执行、多线程并且是动态的解释性解释性Java语言分两步执行
1)由编译器将用户程序编译成字节码
2)由Java虚拟机(Java Virtual Machine)解释执行字节码
可以在不同的硬件平台上实现不同的Java虚拟机,保
证了Java语言的平台无关性和可移植性。1.3 Java的工作原理1.3 Java的工作原理Java虚拟机Java虚拟机软件模拟的计算机
执行字节码文件(*.class)
不同的软硬件平台需要对Java虚拟机做专门的实现Java程序执行过程1Java程序执行过程1Java程序执行过程2Java程序执行过程2Java程序执行过程2Java程序执行过程21.4 Java运行环境JDK1.4 Java运行环境JDKJDK:Java开发工具包Java Development Kit
——面向开发人员
JRE:Java运行时环境Java Runtime Environment
——面向Java程序的使用者第一步:http://www.oracle.com/cn/index.html第一步:http://www.oracle.com/cn/index.html第二步:http://www.oracle.com/cn/technologies/java/index.html第二步:http://www.oracle.com/cn/technologies/java/index.html第三步:http://www.oracle.com/technetwork/indexes/downloads/index.html?ssSourceSiteId=ocomcn第三步:http://www.oracle.com/technetwork/indexes/downloads/index.html?ssSourceSiteId=ocomcn第四步:http://www.oracle.com/technetwork/java/javase/downloads/index.html第四步:http://www.oracle.com/technetwork/java/javase/downloads/index.html第五步:http://www.oracle.com/technetwork/java/javase/downloads/jdk-7u3-download-1501626.html第五步:http://www.oracle.com/technetwork/java/javase/downloads/jdk-7u3-download-1501626.htmlJDK安装及环境设置JDK安装及环境设置对于WIN 2000\WIN XP系统,具体步骤如下:
控制面板/系统/高级/环境变量,
在系统变量中双击path选项,
在对话框中“变量值”中插入
C:\Program Files\Java\jdk1.7.0_03\bin1.5 构建Java程序1.5 构建Java程序Java程序分成两大类:
Java应用程序Application
控制台程序:在DOS窗口运行,程序入口是main()方法
窗口程序:有图形界面,程序入口是main()方法
Java小应用程序Applet:嵌入在HTML文件中,在浏览器中运行,没有main()方法Hello World程序Hello World程序//Example 1
//This is a simple instance of java application
public class HelloWorld{
public static void main(String args[]){
System.out.println(“Hello World!”);
}
}程序分析程序分析类定义
Java程序的基本组成部分是类(class),如本例中的HelloWorld类。
main()方法
Java Application程序的入口是main()方法。它有固定的书写格式:
public static void main(String args[ ]){
……
}程序分析程序分析程序内容
由方法体实现程序要完成的功能,方法的实现由一个个语句组成
注释
与C++相同,一行中‘//’后的内容为注释,‘/*’和‘*/’中的内容也是注释Java程序的编译运行Java程序的编译运行javac HelloWorld.java
源文件名为HelloWorld.java,注意:文件名必须与公共类名相同;由javac编译器编译源程序,产生字节码文件(HelloWorld.class)
java HelloWorld
由java解释器解释执行
1.6 开发工具
Eclipse MyEclipse1.6 开发工具
Eclipse MyEclipseEclipse——一个集成开发环境IDE(Integrated Developing Environment ),IBM公司,开源。
目前主要用作Java IDE。
MyEclipse——Genuitec公司,Eclipse的插件,不免费。null第2章 Java程序设计基础
第2章 Java程序设计基础
2.1.1 标识符与关键字2.1.1 标识符与关键字Java的符号集采用Unicode字符集——一个字符占两个字节,共有65535个字符,包含中文、英文、日文、朝鲜文及其他语言的文字标识符标识符为变量、类或方法等起的一个名称
以字母、下划线或$符号开头
由字母、下划线、$符号和数字组成
区分大小写,没有最大长度限制,不能使用关键字(见附录B)
示例:identifier、userName、user_name、_sys_varl、$change、程序名下列标识符哪些是合法的?下列标识符哪些是合法的?123、_name、class、1first
_cat、5books、+static、-3.141592.1.2 基本数据类型2.1.2 基本数据类型Java编程语言定义了8种基本数据类型
整数——byte、short、int和long
浮点——double和float
布尔——boolean
字符——char(1)整数类型——byte(8位)、short(16位)、int(32位)和long(64位)(1)整数类型——byte(8位)、short(16位)、int(32位)和long(64位)三种形式使用——十进制、八进制或十六进制
2 十进制整数2
077 以0开头表示八进制值
0xBAAC 以0x开头表示十六进制值
默认是int类型
使用字母L或l定义long类型补充例1补充例1public class IntTest {
public static void main (String argsp[]) {
byte b1=0x12;
byte b2=0x123;
short s1=0x1234;
short s2=0x12345;
int i1=0x12345678;
int i2=0x123456789;
int i3=0x123456789L;
}
}
思考:编译时会出现怎样的结果?补充例1说明补充例1说明第一遍编译时,语句
int i2=0x123456789;
提示“过大的整数”错误,把该语句加注释或删除后,
进行第二遍编译,对于语句
byte b2=0x123;
short s2=0x12345;
int i3=0x123456789L;
都出现了错误提示“可能损失精度”。(2)浮点类型
——float(32位)和double(64位)(2)浮点类型
——float(32位)和double(64位)浮点数包括:
E或e(加指数值)——科学计数法形式
F或f(float)
D或d(double)
如:3.14 一个简单的浮点值(一个double类型)
6.02E23 一个大浮点值
2.718F 一个简单的float值
123.4E+306D 一个带有D(多余)的大的double值
默认类型是double(3)布尔类型——boolean(3)布尔类型——booleanboolean数据类型有两个值:true和false
例如:语句
boolean truth = true;
声明变量truth为boolean类型,并将其赋值为true。
注意:不能写为boolean truth=1;(4)字符类型——char与String(4)字符类型——char与Stringchar
代表16位的Unicode字符
字符必须在单引号(‘’)内
使用:
‘a’ 字母a
‘\t’ 制表符
‘\u????’ 特定的Unicode字符,????代表四位十六进制数(4)字符类型——char与String(4)字符类型——char与Stringchar ch=‘A’;
//声明并初始化一个char变量
char ch1,ch2;
//声明两个char变量补充例2补充例2public class CharTest {
public static void main(String argsp[]) {
char ch1='A';
char ch2='\u0041';
char ch3=0X41;
char ch4=65;
int x='A';
System.out.println(ch1);
System.out.println(ch2);
System.out.println(ch3);
System.out.println(ch4);
System.out.println(x);
}
}思考:字符常量的不同
表示方式。(4)字符类型——char与String(4)字符类型——char与StringString
不是基本数据类型,而是一个类
字符在双引号(“”)内 “Hello,World!”
使用如下:
String str1,str2;
//声明两个String变量
String greeting=“Good Morning!!\n”;
String errorMessage=“Record Not Found!”;
//声明两个String变量并且初始化它们补充例3补充例3public class Assign{
public static void main(String args[]){
int x,y;
float z=3.414f;
double w=3.1415;
boolean truth=true;
char c;
String str;
String str1=“bye”;
c=‘A’;
str=“Hi out there!”;
x=6;
y=1000;
}
} y=3.1415926;
w=175,000;
truth=1;
z=3.14156;为什么不合法2.1.3 变量2.1.3 变量变量:
声明变量必须在类的定义内,可以在方法内或者方法外
在方法内定义的变量称为局部变量,需要显式的对其初始化
成员变量和类变量自动初始化
数字型初始值为0
对象型初始值为null2.1.3 常量2.1.3 常量常量:在程序运行中其值保持不变的量。
文字常量:在程序中直接写出量值的常量,
如:37,2.1,true等。
符号常量:用标识符代表的常量,
如:
final int x=100;补充:基本数据类型间的转换补充:基本数据类型间的转换一般形式:(类型)(表达式)
作用:将表达式的结果强制转换为另一种类型
低存储位可以自动转换为高存储位数据类型
高存储位则必须通过强制类型转换才能转换为低存储位数据类型补充例4补充例4public class IntToLong {
public static void main (String argsp[]) {
int x=5;
long y,z;
y=10L;
z=x+y;
System.out.println(x);
System.out.println(y);
System.out.println(z);
}
}补充例5补充例5public class LongToInt {
public static void main (String argsp[]) {
int x;
long y,z;
y=10L;
z=20L;
x=y+z; //可改为x=(int)(y+z);
System.out.println(x);
System.out.println(y);
System.out.println(z);
}
} 4.3.4 封装类(Wrapper类)4.3.4 封装类(Wrapper类)Wrapper类Wrapper类通过将值传递给相应的构造器,可以构建Wrapper类对象
例如:
int pInt=500;
Integer wInt=new Integer(pInt);
int p2=wInt.intValue();Wrapper类Wrapper类当转换基本数据类型时Wrapper类很有用,因为可以使用很多Wrapper类方法(查API)。
例如:
String str=“365”;
int x=Integer.parseInt(str);
或
int x=Integer.valueOf(str).intValue();2.1.4 运算符与表达式
(与C和C++重复的不再介绍,
请大家自学)2.1.4 运算符与表达式
(与C和C++重复的不再介绍,
请大家自学)1.逻辑运算符1.逻辑运算符逻辑运算符是
! 一元逻辑非
& 二元逻辑与
^ 二元逻辑异或
| 二元逻辑或
短路逻辑运算符是
&& 二元条件逻辑与
|| 二元条件逻辑或逻辑运算符逻辑运算符 0值不能自动解释为false,
非0值不能自动解释为true。
如:
int i=1;
if(i) //generates a compile error
if(i!=0) //correct逻辑运算符逻辑运算符短路逻辑操作符
MyDate d;
if((d!=null)&&(d.day>31)){
//do something with d
}
当第一个子表达式(d!=null)为假时,第二个子表达
式就被跳过,全部表达式总是假的。
同样,使用||操作符,如果第一个表达式返回为真,
则不必计算第二个表达式,因为整个表达式必定为真。2.字符串连接运算符2.字符串连接运算符+操作符
执行String连接
产生新的String
一个参数必须是String对象
非字符串对象会自动转换为String对象,如要转换为等价的字符串时,使用toString()成员方法字符串运算符字符串运算符String first=“James”,last=“Gosling”;
String name=first+last;
结果:name的值是JamesGosling3.点运算符3.点运算符“点”符号:<对象>.<成员>
用于访问对象成员,包括属性和方法。说明说明点的操作可使您访问类的非私有属性和方法
在方法的定义内,访问本地成员不需要使用点符号4.对象运算符4.对象运算符A instanceof B
用来判定对象A是否为类B的对象上机作业
(上机调试完后写在作业本上)上机作业
(上机调试完后写在作业本上)1.设定一个变量代表月份,根据变量值输出该月份代表的季节
(春季、夏季、秋季、冬季)。
提示:使用switch语句
2.比较两个数的大小,按照从小到大的顺序输出。
3. 输出10-50之间所有能被3整除的数。
选做题:67页 17题补充:输入输出语句介绍补充:输入输出语句介绍import javax.swing.*;
public class iow1{
public static void main(String[] args){
String input;
int result;
input=JOptionPane.showInputDialog(“请输入年龄”); //接收输入
result=Integer.parseInt(input); //类型转换
JOptionPane.showMessageDialog(null, result); //输出
}
}2.3 数组2.3 数组2.3.1 一维数组2.3.1 一维数组1.一维数组的声明1.一维数组的声明数组一般用来组合相同类型的对象。
数组允许通过公共的名称来引用该组对象。
数组声明创建一个引用,用它可以引用一个数组。声明格式声明格式1)变量名后加方括号,如:
int x[];
String x[];
2)类型后加方括号,如:
int[] x;
String[] x;
声明不指定数组的实际大小。数组的类型数组的类型声明基本类型数组:
char s[ ];
char[ ] s;
声明类类型数组:
Point p[ ]; //Point是java.awt中的一个类
Point[ ] p;2、使用new为数组分配空间2、使用new为数组分配空间使用new关键字创建数组。
数组的创建是为数组指定元素的个数,并为数组的元素分配存储空间。创建基本类型数组创建基本类型数组例如,创建一个基本(char)类型数组:
public char[ ] createArray(){
char[ ] s;
s=new char[26];
for(int i=0;i<26;i++){s[i]=(char)(‘A’+i);}
return s;
}s…1fb8ee3‘’‘’‘’‘’‘’ABCDE创建基本类型数组创建基本类型数组例如,创建一个基本(char)类型数组:
public char[ ] createArray(){
char[ ] s=new char[26];
for(int i=0;i<26;i++){s[i]=(char)(‘A’+i);}
return s;
}创建对象数组创建对象数组另一示例,创建一个对象数组:
public Point[ ] createArray(){
Point[ ] p;
p=new Point[10];
for(int i=0;i<10;i++){p[i]=new Point(i,i+1);}
return p;
}创建对象数组创建对象数组另一示例,创建一个对象数组:
public Point[ ] createArray(){
Point[ ] p=new Point[10];
for(int i=0;i<10;i++){p[i]=new Point(i,i+1);}
return p;
}point数组示意图point数组示意图Point[ ]...堆内存p栈内存61de333、初始化数组
整型数组3、初始化数组
整型数组写法一(动态初始化):
int intArray[ ];
intArray=new int[5];
此时数组元素均为默认值0,可以逐个赋值:
intArray[0]=1;
intArray[1]=2;
intArray[2]=3;3、初始化数组
整型数组3、初始化数组
整型数组写法二(静态初始化):
int intArray[ ]=new int[]{1,2,3};
或
int intArray[ ]={1,2,3};
省略了指定数组大小,
此时数组的大小由大括号中值的个数决定,
这种方式需指定数组中各个元素的值。3、初始化数组
对象数组3、初始化数组
对象数组写法一(动态初始化):
Point PArray[ ];
PArray=new Point[3];
此时数组元素的值为默认值null,可逐个赋值:
PArray[0]=new Point(0,1);
PArray[1]=new Point(1,2);
PArray[2]=new Point(2,3);3、初始化数组
对象数组3、初始化数组
对象数组写法二(静态初始化):
Point PArray[ ]=new Point[]{
new Point(0,1),
new Point(1,2),
new Point(2,3)};
或
Point PArray[ ]={
new Point(0,1),
new Point(1,2),
new Point(2,3)};初始化数组
字符串数组初始化数组
字符串数组写法一(动态初始化):
String names[ ];
names=new String[3];
逐个赋值:
names[0]=“How”;
names[1]=“are”;
names[2]=“you”;初始化数组
字符串数组初始化数组
字符串数组写法一(动态初始化):
String names[ ];
names=new String[3];
names[0]=new String(“How”);
names[1]=new String(“are”);
names[2]=new String(“you”);初始化数组
字符串数组初始化数组
字符串数组写法二(静态初始化):
1.String names[ ]=new String[]{“How”,”are”,”you”};
2.String names[ ]={“How”,”are”,”you”};
3.String names[ ]={
new String(“How”),
new String(“are”),
new String(“you”)};4.一维数组的重定义4.一维数组的重定义在程序中可以改变数组的大小,即重新定义数组。
即为数组分配新的内存空间。(想想为什么?)
如:
int []v_array=new int[10];
v_array=new int[50];
v_array=new int[6];5、数组长度length5、数组长度length在Java编程语言中,所有数组的索引均从0开始。
数组的元素数作为数组对象的一部分存储在length属性中。
如果发生边界溢出访问,那么就将引发运行时异常。5、数组长度length5、数组长度length使用length属性对数组作如下循环:
int list[ ]={1,2,3};
for(int i=0;i
class <类名>{
[<属性声明>]
[<构造器声明>]
[<方法声明>]
}<类名>可以是任何合法的标识符,并且是所声明类的名字。有几种可使用的<修饰符>,但现在只使用public,声明类可被任意访问。类的正文声明了与类相关的数据属性、构造器和方法的集合。补充例1补充例1例1:
定义一个人类,描述人类的姓名、年龄、身高、
体重,定义一个方法用来检验人的体重是否在
正常范围之内,定义一个方法用于得到是否肥胖
的结论。 计算标准计算标准2.成员变量2.成员变量变量声明的一般格式:
<修饰符> <类型> <名称>;
例如:private int x;<名称>可以是任何合法的标识符,它是所声明属性的名字。有几种可用的<修饰符>,但现在只使用public或private。private声明该属性只能由该类的方法访问。属性的<类型>可以是任何基本类型(int,boolean等)或任何类。3.声明方法3.声明方法方法的基本语法:
<修饰符> <返回类型> <名称>([<参数表>]){
[<语句>]
}<名称>可以是任何合法的标识符,但限制使用那些已经在使用的名称。<修饰符>是可选项,并可有很多不同的修饰符,包括public、protected和private等。public访问修饰符表明可从其他代码调用该方法。private表明方法只能在由该类中其他方法调用。Person类的成员变量的定义Person类的成员变量的定义class Person{
private String name = null;
private int age = 0;
private double height = 0;
private double weight = 0;
…
}Person类的方法的定义Person类的方法的定义 public double Bmivalue(){
return height/(weight*weight);
}
public double StdWeight(){
return 22*height*height;
}
public double ObesityDegree(){
return (weight-StdWeight())/StdWeight()*100;
}Person类的方法的定义Person类的方法的定义 public String Conclusion(){
if(ObesityDegree()<-10)
return "瘦";
else
if(ObesityDegree()<20){
if(Bmivalue()<24.2)
return "普通";
else
return "超重";
}
else
return "肥胖";
}Person类的构造函数的定义Person类的构造函数的定义 public Person(String name,int age,double height,double weight){
this.name=name;
this.age=age;
this.height=height;
this.weight=weight;
}3.2.1 构造函数3.2.1 构造函数1.声明构造函数1.声明构造函数构造函数的基本语法:
<修饰符> <类名>([<参数表>]){
[<语句>]
}2.构造函数特点2.构造函数特点构造函数作用:完成类对象的初始化工作
构造函数的名称必须与类名相同
构造器没有返回值并且不可被继承
一般将构造函数的修饰符声明为public
构造函数中不能有return语句3.构造函数参数3.构造函数参数参数表与方法声明中的一样。可以象方法一样向构造函数传递参数。
构造函数可以有0个、1个或者多个参数。(1)无参数的构造函数(1)无参数的构造函数没有构造函数——使用默认的构造函数(没有参数,没有方法体)
如果使用没有参数的构造函数,则创建的对象具有相同的初始值修改补充例1修改补充例1class Person{
private String name = "model";
private int age=20;
private double height = 1.7;
private double weight = 60;
public Person(){}
}显式初始化
在执行构造函数方法体之前执行继续修改补充例1继续修改补充例1class Person{
private String name = "model";
private int age=20;
private double height = 1.7;
private double weight = 60;
public Person(){
this.name="jack";
this.age=30;
this.height=1.8;
this.weight=80;
}
}(2)带参数的构造函数(2)带参数的构造函数class Person{
private String name = "model";
private int age=20;
private double height = 1.7;
private double weight = 60;
public Person(String name,int age,double height,double weight){
this.name=name;
this.age=age;
this.height=height;
this.weight=weight;
}
}this:代表当前对象4.构造函数的重载4.构造函数的重载一个类可以有多个构造函数,叫做构造函数的重载。
条件(满足其一)
参数的个数不同
参数的类型不同修改补充例1修改补充例1 public Person(String name,int age,double height,double weight){
this.name=name;
this.age=age;
this.height=height;
this.weight=weight;
}
public Person(String name,int age){
this.name=name;
this.age=age;
this.height=1.7;
this.weight=70;
}
public Person(String name){
this.name=name;
this.age=25;
this.height=1.5;
this.weight=50;
}另一种写法
构造函数的相互调用另一种写法
构造函数的相互调用public Person(String name,int age,double height,double weight){
this.name=name;
this.age=age;
this.height=height;
this.weight=weight;
}
public Person(String name,int age){
this(name,age,1.7,70);
}
public Person(String name){
this(name,25,1.5,50);
}5.构造函数的使用5.构造函数的使用不能由编程人员显式调用。
在创建一个类的新对象的同时,系统会自动调用该类的构造函数为新对象初始化。
构造函数只能和new运算符一起使用。格式格式类名 对象名
=new 构造函数名称(成员变量的初始值)6.默认构造函数6.默认构造函数每个类至少有一个构造函数。
如果不编写构造函数,则自动添加默认构造函数:
默认构造函数不带参数
默认构造函数函数体为空
不必编写构造函数就能使用new Xxx()创建
对象实例找错误?找错误?class Person{
private String name = "model";
private int age=20;
private double height = 1.7;
private double weight = 60;
public Person(String name,int age,double height,double weight){
this.name=name;
this.age=age;
this.height=height;
this.weight=weight;
} }
class test{
public static void main(String[] args){
Person p1=new Person();
Person p2=new Person(“jerry”,20,1.9,100);
}
}哪个语句有错?
为什么?上机作业
调试完后写在作业本上上机作业
调试完后写在作业本上105页 2(5)(7)3.1.2 对象(类的实例化)3.1.2 对象(类的实例化)补充练习:SameCircle类
——表示一个圆补充练习:SameCircle类
——表示一个圆class SameCircle{
public int nOrignX;
public int nOrignY;
public int nRadius;
public SameCircle(int nOrignX,int nOrignY,int nRadius){
this.nOrignX=nOrignX;
this.nOrignY=nOrignY;
this.nRadius=nRadius;
}
}1.对象的生成
(1)对象的声明1.对象的生成
(1)对象的声明格式:<类名> <对象名>;
如:SameCircle c1,c2;
c1和c2是两个空对象。c1c2(2)创建对象(2)创建对象格式:<对象名>=new <类名>(实参);
如:c1=new SameCircle(3,4,5);
c2=new SameCircle(6,7,8);345…678…c1c2对象c1的首地址对象c2的首地址2.对象的引用2.对象的引用SameCircle c1=new SameCircle(3,4,5);
SameCircle c2=c1;345…c1对象c1的首地址c2对象c1的首地址c2是c1的引用,是c1的首地址3.2.5 对象的清除3.2.5 对象的清除对象为null时,由Java的自动垃圾收集机制清除对象,释放对象占用内存
手动编写finalize()方法撤销对象——不提倡使用补充知识:对象的内存模型补充知识:对象的内存模型栈内存:在方法中定义的变量(基本类型和引用类型)。超过变量的作用域时,自动释放变量的内存
堆内存:new创建的对象(包括数组),由Java的自动垃圾收集机制来清除示例示例(1) 声明对象Person p;未初始化地址p栈内存堆内存示例示例(2) 创建对象p=new Person();未初始化地址p栈内存堆内存null00.0…0.0nameageweightheight0x30000x3000注意二者的区别注意二者的区别栈stack——连续的内存区域,大小固定,编译时确定所需空间大小,效率高
堆heap——不连续的内存区域,运行时确定所需空间大小(支持面向对象的多态性,如:运行时才能确定是哪个类的对象),效率低,但灵活3.2.4 静态变量3.2.4 静态变量补充实例补充实例 public class Person{
private int person_No;
public static int nextperson_No=1000;
public Person(){
person_No=++nextperson_No;
}
}补充实例补充实例 class Test{
public static void main(String args[]){
Person c1=new Person();
Person c2=new Person();
}
}补充实例补充实例 public class Person{
private int person_No;
public static int nextperson_No=1000;
public Person(){
person_No=++nextperson_No;
}
public int getPerson_No(){
return person_No;
}
}补充实例补充实例 class Test{
public static void main(String args[]){
Person c1=new Person();
Person c2=new Person();
System.out.println(“c1:nextperson_No”);
System.out.println(c1. nextperson_No);
System.out.println(“c1:person_No”);
System.out.println(c1. getPerson_No());