java对象、数组作为参数传递,静态变量、静态方法的使用,内部类,使用文档注释

java对象、数组作为参数传递,静态变量、静态方法的使用,内部类,使用文档注释
java对象、数组作为参数传递,静态变量、静态方法的使用,内部类,使用文档注释

java学习笔记(四)----对象、数组作为参数传递,静态变量、静态方法的使用,内部类,使用文档注释

2009-10-15 20:21

***对象作为参数传递***

class passparam

{ int x;

public static void main(String[] args)

{ passparam obj = new passparam();

obj.x=5;

change(obj);

System.out.println(obj.x);

//如果change方法不是静态的,想调用它就得写成new passparam().change(obj);

}

public static void change(passparam obj) //如果这个函数前面没加static编译出错,因为非静态方法,不能被静态方法直接调用,main 是一个静态方法。

{ obj.x=3;}

}

结果:3

***数组作为参数传递***

class passparam

{ int x;

public static void main(String[] args)

{ passparam obj = new passparam();

int []x=new int[1];

x[0]=5;

change(x);

System.out.println(x[0]);

}

public static void change(int[] x)

{ x[0]=3; }

}

结果:3

***静态变量、静态方法的使用***

静态变量相当于全局变量

class Chinese

{ static string country="中国"; //如果改为private static string country="中国" 下面的两处调用,就会出错

String name;

int age;

static void sing()

{ System.out.println("啊~~")

void singOurCountry()

{ System.out.println(country);

sing();

}

}

class TestChinese

{ public static void main(String[] args)

{ System.out.println(Chinaese.country); //static 静态变量可以直接引用

Chinese ch1=new Chinese();

ch1.singOurCountry();

System.out.println(ch1.country);

Chinese.sing(); //静态方法的引用

new.Chinese.sing(); // 用对象引用方法

}

}

--------------------------------

class Chinese

{ private static int count=0; //定义一个静态整形变量

static //静态代码块类在第一次使用时,初使化

{ count=2; //这个类在第一次使用时,count被初使化

System.out.println("static code")

}

String name;

int age;

public Chinese()

{ System.out.println(++count); }

}

class TestChinese

{ public static void main(String[] age){

System.out.println("static begin")

new Chinese();

System.out.println("end")

new Chinese();

new Chinese();

}

}

输出结果为

static begin

static code

3

end

4

5

------------------------------------

**静态方法注意:

1、在静态方法里只能直接调用同类中其它的静态成员(包括变量和方法)。这是因为,对于非静态方法和变量,需要先创建类的实例对象后

才可使用,而静态方法在使用前不用创建任何对象。

2、静态方法不能以任何方式引用this和super关键字。与上面的的道理一样,因为静态方法在使用前不用创建任何实例对象,当静态方法被

调用时,this所引用的对象根本就没有产生。

3、main()方法是静态的,因此JVM在执行main方法时不创建main方法所在类的实例对象,因而在main()方法中,我们不能直接访问该类中的

非静态成员,必须创建该类的一个实例对象后,才能通过这个对象去访问类中的非静态成员。

class B{

public void b(){ System.out.print("000");}

public static void e(){}

public void c(){b();

e();

} //类中的非静态方法可以调用该类中的其它非静态方法,和静态方法

}

class A{

public static void main(String[] args){

new B().c();

}

}

----------------------------------------

**静态代码块

1、一个类中可以使用不包含在任何方法中的静态代码块(static block),当类被载入时,静态代码块被执行,且只被执行一次,静态块经常

来进行类属性的初始化。

2、类中的静态代码块被自动执行,尽管我们产生了类的多个实例对象,但其中的静态代码块只被执行了一次。当一个程序中用到了其他的类

,类是在第一次被使用的时候才被装载,而不是在程序启动时就装载程序中所有可能要用到的类。

---------------------------

***单态设计模式***使类在内存中只创建一个实例对象

class Chinese

{

private static Chinese objRef = new Chinese(); //这里必须用static,由于1、下面是用静态方法调用2、如果不用static就会陷入死

循环中,因为每创建一个objRef对象,就会重新载入Chinese类,然后又调用objRef类。

private static int count=0;

public static Chinese getInstance() //Chinese 为这个方法的返回类型, 这个方法是用静态方法来调用静态变量

{ return objRef; }

private Chinese() //单态设计模式要把构造函数设为私有的

{ System.out.println(++count); }

}

class TestChinese

{ public static void main(String[] age){

Chinese obj1 = chinese.getInstance();

Chinese obj2 = chinese.getInstance();

System.out.println(obj1==obj2); //返回结果为true

new Chinese(); //此处出错,因为构造函数已经是私有的了,所以不能再这样定义对象了。

}

}

注意:1,构造函数必须设为private

2, 类里面定义的对象必须是private,static,也可以加上final

3, 类里面要有一个调用对象的类,这个类必须是public,static,和类形是这个类的名,类中的其它要调用的方法还用public

--------------

单态设计模式:所谓类的单态设计模式,就是采取一定的方法保证在整个的软件系统中,对某个类只能存在一个对象实例,并且该类只提供

一个取得其对象实例的方法,如果我们要让类在一个虚拟机中只能产生一个对象,我们首先必须将类的构造方法的访问权限设置为private,这

样,就不能用new操作符在类的外部开始产类的对象了,但在类内部仍可以产生该类的对象。因为在类的外部开始还无法得到类的对象,只能调

用该类的某个静态方法以返回类内部创建的对象,静态方法只能访问类中的静态成员变量,所以,指向类内部产生的该类对象的变量也必须定

义成静态的。

--------------------------------------------------------

***嵌套类***

1.嵌套类可以直接访问嵌套它的类成员,包括private成员,但是,嵌套类的成员却不能被嵌套它的类直接访问。

2.在类中直接定义的嵌套类的使用范围,仅限于这个类的内部,也就是说,A类里定义了一个B类,那么B为A所知,却不被A的外面所知。内部类

的定义和普通类的定义没什么区别,它可以直接访问和引用它的外部类的所有变量和方法,就像外部类中的其他非static成员的功能一样,和

外部类不同的是,内部类可以声明为private或protected.

3.内部类可以用static来修饰,这样相当于是一个外部定义的类,它的用法就和外部类一样了,所以static的内部类中可声明static成员,static的内部类不能再使用外层封装类的非static的成员变量,staic嵌套类很少使用.

class Outer

{ int outer_i=100;

void test()

{ Inner in=new Inner();

in.display();

}

class Inner

{ void display()

{ System.out.println("display: outer_i="+outer_i); }

}

}

class InnerClassDemo

{ public static void main(String[] args)

{ Outer outer=new Outer();

outer.test();

}

}

输出结果:display: outer_i=100

------------------------------------------------------------------

经验:当一个类中的程序代码要用到另外一个类的实例对象,而另外一个类中的程序代码又要访问第一个类中的成员,将另外一个类做成第一

个类的内部类,程序代码就要容易编写得多,这样的情况在实际应用中非常之多!

---------------------------------------------------------------------

***如果函数的局部变量(函数的形参也是局部变量),内部类的成员变量,外部类的成员变量重名,我们应该按下面的程序代码所使用的方式来

明确指定我们真正要访问的变量。

pulic class Outer

{ private int size;

public class Inner

{ private int size;

public void doStuff(int size)

{ size++; //引用的是doStuff函数的形参

this.size++; //引用的是Inner类中的成员变量

Outer.this.size++; //引用的Outer类中的成员变量

}

}

}

----------------------------------------------

****内部类如何被外部引用****

内部类也可以通过创建对象从外部类之外被调用,只要将内部类声明为Public即可。

class Outer

{ private int size=10;

public class Inner //被外部引用,必须声明为public

{ public void doStuff()

{ System.out.println(++size); }

}

}

public class TestInner

{ public static void main(String[] args)

{ Outer a =new Outer();

Outer.Inner b=a.new Inner();

b.doStuff();

}

}

--------------------------------------------------

****方法中定义的内部类****

class Outer

{ int outer_i=100;

void test()

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

{ class Inner //方法中定义的内部类

{ void display()

{ System.out.println("display: outer_i="+outer_i);}

}

Inner inner=new Inner();

inner.display();

}

}

}

