JAVA 6(对象)

static关键字:


用法:用于修饰成员(成员变量,成员函数)

特点

1随着类的加载而加载,随着类的消失而消失。说明生命周期最长。

2优先于对象存在,静态先存在,对象后存在。

3被所有对象共享

4可以直接被类名调用    Persion.country ;

使用注意事项:

1,静态方法只能访问静态成员(因为static先存在),非静态即可以,又可以访问非静态成员

2,静态中不可以定义this,super

3,主函数时静态的

利:对对象的共享的数据进行单独空间存储,节省空间,没必要所有对象都存储一份,可以直接被类名调用。

弊:生命周期过长,访问出现局限性。

特有内容随着对象在堆内存中存储,共有内容用static修饰存储在共享区。

静态的内容被对象所共享,只在内存(栈)中建立一个·内容,可以节省内存。

class Zx {

public static void main(String args[])

{

Persion p = new Persion();

p.name = "zhangsan";

p.show();

}

}

class Persion

{

String name;

static String country = "CN";

public void show()

{

System.out.println(name+"::"+country);

}

}

使用场景

1,对象中出现共享数据时,被静态所修饰,特有数据定义成非静态,存在于堆内存中

2,当功能没有访问到非静态数据,可以把功能定义成静态的

class Zx {

public static void main(String args[])

{

Persion p = new Persion();

p.show();

}

}

class Persion

{

String name;

static String country = "CN";

public static void show()

{

System.out.println("haha");

}

}

虽然可以用ArrayTool建立对象使用这些工具的方法,但是有问题:

1,对象时用于封装数据的,可ArrayTool对象并未封装特有数据

2,操作数组的每一个方法都没有用到ArrayTool对象中的特有数据

考虑让程序更严谨,不需要对象,可以将ArrayTool中的方法都定义成静态的,直接用类名调用方法

例:

public class ArrayTool

{

public int getMax(int [] arr)

{

int max=0;

for(int x=0;x<arr.length;x++)

if(arr[x]>max)

max=arr[x];

return max;

}

public int getMain(int [] arr)

{

int min=arr[0];

for(int x=0;x<arr.length;x++)

if(arr[x]< min)

min=arr[x];

return  min;

}

public void selectSort(int [] arr)

{

for(int x=0;x<arr.length-1;x++)

for(int y=x+1;y<arr.length;y++)

if(arr[x]>arr[y])

{

swap(arr,x,y);

}

}

public void bubbleSort(int []arr)

{

for(int x=0;x<arr.length-1;x++)

for(int y=0;y<arr.length-x-1;y++)

if(arr[y]>arr[y+1])

{

swap(arr,y,y+1);

}

}

public void swap(int []arr,int a,int b)

{

int temp=arr[a];

arr[a]=arr[b];

arr[b]=temp;

}

}

class Zx

{

public static void main(String []arr)

{

int[] p = {1,9,99,66,2,33,6,88,44,66,78,26};

ArrayTool tool = new ArrayTool();

int max = tool.getMax(p);

System.out.println("max"+max);

tool.selectSort(p);

for(int x=0;x<p.length;x++)

{

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

}

tool.bubbleSort(p);

for(int x=0;x<p.length;x++)

{

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

}

}

}

修改后:

public class ArrayTool

{

public static int getMax(int [] arr)

{

int max=0;

for(int x=0;x<arr.length;x++)

if(arr[x]>max)

max=arr[x];

return max;

}

public static int getMain(int [] arr)

{

int min=arr[0];

for(int x=0;x<arr.length;x++)

if(arr[x]< min)

min=arr[x];

return  min;

}

public static void selectSort(int [] arr)

{

for(int x=0;x<arr.length-1;x++)

for(int y=x+1;y<arr.length;y++)

if(arr[x]>arr[y])

{

swap(arr,x,y);

}

}

public static void bubbleSort(int []arr)

{

for(int x=0;x<arr.length-1;x++)

for(int y=0;y<arr.length-x-1;y++)

if(arr[y]>arr[y+1])

{

swap(arr,y,y+1);

}

}

public static void swap(int []arr,int a,int b)

{

int temp=arr[a];

arr[a]=arr[b];

arr[b]=temp;

}

}

