目录
1.本文主要内容简介
2.“类”的知识补充
3.总结
0.前言
本文重点在于讲解Java中类的相关知识的后半部分
若想要了解“类”的知识的前半部分,可以去看前面的文章
《[Java]开发安卓,你得掌握的Java知识3》
由于最终目的是要开发安卓app,
因此这里使用的IDE是AS(Android Studio)
(不会使用的可以参考下面这篇文章中的例子)
《[Java]开发安卓,你得掌握的Java知识2》
1.本文主要内容简介
类的基础知识补充
对应知识的相关细节
实际例子
2.“类”的基础知识补充
《[Java]开发安卓,你得掌握的Java知识3》中,
讲解了“类”的基础概念、属性、方法、对象等概念
本文我们则补充讲解:setter/getter、静态方法、单例设计模式、重载
什么是“setter/getter”
当类中的属性被设置为私有的(private)时候,外部无法随便访>问该变量
此时,如果还是想要在外部对对象的属性进行访问,使用setter/getter就是方法之一
setter就是一个接收器,如果拿人作为例子,
setter相当于是手。
别人给我们食物,一般不会也没办法给到我们的嘴里
因为我们的嘴是私有的
我们会用手去接收别人给过来的食物,然后放到嘴里,这就类似于setter的功能
public Person{
public String name;
private int age;
private int id;
}
如上代码,age和id是不能通过对象直接在外部访问的
Person p = new Person();
p.name = "小王"; //可以
p.age = 20; //不行,私有变量不能直接外部访问
p.id = 001;//不行,私有变量不能直接外部访问
不能直接外部访问,就得考虑使用setter/getter:
public Person{
public String name;
private int age;
private int id;
public void setAge(int age){
this.age = age;
}
public int getAge(){
return this.age;
}
public void setId(int id){
this.id = id;
}
public int getId(){
return this.id;
}
}
如此就可以在外部调用对应的函数来赋值、获取值:
Person p =new Person();
p.setAge(20);
System.out.println(p.getAge());//输出为20
什么是静态属性、方法
在上一篇文章中,我们已经大致讲过了静态方法的定义与使用
这里我们再次统一讲解一下
(1)从外观角度来说,
使用static修饰的属性变量、方法就是静态属性、静态方法
(2)从使用的角度来说,
静态属性、方法是可以直接使用类名.属性名或类名.方法的形式来调用的
(3)从内存的角度来说,
静态的属性、方法会在对象创建之前优先加载
需要注意:
什么时候使用静态方法?
一般是不需要对象去完成的方法,会写成静态方法
(不需要对象一般情况意味着不需要实例化对象,使用对象的属性来记录数据)
什么时候使用静态属性?
当需要定义一个不会再改变的常量的时候,会写成静态属性
(静态的属性只能赋值一次)
class Subject{
public static String[] name= {"计算机","数学","英语"};
}
class Person{
public static void sayHello(){
System.out.println("hello");
}
}
什么是单例设计模式
在一些程序中,会使用到类似管理器的东西,这种管理器如果创建出一个对象,会出现:无法保证程序的任意地方都能访问到该对象的问题(也不能重新创建一个对象)
为了避免这个问题,同时还要防止全局变量的产生,就需要用到单例设计模式
public PersonManager{
//1.创建一个静态的变量
public static PersonManager manaer = new PersonManager();
//2.构造函数私有化
private PersonManager(){}
public void showPerson(){
//具体函数定义
}
}
public staitc void main(String[] args){
PersonManager.manager.showPerson();
}
单例设计模式的具体实现步骤就是:
(1)将构造方法私有化
(2)创建一个静态的变量
以后要调用这个类的函数,则不要去实例化创建对象,而是用:
类名.manager.方法()的格式
(manager可以改,看你具体定义的时候写的是什么)
这样就可以避免类的对象因为作用域问题,
而在一些地方无法被调用的尴尬问题
什么是重载
所谓重载,简单来说,就是当函数a已经存在时,通过改变函数a的返回值、参数个数、参数类型中的一个或多个,而产生的同名但是返回值、参数、函数具体内容有一些不同的函数b
public void showText(String text){
System.out.println(text);
}
public void showText(int num){
System.out.println("num ="+num);
}
public int showText(int num){
if(num==1){
return 1;
}else{
System.out.println("num ="+num);
return 0;
}
}
同样是叫做showText,但是这三个函数却不尽相同,这就是函数的重载。
在调用的时候,根据返回值、参数的不同,会自动判断使用哪个函数
3.总结
(1)基本上将类的知识讲完了(还有一些日后再补充),有了这些知识基本上就可以正式去写一些Java代码了
(2)这里没有贴出实际例子,知识给了一些临时例子的理由是,面向对象的思维使得程序中各个部分都尽可能地形成了一个整体,零散的代码其实意义不大
(3)如果说C语言写代码时,要将问题尽可能往程序上靠拢,让问题服务于代码,那么Java可以说是反过来,让程序尽可能贴近于现实,将一切都尽可能地形成一个整体(封装),而不是只是在堆砌函数
(4)因此在日后,当某个程序写的比较完整后,才会考虑将代码贴出并且进行详细分析