class InnerClassDemo

{ public static void main(String args[]){

Outer outer=new Outer();

outer.test();

}

}

结果:

display: outer_i=100

display: outer_i=100

display: outer_i=100

display: outer_i=100

display: outer_i=100

*在方法中定义的内部类只能访问方法中的final类型的局部变量,因为用final定义的局部变量相当于是一个常量,它的生命周期超出方法运行

的生命周期。

class InOut

{ String str=new String("Between");

public void amethod(final int iArgs)

{ int it315;

class Bicycle

{ public void sayHello()

{ System.out.println(str);

System.out.println(iArgs);

}

}

}

}

在内部类中的sayHello方法中,我们可以访问变量iArgs和str,但不能访问it315

------------------------------------------------------------

*****使用文档注释******

对于类的说明应在类定义之前,对于方法的说明应在方法定义之前。

import java.io.*;

/**

* Title: engineero类

* Description: 通过engineer类来说明java中的文档注释

* Copyright: (C) 2003 https://www.360docs.net/doc/907106934.html,

* Company: IT人资讯交流网

* @author 张孝祥

* @version 1.00

*/

public class engineer

{

public String Engineer_name;

/**

* 这是engineer对象的构造函数

* @param name engineer的名子

*/

public engineer(String name)

{

}

/**

* 这是repairing方法的说明

* @param sum 需要修理的机器总数

* @param alltime需要修理的总时间

* @return Repairing的数量

*/

public int repairing (int sum, int alltime)

{

}

}

