Java中的编程细节

前言:

学习过程中有不少时候遇到一些看似简单,做起来事倍功半的问题。我也想自己是个聪明人,学东西一听就懂,一学就会,马上就能灵活应用。但这种事不能强求,要么自己要看个十遍二十遍最后理清逻辑,熟练掌握。同以前的贴子一样,都是基础问题,只做学习记录。

 --------------------------------------------------------------------------------------------------------------------------------

目录:

1.方法在哪里?

2.面向对象指的是什么?

3.什么是理解需求?

 --------------------------------------------------------------------------------------------------------------------------------

1.方法在哪里?

--复习: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------------------------------------------------------

2.面向对象指的是什么?

面向对象的三大特征:封装, 继承和多态。

从另一个角度去认识什么是对象?一切都是对象,还有一句话对象是指针,连起来就是一切都是指针。再和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()这类操作,推测用了链表一类的操作,只知道怎么用,并不能完全知道怎么实现的,原因也是因为被封装了

---以上是从语法角度说明什么是面向对象,下面从使用角度说明

面向对象:类里面包含属性和操作属性的方法,封装起来供其他类使用。

-------------------------------------------------------------------------------------------------------------------------------- 

3.什么是理解需求?

需求是指用户对程序提出的要求,理解需求,站在用户角度构建的逻辑和写出的代码

你可能感兴趣的:(java,jvm,开发语言)