--------------android培训、java培训、期待与您交流! --------------
一、静态(static)
1、static关键字
class Person{
String name;//成员变量,也叫实例变量
/*country成员变量被静态修饰之后,其就被放入了方法区;不是存在于每个对象之中,而是被对象所共享访问。
*/
static String country="China";//静态变量,类变量
/*静态方法中只能调用静态成员变量,例如country;而不能调用非静态变量,例如调用name就会出错。
* */
static public void show(){
//System.out.println(name+":"+country);
System.out.println(country);
}
}
public class Demo {
public static void main(String args[]){
Person p=new Person();
System.out.println(p.country);//对象调用
System.out.println(Person.country);//类名直接调用静态变量
Person.show();//类名直接调用静态方法
}
}
public class MainDemo {
public static void main(String[] args) {
String arr[]={"haha","hehe","heihei"};
MainTest.main(arr);
}
}
class MainTest{
public static void main(String[] args) {
for(String i:args)
System.out.println(i);
}
}
public class MainDemo {
public static void main(String[] args) {
Person.show();//类名直接调用静态方法。
}
}
class Person{
String name;
public static void show(){
System.out.println("Hello World!");
}//该方法没有访问到非静态数据,则可以定义为静态。
}
class ArrayTool{
/*为了更为严谨,强制让该类不能建立对象。
可以通过将构造函数私有化完成。
*/
private ArrayTool(){}
//获得最大值
public static int getMax(int arr[]){
int max=0;
for(int i=1;i<arr.length;i++){
if(arr[max]<arr[i]){
max=i;
}
}
return arr[max];
}
//获得最小值
public static int getMin(int arr[]){
int min=0;
for(int i=1;i<arr.length;i++){
if(arr[min]>arr[i]){
min=i;
}
}
return arr[min];
}
//选择排序
public static void selectsort(int arr[]){
int max;
//外循环进行元素顺序调换
//内循环获得每趟中部分数组中的最大元素下标
for(int i=1;i<arr.length;i++){
max=0;
for(int j=1;j<=arr.length-i;j++){
if(arr[j]>arr[max]){
max=j;
}
swap(arr,arr.length-i,max);
}
}
show(arr);
}
//冒泡排序
public static void bubblesort(int arr[]){
for(int i=1;i<arr.length;i++){
for(int j=0;j<arr.length-i;j++){
if(arr[j]>arr[j+1]){
/*相邻元素进行比较,若较前元素大于较后元素,
* 将其调转位置
* */
swap(arr,j,j+1);
}
}
}
show(arr);
}
//调转位置函数
private static void swap(int arr[],int a,int b){
int temp=arr[a];
arr[a]=arr[b];
arr[b]=temp;
}
public static void show(int arr[]){
for(int i:arr){
System.out.print(i+" ");
}
System.out.println();
}
}
public class Demo {
public static void main(String args[]){
int arr[]={3,0,1,8,2,7,6,4,9,5};
int max=ArrayTool.getMax(arr);
System.out.println("max="+max);
int min=ArrayTool.getMin(arr);
System.out.println("min="+min);
ArrayTool.show(arr);
ArrayTool.selectsort(arr);
}
}
制作程序的说明书--API文档:
API英文全称 Application Program Interface 应用程序接口
java的说明书通过文档注释来完成
dos执行生成帮助文档的命令:
javadoc -d help -author -version Demo.java
javadoc java制作文档的工具
-d 目录
help 是文件夹名,如果当前没有该文件夹,会自动在当前目录创建。
-author 作者
-version 版本号
Demo.java 要制作的文档的java文件
要生成文档,必须在类名前加上public修饰,否则会报错。方法被public修饰才能在文档中看到,被private修饰的方法是不会出现文档中。
一个类中默认会有一个空参数的构造函数,
这个默认的构造函数的权限和所属类一致。
如果类被public修饰,那么默认的构造函数也带public修饰符。
如果类没有被public修饰,那么默认的构造函数,也没有public修饰。
默认构造构造函数的权限是随着的类的变化而变化的。
java工具类注释说明书实例:
/**
这是一个可以对数组进行操作的工具类,该类提供功能:获取最值、排序。
@author DuanGuangyu
@version V1.0
*/
public class ArrayTool{
/**
* 空参数构造函数
*/
private ArrayTool(){}
/**获取一个整形数组中的最大值。
* @param arr接收一个int类型的数组
* @return 返回该数组中的最大值
*/
public static int getMax(int arr[]){
int max=0;
for(int i=1;i<arr.length;i++){
if(arr[max]<arr[i]){
max=i;
}
}
return arr[max];
}
/**获取一个整形数组中的最小值。
* @param arr接收一个int类型的数组
* @return 返回该数组中的最小值
*/
public static int getMin(int arr[]){
int min=0;
for(int i=1;i<arr.length;i++){
if(arr[min]>arr[i]){
min=i;
}
}
return arr[min];
}
/**
* 给int数组进行选择排序。
* @param arr 接收一个int类型的数组。
*/
public static void selectsort(int arr[]){
int max;
//外循环进行元素顺序调换
//内循环获得每趟中部分数组中的最大元素下标
for(int i=1;i<arr.length;i++){
max=0;
for(int j=1;j<=arr.length-i;j++){
if(arr[j]>arr[max]){
max=j;
}
swap(arr,arr.length-i,max);
}
}
show(arr);
}
/**
* 给int数组进行冒泡排序。
* @param arr 接收一个int类型的数组。
*/
public static void bubblesort(int arr[]){
for(int i=1;i<arr.length;i++){
for(int j=0;j<arr.length-i;j++){
if(arr[j]>arr[j+1]){
/*相邻元素进行比较,若较前元素大于较后元素,
* 将其调转位置
* */
swap(arr,j,j+1);
}
}
}
show(arr);
}
/**
* 调换数组中元素位置
* @param arr 接收一个int类型的数组。
* @param a 要置换的位置
* @param b 要置换的位置
*/
private static void swap(int arr[],int a,int b){
int temp=arr[a];
arr[a]=arr[b];
arr[b]=temp;
}
/**
用于打印数组中的元素。打印形式是:elemet1 element2 ...
* @param arr 接收一个int类型的数组。
*/
public static void show(int arr[]){
for(int i:arr){
System.out.print(i+" ");
}
System.out.println();
}
}
class StaticCode{
//构造函数给对应对象初始化
StaticCode(){
System.out.println("b");
}
StaticCode(int x){
System.out.println("d");
}
//静态代码块给类初始化
static{
System.out.println("a");
}
//构造代码块给对象初始化
{
System.out.println("c");
}
public static void show(){
System.out.println("show run");
}
}
public class StaticCodeDemo {
//该类中的两个static代码块先执行,然后执行main函数
static{
System.out.println("haha");
}
public static void main(String[] args) {
new StaticCode(5);
/*
//new StaticCode();
new StaticCode();//StaticCode类中的static代码块随着类的加载而执行,只执行一次。
System.out.println("Hello World!");
StaticCode.show();
*/
}
static{
System.out.println("heihei");
}
}
class Person { private String name; private int age; private static String country = "cn"; Person(String name,int age) { this.name = name; this.age = age; } { System.out.println(name+".."+age); } public void setName(String name) { this.name = name; } public void speak() { System.out.println(this.name+"..."+this.age); } public static void showCountry() { System.out.println("country="+country); } } class PersonDemo { public static void main(String[] args) { Person p = new Person(); p.setName("lisi"); } }
对于事物该怎么描述,还怎么描述。
当需要该事物的对象保证在内存中唯一时,就将以上的三步加上即可。
class Single{ private Single(){}//私有化构造函数,禁止其他程序建立本类对象。 private static Single s=new Single();//在类中创建一个本类对象,对其进行静态私有修饰。 public static Single getInstance(){ return s; }//向外提供本类对象。 } public class SingleDmo { public static void main(String[] args) { Single ss=Single.getInstance();//获得Single类类型的对象。 Single s1=Single.getInstance();//s1和ss都是同一个对象。 } }
class Single{ private int num; public void setNum(int num){ this.num=num; } public int getNum(){ return num; } private Single(){}//私有化构造函数,禁止其他程序建立本类对象。 private static Single s=new Single();//在类中创建一个本类对象,对其进行静态私有修饰。 public static Single getInstance(){ return s; }//向外提供本类对象。 } public class SingleDmo { public static void main(String[] args) { Single s1=Single.getInstance();//获得Single类类型的对象。 Single s2=Single.getInstance();//s1和s2都是同一个对象。 //分别赋两个值 s1.setNum(5); s2.setNum(6); //输出的都是6.因为两个对象其实都是一个对象,先给对象中num赋的5被后来的6覆盖了。 System.out.println("s1:"+s1.getNum()); System.out.println("s2:"+s2.getNum()); } }
class Single{ private Single(){} private static Single s=new Single();//先初始化对象 public static Single getInstance(){ return s; }//向外提供本类对象。 }
class Single{ private Single(){} private static Single s=null; public static Single getInstance(){ if(s==null){ synchronized(Single.class){ if(s==null){ s=new Single(); return s; } } } }//向外提供本类对象。 }