学习过程中有不少时候遇到一些看似简单,做起来事倍功半的问题。我也想自己是个聪明人,学东西一听就懂,一学就会,马上就能灵活应用。但这种事不能强求,要么自己要看个十遍二十遍最后理清逻辑,熟练掌握。同以前的贴子一样,都是基础问题,只做学习记录。
--------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------
--复习:Java的方法分为抽象方法和具体方法。
具体方法有三种:构造方法 ,静态方法,成员方法;
构造方法是生成对象必须调用的,单例模式也在内部调用了。构造方法默认调用父类无参构造方法,也就是super();代表了生成对象的同时,同时建立了父类对象空间和子类对象空间,而且是向上溯源的,一直到Object这个根类。子类对象可以调用父类的属性和方法,这也是Java设计思想中“继承”的由来。举例:对象后面都默认带上了toString等方法,length属性,就是来自Object类。
静态方法是类调用的,一眼认出来,因为类首字母要求大写。多用于工具类,如Collections。
成员方法是类中定义的,由对象调用,包括了类中定义的方法,还有重写父类的方法,重写接口的方法,以及父类和父类往上的父类的方法。调用顺序是哪个离得近调用哪个。
--遇到问题:不知道方法在哪里找了?如下代码
public static void main(String[] args) {
Map map=new HashMap<>();
map.put("NO1","zhangsan");
map.put("NO2","lisi");
System.out.println(map);
/* map集合的遍历方式:面向对象,快捷键:变量名+for */
Set> entries = map.entrySet();
for (Map.Entry entry : entries) {
String key = entry.getKey();
String value = entry.getValue();
System.out.println(key+"-->"+value);
}
其中里面的getKey()和getValue()方法,找了set接口,找了Map接口都没找到。
后来在Map.Entry里找到了。
原因:没找到正确类型;entries是set<>集合类型,entry是集合中的元素,其类型是
Map.Entry,
这是由Map对象map调用entrySet()方法后Java给的类型,在Map.java里定义的接口,底层封装了看不见内容。
小结:Java是面向对象的语言,每一个数据都是对象;
每个对象都有对应的类型,方法在类型里去找。一定要认清数据类型。
-----------------------------------------------------2023.3.3update------------------------------------------------------
面向对象的三大特征:封装, 继承和多态。
从另一个角度去认识什么是对象?一切都是对象,还有一句话对象是指针,连起来就是一切都是指针。再和C语言的指针类比,明白了对象操作就是指针操作。一个例子:对象可以指向null
ArrayList ob = new ArrayList<>();
ob=null;
如果第一语言是C语言,并且对指针有一定认识的话,转过来之后会有一定领悟。
C语言中指针两大特征:一必须声明类型;二必须初始化,指针指向具体某个数据,不能使用野指针(好像是这么叫的)。Java对象的要求和指针是相同的。
不同点:
1.C语言指针是指向某个具体元素,而且对那块区域的大小是清楚的;
int * p = (int *)malloc(sizeof(4));
---表示建立一个int数组(指针可以等于数组),分配4个int元素类型大小的空间;
Java因为封装了数据结构,底层采用哈希表,是“数组+链表+红黑树(平衡二叉树)”结构,所以对大小不知道的。
2.指针指向某个具体元素
如下:明确知道p指向a[0]这个元素。
int a[3]={0,1,2};
int *p=a;
Java对象指向某个集合时,还可以用add()这类操作,推测用了链表一类的操作,只知道怎么用,并不能完全知道怎么实现的,原因也是因为被封装了
---以上是从语法角度说明什么是面向对象,下面从使用角度说明
面向对象:类里面包含属性和操作属性的方法,封装起来供其他类使用。
--------------------------------------------------------------------------------------------------------------------------------
需求是指用户对程序提出的要求,理解需求,站在用户角度构建的逻辑和写出的代码