黑马程序员——面向对象2
来源:互联网 发布:2015文化产业数据 编辑:程序博客网 时间:2024/05/16 17:48
---------------------- <a href="http://www.itheima.com"target="blank">ASP.Net+Unity开发</a>、<a href="http://www.itheima.com"target="blank">.Net培训</a>、期待与您交流! ----------------------
01
(static静态关键字)1、static用法:修饰符,用于修饰成员(变量与函数)
2、static特点:随着类的加载而加载,随着类的消失而消失,生命周期最长。
优先于对象存在,静态先存在,对象后存在
被所有对象所共享
可以直接被类名调用
3、static声明的对象:存在于方法区或者称为共享区或者称为数据区
4、静态的使用注意事项:
1、静态方法只能访问静态成员
非静态方法既可以访问静态也可以访问非静态
2、静态方法中不可以定义this,super关键字。
因为静态优先于对象的存在,所以静态方法中不可以出现this。
5、静态利弊:节省空间,可以被类名直接调用;生命周期过长,访问出现局限性。
6、主函数必须用静态
class Person
{
String name;//成员变量,实力变量
/*static修饰的成员将不再对内存中,而是独立开辟一块空间,每个对象都可以对其访问。做到节约空间*/
static String country="CN";//静态成员变量,类变量
public void show()
{
System.put.println(name+":::"+country);
}
}
{
public static void main(String[] arge)
{
System.out.println(Person.country);//被static修饰的成员可以直接用类名.成员来调用
}
}
02
(main函数)
固定格式public static void main(String[] args)
主函数是一个特殊的函数,作为程序的入口,可以被jvm调用
主函数的定义:
public:代表该函数访问权限最大
static:代表主函数随着类的加载就已经存在了
void:代表主函数没有返回值
main:不是关键字,但是是一个特殊的单词,可以被jvm识别。
(String[] args):函数的参数,参数类型数组。
jvm调用主函数时,传入的事new String[0]一个没有任何长度的数组。
03
(静态什么时候使用)
注意:对象的使用时为了封装数据,对象建立没有使用数据,没有建立对象的意义。
当对象中出现共享数据时,该数据被静态所修饰。
对象中的特有数据要定义成非静态存在与对内存中。
当功能内部没有访问到静态数据,那么该功能可以定义成静态的。
04
(静态的应用—工具类)
class ArrayTool
{
private ArrayTool(){}//防止被建立对象
public static int getMax(int[] arr)
{
int max=0;
for(int x=1;x<arr.length;x++)
{
if(arr[x]>arr[max]])
max=x;
}
return arr[max];
}
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;y++)
{
for(int y=0;y<arr.length-x-1;y++)
{
if(arr[y]>arr[y+1])
{
swap(arr,y,y++);
}
}
}
}
private static void swap(int[] arr,int a,int b)//私有化,只供内部使用
{
int temp=arr[a];
arr[a]=arr[b];
arr[b=temp;]
}
}
对象用于封装数据,可是ArrayTool的对象并未封装特有的数据。
操作数组中的每一个方法都没用到ArrayTool对象中特有的数据。
可以将array中的方法都定义成static,直接通过类名调用即可。
将方法都静态后,可以方便于使用,但是该类还是可以被其他程序建立对象的。
为了更为严谨,强制让该类不能建立对象。可以通过将构造函数私有化完成。
class ArrayToolDemo
{
public static void main(String[] args)
{
int[] arr={3,6,8,9,2,5};
int max=ArrayTool.getMax(arr);
System.out.println("max=+max")
/*ArrayTool tool=new ArrayTool();
int max=tool.getMax(arr);
System.out.println("max=+max")*/
}
}
06
(静态代码块)
格式:
static
{
静态代码块中的执行语句
}
特点:随着类的加载而执行,值执行一次,并优先于主函数。
用于给类进行初始化
class StaticCode
{
int num=9;
StaticCode()
{
System.out.println("b");
}
static
{
System.out.println("a");
//静态代码块只能调用静态成员
//System.out.println("a"+num);
}
{
System.out.println("c"+this.num);
}
StaticCode(int x)
{
System.out.println("d");
}
public static void show()
{
System.out.println("show run");
}
}
{
public static void main(String[] arge)
{
new StaticCode(4);
}
}
执行结果为a c9 d。创建了对象,有加载类。所以调用静态代码块。有创建对象,则调用构造代码块。
07
(对象的初始化过程)
Person p=new Person("zhangsan",20);
这句话都做了以下事情:
1、因为new用到了Person.class,所以会先赵大鹏Person.class文件并家寨到内存中。
2、执行该类中的static代码块,如果有,给Person.class类进行初始化。
3、在对内纯中开辟空间,非配内存地址。
4、在堆内存中建立对象的特有属性。并进行默认初始化。
5、对属性进行显性初始化。
6、对对象进行构造代码快初始化。
7、对对象进行对应的构造函数初始化。
8、将内存地址赋给栈内存中的p变量。
09、10
(单例设计模式)
设计模式:解决某一类问题最行之有效的方法。
java中23种设计模式:单例设计模式。解决一个类在内存中只存在一个对象
想要保证对象唯一:
1、为了避免其他程序过多建立该类的对象。先静止其他程序建立该类的对象(将构造函数私有化)
2、还为了让其他程序可以访问到该类的对象,只好在本类中自定义一个对象(在类中创建一个本类对象)
3、为了方便其他程序对自定义对象的访问,可以对外提供一些访问方式(提供一个方法可以获取到该对象)
饿汉式:Single类一进内存,就已经创建好了对象
class Single
{
privait static single s=new Single();
private Single(){}
private Single getInstance()
{
return s;
}
}
懒汉式:对象时方法被调用时,才初始化,也叫做对象的延时加载。
class Single
{
private static Single s=null;
private Single(){}
public static Single getInstance()
{
if(s==null)
s=new Single();
return s;
}
}
---------------------- <a href="http://www.itheima.com"target="blank">ASP.Net+Unity开发</a>、<a href="http://www.itheima.com"target="blank">.Net培训</a>、期待与您交流! ----------------------
0 0
- 黑马程序员——面向对象2
- 黑马程序员——面向对象2
- 黑马程序员—面向对象2
- 黑马程序员—面向对象(2)
- 黑马程序员—面向对象
- 黑马程序员—面向对象
- 黑马程序员—面向对象
- 黑马程序员——面向对象2:类与对象
- 黑马程序员——面向对象1:理解面向对象
- 黑马程序员———-面向对象
- 黑马程序员———面向对象
- 黑马程序员———面向对象
- 黑马程序员———面向对象
- 黑马程序员———面向对象
- 黑马程序员——面向对象
- 黑马程序员——面向对象总结
- 黑马程序员——面向对象
- 黑马程序员——C#面向对象
- jquery的eq()跟get()的区别
- 黄奕正式向老公黄毅清提出离婚 斥其造谣并家暴
- Android 权限汇总
- OpenWrt的主Makefile工作过程
- #include<bits/stdc++.h>包含C++的所有头文件
- 黑马程序员——面向对象2
- ArcEngine 读取Geodatabase
- jquery的选择器总结
- 动软代码生成V2.74模版简介
- mongodb备份还原的方法
- gmake和make 的区别
- IO - 同步,异步,阻塞,非阻塞
- 第八章作业Part1
- WebSphere8.0 server1启动失败