class Zx

{

public static void main(String []arr)

{

int[] p = {1,9,99,66,2,33,6,88,44,66,78,26};

//ArrayTool tool = new ArrayTool();

int max = ArrayTool.getMax(p);

System.out.println("max"+max);

ArrayTool.selectSort(p);

for(int x=0;x<p.length;x++)

{

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

}

ArrayTool.bubbleSort(p);

for(int x=0;x<p.length;x++)

{

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

}

}

}

当方法都静态后,可以方便使用,但是该类还是可以被其他程序建立对象的,为了更为严谨,让该类不能建立对象,可以提供将构造函数私有化完成。这样就不能再建立对象。因为构造函数在对象初始化的时候初始化,构造函数不能初始化了就无法建立新对象。

public class ArrayTool

{

private ArrayTool (){}

public static int getMax(int [] arr)

{

int max=0;

for(int x=0;x<arr.length;x++)

if(arr[x]>max)

max=arr[x];

return max;

}

public static int getMain(int [] arr)

{

int min=arr[0];

for(int x=0;x<arr.length;x++)

if(arr[x]< min)

min=arr[x];

return  min;

}

public static void selectSort(int [] arr)

{

for(int x=0;x<arr.length-1;x++)

for(int y=x+1;y<arr.length;y++)

if(arr[x]>arr[y])

{

swap(arr,x,y);

}

}

public static void bubbleSort(int []arr)

{

for(int x=0;x<arr.length-1;x++)

for(int y=0;y<arr.length-x-1;y++)

if(arr[y]>arr[y+1])

{

swap(arr,y,y+1);

}

}

private public static void swap(int []arr,int a,int b)   //隐藏

{

int temp=arr[a];

arr[a]=arr[b];

arr[b]=temp;

}

}

静态代码块:随着类的加载而加载,只执行一次。用于给类进行初始化。优先于给对象初始化的构造构造代码块,优先于给对应对象初始化的构造函数,并优先于主函数。

会打印:a,c,d

下面是

new StaticCode(5);

格式:

static

{

System.out,println("a")

}

单例设计模式:

时间: 2024-08-27 22:52:11

JAVA 6(对象)的相关文章

转载---Java集合对象的深度复制与普通复制

原博文:http://blog.csdn.net/qq_29329775/article/details/49516247 最近在做算法作业时出现了错误,原因是没有弄清楚java集合的深度复制和浅度复制的区别. 1.首先是对Java集合对象得浅复制与深度复制的理解 普通的集合复制只是将内存中栈的地址快拷贝一份,使得一个新的集合对象指向这个地址块,但是集合中的对象变量却是指向堆中的同一块区域.所以当拷贝的集合修改了集合对象内的数据,那么源集合对象也就随之改变了,这样的效果我们称之为Java集合对象

Java Class对象

Java Class对象 @author ixenos 关键字:RTTI.动态绑定.动态加载.获得Class引用.泛型Class引用.newInstance的坑 RTTI和动态绑定 RTTI即运行时类型识别 Run-Time Type Identification 或 Run-Time Type Information 例如,当把Shape对象放入List<Shape>的数组时会向上转型,但在向上转型为Shape的时候也会丢失Shape对象的具体类型,对于数组而言,他们只是Shape对象.从L

如何快速通过json构建java bean对象

和第三方对接的时候,返回给我们的json时参数字段多是很常见的现象,所以我们手动去创建javabean肯定是要花费不少时间,可用通过json自动生成javabean的工具,这里简单的介绍一下Intellij IDEA 中的插件GsonFormat. 1.什么是GsonFormat 将json数据格式转换为java bean对象的as插件. 2.快捷键 Ctrl+ALT+S,或settings -->Plugins -->输入GsonFormat   install plugins 安装完成,重

