[修饰符] class 类名
{
*构造代码块
零到多个 构造器
零到多个 Field(成员变量)
零到多个 方法
}
修饰符:public 、final、abstract
类名:必须是由一个或者多个有意义的单词连缀而成,每个单词首字母大写,其他字母全部小写,单词语单词见没有分隔符。
构造代码块:不同对象共性的初始化内容,不常见。
作用:给对象进行初始化。对象一建立,就运行,而且优先于构造函数执行
构造代码块和构造函数的区别:
构造代码块 |
是对所有对象统一进行初始化 |
构造函数 |
是给对应的对象进行初始化 |
构造代码块中定义的是不同对象共性的初始化内容。
构造器:用于对象的初始化。通过new关键词来调用,没有返回值,但返回该类的实例。构造函数只能执行一次,一般方法可以执行多次。定义构造函数的情况:当分析事物时,该事物存在具备一些特性或行为,那么这些内容定义在构造函数中。
一个类中,默认会有一个空参数的构造函数,这个默认的构造函数和权限和所属类一直如果类被public所修饰,那么默认构造函数则被public修饰
定义构造器格式:
[修饰符] 构造器名(形参列表)
{
//由零到多条可执行性语句组成的构造器执行体
}
一个类可以对应多个构造函数,以针对不同的对象。通过不同的参数列表来区分不同的构造函数。
Field(成员变量):定义该类或该类实例所包含的状态数据。
定义格式:
[修饰符] Field类型 Feild名 [=默认值],
例如:private int age = 1;
定义方法格式:
[修饰符] 方法返回值类型 方法名(形参列表)
{
//零到多条个执行性语句组成的方法体
}
static
static修饰的成员表明他属于这个类本身,而不属于该类的实例。在内存中,储存在方法区中。
static修饰的方法和Field,既可以通过类来调用,也可以通过实例来调用;
没有static修饰的方法和Field,只能通过实例来调用。
Person p = new Person();的实质
在栈内存(stack)中,引用变量p本身储存了一个地址值,指向实际的是堆内存(heap)中Person对象。
不管是数组还是对象,都只能通过引用来访问内存中的对象。
当p=null;时,Java的垃圾回收机制将回收Person()对象。
功能:每个应用程序中都用共性的功能。可以将这些功能进行抽取,独立封装,以便复用。
用加建立的对象 Tool使用这些方法,
发现问题:
1.对象是用于封装数据的,但是ArrayTool中并未封装特有数据
2.操作数组的每一个方法都没有用到ArrayTool中的特有数据
可以将ArrayTool中的方法都定义成Static的,并通过类名调用。
方法静态后,方便使用,但是该类还是可以被其他程序建立对象的。
为了严谨,强制让该类不建立对象,可以通过构造函数私有化完成
private ArrayTool(){}
实例代码:1-2.java
将ArrayTools.class 文件发给其他人,其他人就可以将文件复制到classpath路径下,就可以使用该工具类
开始制作说明书,java 说明书通过文档注释来完成,但必须是public修饰的。
/**
这是一个数组的工具类,取最大值,最小值,排序,打印数组
@author Barry
@version 0.1
*/
主函数的定义:
public static void main (String[] args) 实例代码:MainDemo.java
主函数:一个特殊的函数,作为一个特殊的入口,可以被JVM调用
主函数的定义:
public :代表着函数访问的权限是最大的
static:代表主函数随着类的加载就已经存在了
void:主函数没有具体的返回值
main:不是关键字,但是是一个特殊的单词,可以被jvm识别
函数的参数:(String[] args) 是一个字符串类型的数组,
主函数是固定格式的,jvm jvm 在调用主函数时,传入了new String[0]
*/
class MainDemo
{
publicstatic void main(String[] args) //args = arguments
{
System.out.println(args); // args[0] 主函数传参
System.out.println(args.length);
}
publicstatic void main(int i) //主函数的重载
{
}
}
设计模式: (定义)解决某一类问题最行之有效的方法。java中有23中设计模式。实例代码:SingleDemo.java
单例设计模式:解决一个类在内存中只存在一个对象。
想要保证对象惟一性,
1.禁止其他程序建立该类的对象
2.为了让其他程序可以访问到该类对象,只好,在本类中自定义一个对象
3.为了方便其他程序对自定义对象的访问,可以对外提供一些访问方式
这三类如何用代码体现呢?
1.将构造函数私有化
2.在类中创建一个本类对象。
3.提供一个方法可以获取到该对象。这个方法必须是静态方法,需要用类名来调用该方法,所以定义对象时,也需要用static来定义。
如何应用:
对于事物该怎么描述,就怎么描述。
例如:配置文件的配置信息,无论怎么定义对象,都只是改变一个单实例。
/*
这个事先初始化对象
称为“饿汉式”
Single类一进内存,就已经建立对象了。
*/
//记录原则:定义单例,建议饿汉式
class Single
{
privateSingle (){}
privatestatic Single s = new Single();
publicstatic Single getInstance()
{
returns;
}
}
/*
当对象被调用是,才初始化,也叫做对象的延时加载,
称为“懒汉式”
Single 类进内存,对象还没有存在,只有调用了getInstance方法时候,才建立对象。
*/
class Single
{
privateSingle(){}
privatestatic Single s = null;
publicstatic getInstance()
{
if(s==null)
{
s= new Single();
}
returns;
}
}
用法:是一个修饰符,用于修饰Field(成员变量)和成员函数
当成员变量被静态修饰后,除了被对象调用外,
还可以被类名调用,类名:静态成员。
实例代码:StaticDemo.java
static特点:
1.随着类的加载而加载
static 会随着类的消失而消失,
2.优先于对象存在
静态实现存在,对象时后存在
3.被所有的对象共享
4.可以直接被类名调用
5.主函数是静态的
实例变量和类变量的区别:
1.存放位置:
类变量:随着类的加载而存在于方法区中
实例变量:随着对象的建立而存在与堆内存中
2.生命周期
类变量生命周期最长,随着类的消失而消失
实例变量生命周期随着对象的消失而消失
静态的使用注意事项:
1.静态方法只能访问静态成员
非静态方法可以访问非静态成员
2.静态方法中不可以定义this,super关键字
静态的优点:节省内存空间,没有必要对每一个对象都开辟共享数据存储空间。可以直接被类名直接调用
静态的缺点:生命周期过长,访问出现局限性(只能访问静态)
什么时候使用静态?实例代码:StaticDemo2.java
要从两方面考虑
什么时候定义静态变量呢?
什么时候定义静态函数呢?
当对象中出现共享数据时,该数据被static所修饰
对象中的特有数据要定义成非静态,存在于堆内存中。
什么时候定义静态函数呢?实例代码:StaticDemo3.java
当功能内部没有访问到非静态数据,
那么该功能可以被静态修饰
静态的应用
每个应用程序中都用共性的功能
可以将这些功能进行抽取,独立封装
以便复用