关键词: 联系 调用 函数 集合
- 现实中的联系
联系有很多含义。它可以是你手机里的联系(人),通讯工具中的联系(如QQ);它也可以指一个动作(如:有时间联系我)。等等。通常来说,这些都是狭义的联系。而本文要说的是哲学中的联系,可以说是复杂含义的联系或广义的联系。
在哲学中,联系指事物内部矛盾双方和事物之间所发生的关系。听起来不好理解对吧?其实我们不必搞懂它,我们的目的是知晓联系是什么,而它可以有更有趣的解释。我是唯物主义者,所以先给联系一个声明:联系是客观存在的。下面我们来进行一些有意思操作。
通过把第一句中的‘事物’替换为‘对象’,我们能得出一些推论。(注意,替换后意思可能改变,但它有利于我们理解联系)改变后为:联系指对象内部矛盾双方和对象之间所发生的关系。回忆前文提到的对象,对象中有状态和行为,当时我分别称它们为静的东西和动的东西。而静动便可以理解为对象内部的矛盾双方,那么这句话就可以这样理解:联系就是说一个对象的状态和行为与另一个对象之间发生的关系。我们仍然举马的例子(可能我比较喜欢马)。马作为一个对象(实例为某匹马),当它受到威胁时,比如一头雄狮要来吃它。马的状态可能由静态变到紧张态,它还可能发出行为:嘶叫。当然如果它正常的话紧接着就是奔跑,逃脱狮子的追杀。狮子追马就是一个联系。
现实世界中几乎任何一个对象都可以和其它任意对象有联系,区别是有的联系只是机械的相加,没有实际意义。这里我说的可以有联系是站在人类视角,任何对象之间都有联系没错,而人类赋予了他们实际含义。
现在基本了解了什么是联系。我们接下来要做的仍然是举一反三,但在这之前我声明一下本文接下来要用到的数学名词:赋值,函数,集合。
在哲学中,联系指事物内部矛盾双方和事物之间所发生的关系。听起来不好理解对吧?其实我们不必搞懂它,我们的目的是知晓联系是什么,而它可以有更有趣的解释。我是唯物主义者,所以先给联系一个声明:联系是客观存在的。下面我们来进行一些有意思操作。
通过把第一句中的‘事物’替换为‘对象’,我们能得出一些推论。(注意,替换后意思可能改变,但它有利于我们理解联系)改变后为:联系指对象内部矛盾双方和对象之间所发生的关系。回忆前文提到的对象,对象中有状态和行为,当时我分别称它们为静的东西和动的东西。而静动便可以理解为对象内部的矛盾双方,那么这句话就可以这样理解:联系就是说一个对象的状态和行为与另一个对象之间发生的关系。我们仍然举马的例子(可能我比较喜欢马)。马作为一个对象(实例为某匹马),当它受到威胁时,比如一头雄狮要来吃它。马的状态可能由静态变到紧张态,它还可能发出行为:嘶叫。当然如果它正常的话紧接着就是奔跑,逃脱狮子的追杀。狮子追马就是一个联系。
现实世界中几乎任何一个对象都可以和其它任意对象有联系,区别是有的联系只是机械的相加,没有实际意义。这里我说的可以有联系是站在人类视角,任何对象之间都有联系没错,而人类赋予了他们实际含义。
现在基本了解了什么是联系。我们接下来要做的仍然是举一反三,但在这之前我声明一下本文接下来要用到的数学名词:赋值,函数,集合。
- Java 中的联系
先从一个对象说起。假如你创建了一个类A,并给它分配了字段和方法,即对象的状态和方法。为了使A类更有意义,分别给对象成员赋值,我称它为出厂化设置。在方法中也定义了相应操作。下面写出:
class A{
private int a = 1;
static String s = "Hello!";
public A() { } //构造方法,初始化为默认值
public int get_a() { //返回a的值
return this.a;
}
现在你有了一个类A,但你能做什么呢?你好像什么都不能做,比如你不能将字符串s输出。如果你稍微了解一点java,你就能做好多事情。输出内容,你会在主函数main添加:
System.out.println("s= "+A.s);
//控制台显示:Hello!
别小看这条语句,它包含了很多信息。如果你懂得多一点,你会知道println()是PrintStream类所调用的方法,out则是一个静态PrintStream对象,而它又是system类的一个属性,再往深处扩展,system存在于lang类库中,java.lang是默认导入到每个java文件中的,因此不必在开头声明import(类库)。(A.s,s是静态变量)
好了有点晕。不过没关系,这里我们的目的是输出s,下面我来理一下这当中的机理。你有了一个类A,它有字段和方法,你想用它的字段或方法实现输出s的操作,于是你调用了PrintStream类的println()方法,然后成功实现。
请注意‘调用’一词,它体现了联系,这也是本文要讲的主旨。输出s是一个简单的例子,下面我们在延伸一下。
假如你又创建了一个类B,比如:
但是上述代码并不能执行,因为你没有初始化n,即给n赋一个值。(关于赋值我会在之后的文章中详细介绍)
但是你想让n等于类A中a的值,该怎么做呢?
你需要某种中介将这两个对象联系起来。其实不复杂,只要用这几条语句即可实现:
对,你创建了一个对象A,它已经被定义好了(A已存在),并用x作为这个对象的名字,x中有关于a的初始化
“int a = 1;”所以x.get_a()表示你调用了x的方法,n=x.get_a(),你成功把a值成功赋给了n。
到此完成联系。可表述为类B中字段n联系了类A中方法get_a().
static的用法。
注意到类A中有一个static字段:String s="Hello!"; 你想在类B中输出s,只需A.s即可。回想在上一篇博文中static 的介绍,即是这样用。(静态方法类似)
简单谈一下我的理解。 在编程中函数和方法意义相同,但是最初为什么叫函数呢?我是这样猜想的:方法中的传入参数和返回参数刚好对应函数中的自变量和因变量。所以方法也叫函数(在c/c++中称呼)。
再说一下集合*。其实一个类就相当于一个集合,类与类之间的联系就是集合之间的联系,类中成员即集合中的元素。另外集合的运算也体现了类之间的交互和关系。
注释:*1(集合):指数学中的集合。
(推荐阅读:《Thinking in Java》 (美) Bruce Eckel 著 。引用原书的评论:本书赢得了全球程序员的广泛赞誉,即使是最晦涩的概念,在Bruce Eckel 具有亲和力的文字和小而直接的编程示例面前也会化解于无形。)
好了有点晕。不过没关系,这里我们的目的是输出s,下面我来理一下这当中的机理。你有了一个类A,它有字段和方法,你想用它的字段或方法实现输出s的操作,于是你调用了PrintStream类的println()方法,然后成功实现。
请注意‘调用’一词,它体现了联系,这也是本文要讲的主旨。输出s是一个简单的例子,下面我们在延伸一下。
假如你又创建了一个类B,比如:
//计算给定数字的平方并输出。
class B {
public static void main(String[] args) {
int n;
int m = way(n); //未初始化n,修改见下
System.out.print("m*m ="+m);
}
public static int way(int n) {
return n*n;
}
但是上述代码并不能执行,因为你没有初始化n,即给n赋一个值。(关于赋值我会在之后的文章中详细介绍)
但是你想让n等于类A中a的值,该怎么做呢?
你需要某种中介将这两个对象联系起来。其实不复杂,只要用这几条语句即可实现:
A x = new A();
n = x.get_a();
//控制台显示:1
对,你创建了一个对象A,它已经被定义好了(A已存在),并用x作为这个对象的名字,x中有关于a的初始化
“int a = 1;”所以x.get_a()表示你调用了x的方法,n=x.get_a(),你成功把a值成功赋给了n。
到此完成联系。可表述为类B中字段n联系了类A中方法get_a().
static的用法。
注意到类A中有一个static字段:String s="Hello!"; 你想在类B中输出s,只需A.s即可。回想在上一篇博文中static 的介绍,即是这样用。(静态方法类似)
- 函数和集合(浅谈)
简单谈一下我的理解。 在编程中函数和方法意义相同,但是最初为什么叫函数呢?我是这样猜想的:方法中的传入参数和返回参数刚好对应函数中的自变量和因变量。所以方法也叫函数(在c/c++中称呼)。
再说一下集合*。其实一个类就相当于一个集合,类与类之间的联系就是集合之间的联系,类中成员即集合中的元素。另外集合的运算也体现了类之间的交互和关系。
注释:*1(集合):指数学中的集合。
(推荐阅读:《Thinking in Java》 (美) Bruce Eckel 著 。引用原书的评论:本书赢得了全球程序员的广泛赞誉,即使是最晦涩的概念,在Bruce Eckel 具有亲和力的文字和小而直接的编程示例面前也会化解于无形。)