-----------------------------------------------------------------


在html中换行,而带有@标志的属性会自动换行,结尾就省略了

@author <作者姓名> 用于类的说明,表示这个java程序的作者

@version<版本信息> 用于类的说明,表示这个java程序的开发版本。

@param<参数名称><参数说明> 用于方法的说明,表示方法所引入的参数,及其参数对应的说明@return<返回值说明> 用于方法的说明,表示此方法的返回值表示的意义。

----------------------------------------------------------------

在dos下存放文件的目录下输入

javadoc -d engineer -version -author engineer.java

javadoc 就会生成这个类的说明文件

-d 用来制定说明文件存放的目录

engineer 为说明文件所存放的目录名;

-version 代表要求javadoc程序在说明文件中加入版本信息

-author 表示要求javadoc程序在说明文件中加入作者信息

Java中的static变量、方法、代码块

1、static变量 按照是否静态的对类成员变量进行分类可分两种:一种是被static修饰的变量,叫静态变量或类变量;另一种是没有被static修饰的变量,叫实例变量。两者的区别是: 对于静态变量在内存中只有一个拷贝(节省内存),JVM只为静态分配一次内存,在加载类的过程中完成静态变量的内存分配,可用类名直接访问(方便),当然也可以通过对象来访问(但是这是不推荐的)。 对于实例变量,每创建一个实例,就会为实例变量分配一次内存,实例变量可以在内存中有多个拷贝,互不影响(灵活)。 2、static方法 静态方法可以直接通过类名调用,任何的实例也都可以调用,因此静态方法中不能用this和super关键字,不能直接访问所属类的实例变量和实例方法(就是不带static的成员变量和成员成员方法),只能访问所属类的静态成员变量和成员方法。因为实例成员与特定的对象关联!这个需要去理解,想明白其中的道理,不是记忆!!! 因为static方法独立于任何实例,因此static方法必须被实现,而不能是抽象的abstract。 3、static代码块 static代码块也叫静态代码块,是在类中独立于类成员的static语句块,可以有多个,位置可以随便放,它不在任何的方法体内,JVM加载类时会执行这些静态的代码块,如果static代码块有多个,JVM将按照它们在类中出现的先后顺序依次执行它们,每个代码块只会被执行一次。 例子: class A{ static{ System.out.println("A static block"); // (3)运行 } { System.out.print("Q"); // (5)运行 } public A (){ System.out.println("x"); // (6)运行 } } class B extends A{ static{ System.out.println("B static block"); // (4)运行 } { System.out.print("W"); // (7)运行 }

实验4:静态变量、静态方法与包

实验4:静态变量、静态方法与包实验目的 1、熟练静态变量、静态方法、实例变量、实例方法的概念 2、掌握包的概念与应用。 实验内容 一、静态变量 1.阅读下列程序,并按照要求完成后续功能。 class Point { private int x,y; Point (int xValue, int yValue) { x=xValue; y=yValue; }; public int GetX() { return x; } public int GetY() { return y; } public void SetY(int value) { y=value; } public void SetX(int value) { x=value; } } class Managerpoint { static int count=0; Point createPoint(int x,int y)

{ 提示:在此处加入代码,完成程序的输出要求 } } public class one { public static void main(String[] args) { // TODO Auto-generated method stub Managerpoint mPoint =new Managerpoint(); for(int i=0;i<9;i++){ Point p=mPoint.createPoint(i,20); System.out.print("当前点的总数为:"+Managerpoint.count); System.out.println("当前点的x值为:"+p.GetX()); } } } 注意:本例中使用的“20”仅仅是作为一个测试数据。 在提示处加入代码,要求: ●除提示处代码,其他代码保持不变 ●Main方法的执行结果为: 当前点的总数为:1当前点的x值为:0 当前点的总数为:2当前点的x值为:1 当前点的总数为:3当前点的x值为:2 当前点的总数为:4当前点的x值为:3 当前点的总数为:5当前点的x值为:4 当前点的总数为:6当前点的x值为:5 当前点的总数为:7当前点的x值为:6 当前点的总数为:8当前点的x值为:7 当前点的总数为:9当前点的x值为:8 2.改错。 理解静态方法可访问静态变量,但在静态方法中不能直接访问实例变量。 提示: 阴影处为需要修改的代码。 public class one { int x=8; int y=9; final int i=10; static int getY(){ return y; } static int getI(){ return i;

数组对象的常用方法

数组对象的常用方法: 什么叫方法:方法其实就是函数!——只是如果一个函数“隶属于”某个“对象”,则称这个函数为该对象的方法。 function maibao(){ document.write(“啦啦啦,我是卖报的小行家,卖报啦卖报啦。”); } var myDreamGirl = { name: “小花”, age:18, edu :”大学”, sex:”女”, nengli1: function (){ document.write(“洗衣!”); } , nengli2: function (){ document.write(“做饭!”); } , nengli3: maibao }; var v1 = [2, 5, 1, 5]; var v2 = [5, 1, 6, 8]; 从严格的角度来说,数组也是一种对象——甚至字符串也是对象。 v1作为对象,就有属性和方法: 属性: 某数组.length: 表示该数组对象的长度 方法: 某数组.concat(其他数组):将两个数组连接起来成为一个新的“更长”的数组。 var s1 = v1.concat( v2 ); //此时s1是这样一个数组: [2, 5, 1, 5, 5, 1, 6, 8];

某数组.join(“字符串”):将数组中的所有项以指定的字符“串接起来”成为“长的”一个字符串。 var s2 = v1.join(“//”); //结果s2为字符串“2//5//1//5” 某数组.pop(); //将该数组的最后一项“移除”(删除),并返回该项数据,即该数组少了一项 var s3 = v1.pop(); //结果v1只剩这个:[2,5,1]; s3的值是5 某数组.push(新数据项d1); //将新的数据d1添加到该数组的最后位置,即数组多了一项。 var s4 = v1.push( 55 ); //v1此时为:[2,5,1, 55], s4的值为新数组的长度,即4 某数组.shift(); //将该数组的第一项“移除”(删除),并返回该项数据,即该数组少了一项 var s5 = v1.shift(); //结果v1只剩这个:[5, 1,55]; s5的值是2 某数组.unshift(新数据项d1); //将新的数据d1添加到该数组的最前位置,即数组多了一项。 var v6 = v1.unshift( 66 ); //v1此时为:[66, 5, 1, 55],s6的值为新数组的长度,即4 javascript语言是一门基于对象的语言。 字符串对象: var str1 = new String(“abcdefgabc”); //这是一个“字符串对象” var str2 = “abcdefgabc”; //这个字符串跟前面str1几乎没有区别

实验2基本数据类型与数组(最新整理)

民族学院实验报告 计算机科学 系 级 班 指导教师 报告人20 年 月 日 成 绩 课程名称 JAVA 语言程序设计实验名称实验二 基本数据类型与数组实验 目的 1.掌握基本数据类型及其相互之间的转换2.掌握JAVA 中数组的使用实验仪器 和器材具有JDK 环境的计算机一台 实验内容和要求 一、输出希腊字母表 1.请按模板要求,将【代码】替换为Java 程序代码,运行该程序时在命令窗口中输出希腊字母表。其运行效果如图 2.1所示。 图2.1 输出希腊字母表 GreekAlphabet.java public class GreekAlphabet { public static void main(String[] args) { int startPosition=0,endPosition=0; char cStart='α',cEnd='ω'; startPosition=(int )cStart; //cStart 做int 型数据转换,并将结果赋值给startPosition endPosition=(int )cEnd; //cEnd 做int 型数据转换,并将结果赋值给EndPosition System.out.println("希腊字母\'α\'在Unicode 表中的顺序位置:"+(int)cStart); System.out.println("希腊字母表:"); for (int i=startPosition;i<=endPosition;i++){ char c='\0'; cStart=(char )i; //i 做char 型转换运算,并将结果赋值给c System.out.print(" "+c); if ((i-startPosition+1)%10==0) System.out.println(); } } } 2.实验后练习 (1)将一个double 型数据直接赋值给float 型变量,程序编译时提示怎样的 错误? 答:程序提示的内容为:“可能损失精度”。 (2)在应用程序的main 方法中增加语句:

Java 中的 static 使用之静态方法

Java 中的static 使用之静态方法 与静态变量一样,我们也可以使用 static 修饰方法,称为静态方法或类方法。其实之前我们一直写的 main 方法就是静态方法。静态方法的使用如: 需要注意: 1、静态方法中可以直接调用同类中的静态成员,但不能直接调用非静态成员。如: 如果希望在静态方法中调用非静态变量,可以通过创建类的对象,然后通过对象来访问非静态变量。如: 、在普通成员方法中,则可以直接访问同类的非静态变量和静态变量,如下所示:

3、静态方法中不能直接调用非静态方法,需要通过对象来访问非静态方法。如: ava 中的static 使用之静态初始化块 Java 中可以通过初始化块进行数据赋值。如: 在类的声明中,可以包含多个初始化块,当创建类的实例时,就会依次执行这些代码块。如果使用 static 修饰初始化块,就称为静态初始化块。 需要特别注意:静态初始化块只在类加载时执行,且只会执行一次,同时静态初始化块只能给静态变量赋值,不能初始化普通的成员变量。 我们来看一段代码:

运行结果: 通过输出结果,我们可以看到,程序运行时静态初始化块最先被执行,然后执行普通初始化块,最后才执行构造方法。由于静态初始化块只在类加载时执行一次,所以当再次创建对象 hello2 时并未执行静态初始化块。 封装 1、概念: 将类的某些信息隐藏在类内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问 2、好处 a:只能通过规定的方法访问数据 b:隐藏类的实例细节,方便修改和实现。 什么是Java 中的内部类 问:什么是内部类呢? 答:内部类( Inner Class )就是定义在另外一个类里面的类。与之对应,包含内部类的类被称为外部类。 问:那为什么要将一个类定义在另一个类里面呢?清清爽爽的独立的一个类多好啊!! 答:内部类的主要作用如下:

jni中基本类型数组的传递方法(无需拷贝数据)

JNI中基本类型数组的传递方法(无需拷贝数据!!!) 0、先来看一下主要用到哪些函数: C 代码GetIntArrayElements();//貌似得到的是副本,要拷贝数据ReleaseIntArrayElements();//对应上面的函数的释放资源的函数env->GetPrimitiveArrayCritical();//貌似 得到的是指向原数据的指针 env->ReleasePrimitiveArrayCritical();////对应上面的函数 的释放资源的函数 官方文档: https://www.360docs.net/doc/907106934.html,/javase/7/docs/technotes/guides/jni/ spec/functions.html#wp17440 JNI函数的中译本(貌似没看到GetPrimitiveArrayCritical()):https://www.360docs.net/doc/907106934.html,/qinjuning下面正式开始:1、不知道如 何设置JNI环境的先看这里: https://www.360docs.net/doc/907106934.html,/blog/13281362、Java端程序: Java端:

Java代码package tests; import java.util.Arrays; public class TestJNIArray { static{ System.loadLibrary("TestJNIArra y"); } public static native void addOne(int[] ints);//数组元素1 public static native void addOne(double[] ints);//数组元素1,为了测试,C 中循环了5次public static native int[] getNewArray(int size,int initValue);//生成初始值为initValue的数组,数组长度为size public static void main(String[] args) throws InterruptedException { int n=20; final int[] a=new int[n]; for (int i = 0; i < a.length; i ) { a[i]=i; } if(n<50)System.out.println(Arrays.toString(a)); addOne(a); if(n<50)System.out.println(Arrays.toString(a)); final double d[]=new double[n]; for (int i = 0; i < d.length; i ) { d[i]=i; } //addOne(d); if(n<50)System.out.println(Arrays.toString(d)); new Thread(new Runnable() { @Override

Java静态方法、静态变量,初始化顺序

Java静态方法、静态变量、初始化顺序 成员变量分为实例变量和静态变量。其中实例变量属于某一个具体的实例,必须在类实例化后才真正存在,不同的对象拥有不同的实例变量。而静态变量被该类所有的对象公有(相当于全局变量),不需要实例化就已经存在。南京Java软件培训机构 方法也可分为实例方法和静态方法。其中,实例方法必须在类实例化之后通过对象来调用,而静态方法可以在类实例化之前就使用。与成员变量不同的是:无论哪种方法,在内存中只有一份——无论该类有多少个实例,都共用同一个方法。南京Java软件培训机构 实例方法的调用: 1.ClassA a = new ClassA(); //必须经过实例化,用对象名访问 2. a.instanceMethod(); 静态方法的调用: 1. 1. a.staticMethod(); //无需经过实例化,用类名或者对象名访问 2. 静态方法的声明和定义 定义一个静态方法和定义一个实例方法,在形式上并没有什么区别,只是在声明的头部,需要加上一个关键字static。南京Java软件培训机构 3.静态方法和实例方法的区别 静态方法和实例方法的区别主要体现在两个方面: · 在外部调用静态方法时,可以使用“类名.方法名”的方式,也可以使用“对象名.方法名”的方式。而实例方法只有后面这种方式。也就是说,调用静态方法可以无需创建对象。 · 静态方法在访问本类的成员时,只允许访问静态成员(即静态成员变量和静态方法),而不允许访问实例成员变量和实例方法;实例方法则无此限制。 实例代码:静态方法访问成员变量示例: 1.class accessMember{ 2.private static int sa; //定义一个静态成员变量 3.private int ia; //定义一个实例成员变量 4.//下面定义一个静态方法 5.static void statMethod(){ 6.int i = 0; //正确,可以有自己的局部变量 7.sa = 10; //正确,静态方法可以使用静态变量 8.otherStat(); //正确,可以调用静态方法 9.ia = 20; //错误,不能使用实例变量 10.insMethod(); //错误,不能调用实例方法 11.}

JAVA类与对象及数组习题及答案

JAV A类和对象及数组习题 一、选择题 (1)下列构造方法的调用方式中,正确的是(D )--原因:在通过new实例化一个类对象时系统会自动调用该类相应的构造方法。 A.按照一般方法调用B.由用户直接调用 C.只能通过new自动调用D.被系统调用 (2)在Java中,能实现多重继承效果的方式是(C )--原因:一个类可以同时实现多个接口。Java接口反映了对象较高层次的抽象,还弥补了Java只支持单继承的不足,可用它来完成多继承的一些功能。 A.内部类B.适配器C.接口D.同步 (3)int型public成员变量MAX_LENGTH,该值保持为常数100,则定义这个变量的语句是( D )—原因:java中定义常量用关键字final来定义。 A.public int MAX_LENGTH=100 B.final int MAX_LENGTH=100 C.public const int MAX_LENGTH=100 D.public final int MAX_LENGTH=100 (4)下列叙述中,正确的是( A )—原因:Java严格区分大小写,所以变量number 与Number不相同;Java 中的注释方式除了“//”行注释之外还有段注释“/*-------*/”和文档注释/**-------*/。Java源文件中的public类只能有一个。 A. 声明变量时必须指定一个类型 B. Java认为变量number与Number相同 C. Java中唯一的注释方式是"//" D. 源文件中public类可以有0或多个 (5)下列叙述中,错误的是( D )—原因:子类继承父类,并且可以有自己的成员变量和成员方法。所以可以认为子类是父类的扩展。

JS对象创建数组

1 创建对象 Document