这是一个新的专栏,记录我自学Berkeley CS 61B的笔记,作业等等。CS 61B作为CS入门的神课,会涉及到面向对象编程java和数据结构两方面的知识,笔者将会记录课程的关键知识,希望对你会有所帮助。 课程视频:https://www.bilibili.com/video/BV18x411L7yy Object: A repository of data Java在声明一个Object(如String)的时候,会构建一个Variable,这个Variable实际上有点类似于C++的指针,或者叫reference,他是会指向一个String Object,但是他本身并不是一个String Object,而只是一个指向String的Variable。 例如: 这里的new String()实际上就是构建了一个空的String Object,赋值的过程就是将myString指向了这个Object 如图: 再例如: 实际上,在进行s = “Yow!” 的操作的时候,java不会改变刚才那个空Object的结果,实际上,Java做的是重新生成了一个Object,这个Object的内容是“Yow!”,然后将s重新赋值到这个新的Object上。 再来几个例子: 我们可以发现对于s2 s3的用法,都指向了原来的s,只有s4的用法才是构建了一个新的Object,可以说是非常节省内存了。用示意图来表示就是这样: 再介绍几个对string object的常用method 说到java IO,我们用到的Class是System,System Class下面会有专门用于很多用户交互的Objects 以output为例,System.out就是System Class下面的一个Object,但是它本身没有输出的功能,System.out实际上就是一个Variable,指向了一个PrintStream Object,关于具体的PrintStream Object是啥,可以看这篇文章https://blog.csdn.net/lili13897741554/article/details/82430113,可以看到这个Object有一个Method就是println。所以才有了我们上面代码中的System.out.println()。很复杂有木有! 同样的,System.in也是一个Variable,指向了一个InputStream Object,但是input比较复杂了,因为output是有啥输出啥就可以了,但是input你必须要等用户敲完回车,这才算是输入完成了,然后再去处理这一整行的东西,于是就用到了readLine,readLine是基于BufferReader的,BufferReader又是基于InputStreamReader,InputStreamReader又是基于InputStream,也就是前面说的System.in。(欲知详情,要看java online API) InputStream:读取原始数据,应该是有点类似于电信号 这样的好处就是我们如果想改掉某些功能(比如我们要换成非键盘输入,也是非常容易就可以换的) 例子:(函数功能:输入一行输出一行) ps,最后一定要存成SimpleIO.java的文件,再编译
Professor:Jonathan Shewchuk
课程链接:https://people.eecs.berkeley.edu/~jrs/61b/---------------------------这是分割线---------------------------
Lecture1 Course overview, Using objects
文章目录
Goals of CS 61B
Object Oriented Programming 概述
Class: Type of object
Method: A class may inherit properties from a more general class
eg: ShoppingList inherits from List the property of storing a sequence of items.
Polymorphism: One method works on several classes, even if the classes need different implementations
eg: “addItem” method to every kind of list, although adding item to a shopping list is different from a shopping cart.
Objected-Oriented: Each object knows its class and methodsjava String Object
String myString; myString = new String();
如果没有第二行的话,myString就是一个null pointer,也就是指向nothing。
All “null” pointer don’t point to anything, they all point to the same “Nothing”.
String s = new String(); s = "Yow!"
如图:
String s = new String(); System.out.println(System.identityHashCode(s)); s = "Yow!"; System.out.println(System.identityHashCode(s)); String s2 = s; System.out.println(System.identityHashCode(s2)); String s3 = "Yow!"; System.out.println(System.identityHashCode(s3)); String s4 = new String(s); System.out.println(System.identityHashCode(s4)); 把这几个的地址输出,得到 789451787 1950409828 1950409828 1950409828 1229416514
这种方式还有另外一个好处,就是当s和s2同时指向同样一个Object的时候,s的改变仅仅就是s指向了另外一个Object,对s2毫无影响。换句话说,一个String Variable,要是想改变这个Variable所指代的String,只能是构建一个新的String,String is immutable。其实java的大部分object都是可以改变的,只有String不行。我理解可能是因为String用的太多了,这样弄会更高效。
另外,当没有任何Variable指向某个Object的时候,java会有一个garbage collector,回收掉这部分的内存。String s = "Yow!"; s.toUpperCase();//这句会构建一个“YOW!”的Object,但是不会改变s System.out.println(s); String s2 = s.toUpperCase()+s.concat("!!"); System.out.println(s2); //String s6 = s*2;(不能这么写,会报compiler error) 输出: Yow! YOW!Yow!!!
java I/O Classes and Objects
InputStreamReader:把原始数据转化为characters(用的Unicode,2 bytes long)
BufferReader:把前面读的东西组合成一行textimport java.io.*; //最基础的库是java.lang,这个不用import,其余的如果想用都是需要import的 class SimpleIO{ public static void main(String[]arg)throws Exception{ //整个函数会从这个main开始运行 //上面这一行看不懂老师说,以后会讲hhhhh BufferedReader keybd = new BufferedReader(new InputStreamReader(System.in)); System.out.println(keybd.readLine()); } }
本网页所有视频内容由 imoviebox边看边下-网页视频下载, iurlBox网页地址收藏管理器 下载并得到。
ImovieBox网页视频下载器 下载地址: ImovieBox网页视频下载器-最新版本下载
本文章由: imapbox邮箱云存储,邮箱网盘,ImageBox 图片批量下载器,网页图片批量下载专家,网页图片批量下载器,获取到文章图片,imoviebox网页视频批量下载器,下载视频内容,为您提供.
阅读和此文章类似的: 全球云计算