Java实现对象的序列化

什么是对象的序列化? 序列化:把对象转化成字节序列的过程就是对象的序列化:反序列化:把字节序列转化成对象的过程就是对象的反序列化.单看概念比较抽象,但是看代码就会明白. 对象序列化的用途 1.Java程序在运行中,对象都是分配在内存中,而序列化的一个用途就是将内存的中对象转化成磁盘中的对象. 2.对象不能直接在网络中传输,有时候需要将对象转成字节序列在网络中传输,这就是对象序列化的第二个用途. 如何实现对象的序列化? 1.新建一个实体对象,实现Serializable接口,这个实体对象就可以进行

spring mvc返回json字符串数据,只需要返回一个java bean对象就行,只要这个java bean 对象实现了序列化serializeable

1.spring mvc返回json数据,只需要返回一个java bean对象就行,只要这个java bean 对象实现了序列化serializeable 2. @RequestMapping(value = { "/actor_details" }, method = { RequestMethod.POST }) @ResponseBody public ResultObject actorDetails(@RequestBody ActorDetailsRequest req)

Java类对象数组声明和初始化

Java是纯面向对象语言.类是其重要构成单位. 然后,在实际编程中,我们会自己定义一些类,如Point <span style="font-size:14px;">public class Point { public Point(){ Lat=0.0; Lng=0.0; } public double GetLat(){ return Lat; } public double GetLng(){ return Lng; } public void SetLat(doubl

Android中关于JNI 的学习(三)在JNI层访问Java端对象

前面两篇文章简单介绍了JNI层跟Java层的一些对应关系,包括方法名,数据类型和方法名称等,相信在理论层面,能够很好地帮助我们去了解JNI在Native本地开发中的作用,对JNI的一些概念也有了一个初步的认识,由于表达能力或者理解还是有限,有些地方讲得不是很清楚,如果各位朋友有觉得云里雾里,欢迎大家留言一起学习. 概念上的理解有助于我们更好地认识JNI,而一些实际点的例子则能够更好地帮我们从代码上去掌握并应用JNI. 在第一篇文章,我们是从一个小例子来入门学习的,在其中,我们通过JNI层函数返回

Java面向对象-对象的多态性

Java面向对象-对象的多态性 Java中的多态性表现: 1,方法的重载和重写(覆盖): 2,可以用父类的引用指向子类的具体实现,而且可以随时更换为其他子类的具体实现: 我们先搞个父类Animal: 1 package com.java1234.chap03.sec13; 2 3 public class Animal { 4 5 public void say(){ 6 System.out.println("我是一个动物"); 7 } 8 } 再搞两个子类,分别是Dog和Cat类,

[转]java类 对象 和构造方法

github地址:https://github.com/lily1010/java_learn/tree/master/dog java中对象和类 java中万物皆对象,比如说动物,里面有猫,狗,鱼等等,他们都能跑,都能呼吸,总之他们有一些动物的共同特征,java中可以把他们归为一类.这就是java中的类:而猫,狗等,就是这个类中的一个具体的对象.猫,狗又有一些动作行为,就是方法.当你想调用那些动作行为的时候,不能直接在类中调用,因为不同的动物的行为不一样,你就必须new一个对象,来调用. ja

Java Object 对象创建的方式 [ 转载 ]

Java Object 对象创建的方式 [ 转载 ] @author http://blog.csdn.net/mhmyqn/article/details/7943411 显式创建 有4种显式地创建对象的方式: 1.构造器:用new语句创建对象,这是最常用的创建对象的方式. 2.反射:运用反射手段,调用java.lang.Class或者java.lang.reflect.Constructor类的newInstance()实例方法. 3.克隆:调用对象的clone()方法. 4.序列化:运用反