JavaSE(1).封装
放寒假之后学了一小点JavaSE,所以今天总结一下之前学的内容
Java与C一个很大的区别就是C是面向过程的语言而Java是面向对象的
面向对象:三个特征:封装、继承、多态
以后开发:其实就是找对象使用。没有对象,就创建一个对象。找对象,建立对象,使用对象,维护对象。
从一个主函数说起
主函数:是一个特殊的函数。作为程序的入口,可以被jvm调用,jvm在调用主函数时,传入的是new String[0];
class
{
public static void main(String[] args)
{
System.out.println("Hello World");
}
}
1.class:类
(1).定义:对现实生活中事物的描述
2.对象
(1).定义:对某类事物,实实在在存在的个体
(2).与类的关系:
- 现实中存在的对象:张三、李四(java在堆内存中用new建立的实体 )
- 类(对他们的描述):提取对象中的共性内容,对具体的抽象,如,他们都是人(class Person)
- 描述的具体内容:姓名,年龄,性别,说话功能
3.public-------private
(1).public:代表着该函数的访问权限已经是最大的
(2).private:私有,权限修饰符,用于修饰类中的成员(成员变量,成员函数),私有只有本类可以访问
两种访问私有的方式:
- set(设置)
- get(获取)
class Person
{
private int age;
public void setAge(int a)//set获取法
{
age=a;
}
public int getAge()//get获取法
{
return age;
}
}
4.static(静态)
(1).定义:是一个修饰符,用于修饰成员(成员变量,成员函数)当成员被静态修饰后,就多了一个调用方式,除了可以被对象调用外,还可以直接被类名调用。类名.静态成员
(2).特点:
-
随着类的加载而加载。
也就是说:静态会随着类的消失而消失。说明它的生命周期最长 -
优先于对象存在
明确一点:静态是先存在的,对象是后存在的 -
被所有对象所共享
-
可以直接被类名所调用
(3).实例变量和类变量的区别
-
存放位置
类变量随着类的加载而存在于方法区中(加了static的)
实例变量随着对象的建立而存在于堆内存中(不加static的) -
生命周期
类变量生命周期最长,随着类的消失而消失
实例变量生命周期随着对象的消失而消失
(4).静态使用注意事项
-
静态方法只能访问静态成员
非静态方法既可以访问静态也可以访问非静态 -
静态方法中不可以定义this,super关键字
因为静态优先于对象存在,所以静态方法中不可以出现this
(5).静态利弊:
- 利:对对象的共享数据进行单独空间的储存,节省空间,没有必要对每一个对象都储存一份。可以直接被类名调用
- 弊:生命周期过长
访问出现局限性。(静态虽好,只能访问静态)
(6).静态的使用情况:
从两方面下手:因为静态修饰的内容有成员变量和函数
- 定义静态变量:当对象中出现共享数据时,该数据被静态所修饰,对象中的特有数据要定义成非静态存在于堆内存中
- 定义静态函数:当功能内部没有用到此类中的非静态数据(对象的特有数据)时
class Person
{
String name;
public static void show()//可以定义成static,因为没有涉及到此类中的特有数据`在这里插入代码片`
{
System.out.println("haha");
}
}
(7).应用:
每一个应用程序中都有共性的功能,可以将这些功能进行抽取,独立封装,以便复用(如:将数组的各种功能建立成ArrayTool类,数组由用户传入,不使用类中非静态数据,此处就可用static修饰函数)
(8).静态代码块
特点:随着类的加载而执行,只执行一次,用于给类进行初始化
5.构造函数
(1).特点:
- 函数名与类名相同
- 不用定义返回值类型
- 不可以写return语句
(2).作用:用于给对象进行初始化
(3).小细节:
- 当一个类没有自定义构造函数时,那么系统会默认给类加入一个空参数的构造函数
- 当类中自定义了构造函数后,默认的构造函数就没有了
(4).构造函数和一般函数的区别
- 写法
- 运行:构造函数是在对象一建立就运行,给对象初始化;一般函数是对象调用才执行,是给对象添加对象具备的功能//一个对象建立,构造函数只运行一次;而一般方法可以被该对象调用多次
(5).定义构造函数场合:当分析事物时,该事物具备一些特性或行为,那么将这些内容定义在构造函数中
(6).构造代码块是给所有对象进行统一初始化的,而构造函数是给对应的对象初始化
class Person
{
private String name;
private int age;
//Person(){}初始化语句,没有初始化时系统默认加
{
System.out.println("hello");
}//构造代码块
Person(String name)
{
this.name=name;
}
Person(String name,int age)
{
this.name=name;
this.age=age;
}
public void speak()
{
System.out.println("age="+this.age+" ...name="+name);
}
}
class
{
public static void main(String[] args)
{
Person A=new Person("LiSi");
}
}
6.单例设计模式:解决一个类中只存在一个对象的情况
(1).饿汉式(先初始化对象)
Single类一进内存,就已经创建好了对象
class Single
{
private static Single s=new Single();
private Single(){}
public static Single getInstance()
{
return s;
}
}
(2).懒汉式
对象是方法被调用时,才初始化,也叫做对象的延时加载。
Single类进内存,对象还没有存在,只有调用了getInstance方法时,才建立对象
class Single
{
private static Single s=null;
private Single(){}
public static Single getInstance()
{
if(s==null)
s=new Single();
return s;
}
}