1. 什么是面向对象,认识基础概念
-
面向过程思想
依照步骤,逐一进行操作
-
面向对象思想
将问题分类,先解决哪一类,在解决哪一类。对分类进行单独思考。然后在对某个分类下的细节进行面向过程的思索
小结:
首先 要理解面向对象思想,我们可以对比面向过程去思考
其次 对于描述复杂的事务,为了从宏观上把握,从整体上合理分析,我们需要使用面向对象的思路来分析整个系统。但是,具体到微观操作,仍然需要面向过程的思路去处理。
2. 回顾方法的定义
修饰符 返回值类型 方法名(...方法参数){
//方法体
return 返回值;
}
2.1 方法定义的示例
- demo
//返回String类型的demo
public String sResult(){
return "HelloWorld!";
}
//返回int类型的demo
public int iResult(int a, int b){
return a > b ? a:b;
}
2.2 结束语句关键字的使用
- break :跳出switch 语句,结束整个循环
- controller:结束当前次循环
- break:结束方法,返回一个结果
这个小知识点,属于一个小细节,一定要掌握清楚他们之间的区别。要知道三个关键字分别使用在什么场景下,以及三个关键字之间的区别是什么。
另外在强调一个点,就是选择结构switch的default关键字的使用:
在选择结构中,不可将default关键字作为选择结构的第一个匹配条件,至于这一个小细节,我们首先需要明白,default相当于是一个默认值的匹配,也就是说当没有可以匹配到的case: 时,会匹配到default当中,如果放在选择结构的第一个匹配,那么将不会匹配到其余的case。
2.3 方法名的定义规则
方法名的定义要采用驼峰命名
见名知意
//关于驼峰命名法,我们要牢靠的记住,大驼峰用来给类的命名,其余的方法和属性命名都用小驼峰。
2.4 关于方法的参数列表
(参数类型 参数名)
一个方法可能会有多个参数
还可以定义可变参数,可变参数,定义完之后,后面不能在定义别的参数,也就是说,可变参数要放在参数列表的最后一个进行定义。一个参数列表中,只能定义一个可变参数。
2.5 关于异常抛处的关键字使用
方法定义 抛处异常要使用 throws 关键字
之后跟上异常类型
throw 和 throws 要分清楚。
throw是使用在方法内部的,如果方法内部的逻辑中存在异常,而且没用使用 try 和 catch进行处理,那就需要将异常向上抛处。方法内部的异常抛出就使用throw关键字,内部抛出了异常,方法上也需要抛出异常,方法上的异常抛处就用throws 。
但是只单纯将异常抛出,而没有进行处理的话,那调用这个方法的时候需要处理异常,因为之间都是将异常进行抛出,没有进行处理,所以切记调用这个方法的使用还是会存在异常的,所以需要进行处理。
3. 回顾方法的调用
3.1 静态方法和非静态方法的调用
- 静态方法的调用:
类名. 方法名
- 非静态方法的调用:
调用非静态的方法,需要先实例化该方法的对象
因为被静态关键字修饰的东东是和类一起被加载的,所以可以直接通过类名进行调用。
非静态的方法可以调用静态方法,静态方法不能调用非静态的方法,这个问题也很明了,总之就是静态和类一起进行加载。
总结:
-
方法的调用方式有两种,一种是使用类名直接调用,一种是实例化对象在进行调用。
-
前者是针对静态方法的调用,后者是针对非静态的普通方法的调用。
-
而静态方法之间可以直接进行调用,而非静态的方法之间也可以直接进行调用。
-
但是今天方法不可以调用非静态方法,因为静态方法是和类一起被加载的,静态方法调用非静态的方法,非静态方法还没有被加载,所以不能进行调用。
3.2 形式参数和实际参数
形式参数只是形式上的参数,例如方法的参数列表中定义的参数就是形式参数,可以理解成,形式上的只是用于占位的。
实际参数是具有具体实际值的参数,例如调用方法时,给其传递的参数都是实际参数。
3.3 值传递和引用传递
关于这块内容我们看下面的codedemo进行理解。
- 值传递 的 示例demo
public class Demo1{
public static void main(String[] args){
int a =1;
System.out.println(a); //a 是1
//采用静态的调用方法
Demo1.change(a); //类名.方法
System.out.println(a); //此时的值是多少?
//此时sout的语句输出的还是1,因为java是值传递的
}
public static void change(int a){
a =10;
}
}
- 引用传递 的 示例demo
//对象是引用传递,但是本质是值传递
public class Demo2{
public static void mian(String[] args){
Person person = new Person();
System.out.println(person.name); //name =null
Demo2.change(person);
System.out.println(person.name); //此时,name的值为 兔C
}
public static void change(Person person){
//Person 是一个对象:指向的是 Person person = new Person();
//这是一个具体的人,可以改变属性!
person.name ="兔C";
}
}
//一个类中只可以有一个 public class,但是可以有多个 class
//定义了 Person类,有一个属性:name
class Person{
String name;
}
//这里隐含了两个新的概念,对象和内存,我们在下面会进行详细的讲述。
值传递和引用的传递的区别不好进行直观的概述,直观的描述不够精准,但是其中的区别也很容易看出,值传递就是将自己的值传递过去。例如第一个示例的a,把自己的值1传递给了调用方。
引用传递传递的是地址值,传递的接收方 地址也指向了 传递方,所以此时的值都为 兔C了。
时间这玩意真是不可控,在这一个简单的计量单位里,涵盖了太多的未知,从一月份的一篇博客,转眼已经到了2月9号了,博客的数量直观的表达了我近期的学习产量,简直恐怖如斯。
虽然产量减少,但是。。。没有停产,本来我打算梳理完Java SE 整个发出来的,但是后来发现知识点整篇表达出来过于混乱,和不易查阅,然后进行了拆分。经拆分之后,拟定了后续的计划,用最快的效率更新完 Java SE 部分 然后去生产一下算法。额…还有一个额外的,就是本人计划学习英语音标,如果方便,后期也可以分享给大家。
好了,以上是对于博文和近期学习的一个规划,下面我们进入正题,近期连载博文内容可能过于简短,但是内容一定直观易懂,帮助我们更快速,更深刻的理解 Java SE。每篇的简单,不是为了混文章的数量,而是为了保证方便查阅,仅此而已,不知不觉一大坨了,我把这一大坨的废话放在结尾,崇仰唯物主义精神,不要活的这么复杂,所以没用的东西滚去最底下。