A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

© 杨文君老师 中级黑马   /  2016-4-25 10:22  /  1054 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

在我聊过的部分同学里,有小数同学反映,对于课堂的知识点串不起来,新旧知识点之间难以衔接,整体性印象不强,记忆相对零散,针对这种情况,这里提供一下我的一些想法,大家可以照着这种方式,来给出自己把知识点串起来的方法,示例如下:  我要学编程,首先要有电脑,即先学习计算机的基础知识,那么什么是计算机呢?计算机(Computer)全称:电子计算机,俗称电脑,是一种能够按照程序运行,自动、高速处理海量数据的现代化智能电子设备,由硬件和软件所组成,硬件是指计算机系统中由电子,机械和光电元件等组成的各种物理装置的总称,由运算器、控制器、存储器、输入设备和输出设备五大部件组成,这些物理装置按系统结构的要求构成一个有机整体,为计算机软件运行提供物质基础,软件可以使计算机按照事先预定好的顺序完成特定的功能,照其功能划分为系统软件如Windows系统与应用软件如QQ聊天软件,软件是按照特定顺序组织的计算机数据和指令的集合,软件的制作过程就是开发,软件开发就是借助开发工具与计算机语言制作软件,计算机语言分为机器语言,汇编语言,高级语言如Java,知道了计算机语言就要知道人与计算机是如何打交道的即人机交互的方式有图形化界面和DOS命令行方式,那打开DOS命令行就要输入即要知道键盘的功能键和快捷键,然后学习如何打开DOS命令行,打开后又要学习常见的命令行输入玩玩,这样就学完了计算机的基础知识,回到我要学编程,我们学的是Java,那么就要学习Java语言概述,就要知道Java语言的发展史,知道Java语言的版本,知道Java语言的平台,即J2SE是为开发普通桌面和商务应用程序提供的解决方案,该技术体系是其他两者的基础,可以完成一些桌面应用程序的开发,J2ME是为开发电子消费产品和嵌入式设备提供的解决方案,J2EE是为开发企业环境下的应用程序提供的一套解决方案,该技术体系中包含的技术如 Servlet、Jsp等,主要针对于Web应用程序开发,还要知道Java语言特点即简单性,解释性,面向对象,高性能,分布式处理,多线程,健壮性,动态,结构中立,安全性,开源,跨平台,那么就要知道Java语言跨平台原理即只要在需要运行java应用程序的操作系统上,先安装一个Java虚拟机(JVM Java Virtual Machine)即可,由JVM来负责Java程序在该系统中的运行,但不同的操作系统有不同的虚拟机,A系统的虚拟器不能用在B系统上,所以虚拟机不是跨平台的,那么什么包括虚拟机呢?JRE即Java运行环境包括Java虚拟机(JVM Java Virtual Machine)和Java程序所需的核心类库等,如果想要运行一个开发好的Java程序,计算机中只需要安装JRE即可,那么什么包括JRE呢?JDK即Java开发工具包是提供给Java开发人员使用的,其中包括了JRE,也包含了java的开发工具,其中的开发工具有编译工具(javac.exe),打包工具(jar.exe)等,所以安装了JDK,就不用再单独安装JRE了,那么就要知道JDK的下载和安装,就想知道JDK安装路径下的目录即bin目录用于存放一些可执行程序,如javac.exe(java编译器)、java.exe(java运行工具),jar.exe(打包工具)和javadoc.exe(文档生成工具)等,db目录是一个小型的数据库,从JDK 6.0开始,Java中引用了一个新的成员JavaDB,这是一个纯Java实现、开源的数据库管理系统,这个数据库不仅轻便,而且支持JDBC 4.0所有的规范,在学习JDBC 时,不再需要额外地安装一个数据库软件,选择直接使用JavaDB即可,jre目录"jre"是 Java Runtime Environment 的缩写,意为Java程序运行时环境,此目录是Java运行时环境的根目录,它包括Java虚拟机,运行时的类包,Java应用启动器以及一个bin目录,但不包含开发环境中的开发工具,include目录由于JDK是通过C和C++实现的,因此在启动时需要引入一些C语言的头文件,该目录就是用于存放这些头文件的,lib目录lib是library的缩写,意为 Java 类库或库文件,是开发工具使用的归档包文件,src.zip文件为src文件夹的压缩文件,src中放置的是JDK核心类的源代码,通过该文件可以查看Java基础类的源代码,安装好了JDK就包括了JRE即Java运行环境,那么就想开发了,那么就要知道一些Java开发工具,就可以进行我们的第一个小程序HelloWorld案例的编写即class HelloWorld {
                        public static void main(String[] args) {
                                System.out.println("HelloWorld");
                        }
                }
你写的过程中可能出现以下问题即找不到文件即文件扩展名隐藏导致编译失败或者文件名写错了,单词拼写问题即class写成Class,String写成string,System写成system,main写成mian,括号匹配问题即把类体的那对大括号弄掉一个,把方法体的那对大括号弄掉一个,把输出语句的那对小括号弄掉一个,中英文问题即提示信息错误,非法字符, \????的格式,注意,java编程中需要的基本上都是英文字符,又或者你写的乱七八糟不太规范,那就要学习Java语言的书写格式即大括号要对齐,并且成对写,左大括号前面有空格,遇到左大括号要缩进,方法和程序块之间加空行让程序看起来清晰,并排语句之间加空格,例如for语句,运算符两侧加空格,写好了HelloWorld代码,你就想编译和运行,那就要用到JDK安装目录下的bin目录才有的javac.exe和java.exe可执行文件,如果你当前不在这个目录,又想编译和运行,就要通过配置path环境变量去告诉系统通过指定的目录找到他们,那么就要学习配置path环境变量如win7系统右键点击桌面计算机→选择属性→选择高级系统设置→选择高级选项卡→点击环境变量→下方系统变量中查找path→双击path→将jdk安装目录下的bin目录添加到最左边并添加分号,还有第二种配置方式即先配置JAVA_HOME,填入JDK的安装目录,再修改path,填入%JAVA_HOME%\bin;来动态引用,那么找到可执行文件后就可以通过javac.exe命令编译代码生成字节码.class文件,然后通过java.exe命令运行,但是在JDK1.5之前如果你的当前目录没有字节码,就可以通过配置classpath环境变量来指定字节码文件所在的目录,但是在JDK1.5之后就不用配置了,默认是当前目录,如果你配置了,每次找字节码文件都到你配置的目录找,假如我不在你配置的目录写源文件自然编译生成的字节码文件也不在配置目录,在配置目录,或者源文件目录运行字节码文件就会报错找不到,所以还是不要配置好,如果你实在要配置,并且可以在当前目录下运行字节码文件,可以在配置目录的前面加上.;即点和分号,这样,找字节码时会先在当前目录找,找不到就去配置目录找,HelloWorld案例里面是指简单的输出一个语句,是不是想往里面加入更多的东西?那就要学习注释即单行注释//后面跟注释内容,多行注释/*注释内容*/,文档注释/**注释内容*/,注释的作用即解释说明程序,帮助我们调试错误,还有关键字即被Java语言赋予特定含义的单词,关键字的特点即组成关键字的字母全部小写,常见关键字即public static void class等,关键字的注意事项即goto和const作为保留字存在,目前并不使用,还要学习标识符即就是给类,接口,方法,变量等起名字时使用的字符序列,还要知道标识符的组成规则即英文大小写字母,数字字符,$和_,标识符注意事项即不能使用关键字,不能以数字开头,还要知道标识符中常见的命名规则即包最好是域名倒过来,要求所有的字母小写,类或者接口如果是一个单词首字母大写,如果是多个单词每个单词首字母大写,方法或者变量如果是一个单词全部小写,如果是多个单词,从第二个单词首字母大写,常量如果是一个单词,所有字母大写,如果是多个单词,所有的单词大写,用下划线区分每个单词,第一天完.

这里我写的相对啰嗦,仅仅提供一个方式参考而已,读者按照自己的方式,自行精简,另外还有同学问我有没有一些小总结,小笔记,嗯,这个,每个人都可以自己在课堂上好好总结,好好记笔记,下面是一些我的小笔记,只是用来快速浏览回顾知识用的,不太详细,如下:
1、引用类型的形式参数的改变直接影响实际参数,但字符串即String例外。
2、面向对象是基于面向过程的,但面向过程是以函数为基础完成各种操作,强调过程,而面向对象却是以对象为基础完成完成各种操作,强调的是对象或者说结果。
3、面向对象的思想是更加符合人们思考习惯的思想,能把复杂的事情简单化,能把我们从执行者变成了指挥者。
4、成员变量定义在类中方法外,在堆内存中随着对象的存在而存在,有默认的
初始化值;而局部变量定义在类中方法内或者方法的形式参数上,在栈内存中随着方法的存在而存在,没有默认初始化值,必须给它赋值才能使用否则编译报错。这就是它们的区别。
5、匿名对象就是没有名字的对象在对象中的方法只调用一次或者其作为实际参数传递的情况下使用。
6、封装指的是隐藏对象的属性和实现细节,仅仅对外提供公共的访问方式这么一种概念。例如封装的体现之一用private关键字修饰的成员只能在本类使用,其他类只能通过本类对外提供的get方法和set方法间接访问。
7、关于get方法和set方法,因为属性被private关键字修饰私有,要对外提供访问方式而产生,他们是相互独立的,不一定同时出现,而且名字也可以随便起,之所以现在这么叫是默认中形成的规范。
8、构造方法的方法名和类名相同,没有返回值类型和具体的返回值。其作用在于给对象的属性进行初始化。需要注意的是系统会默认给出一个无参的构造方法,但只要你明确给出构造方法,系统将不再提供,所以最好手动给出无参构造,这样可以避免很多错误发生。另外,构造方法的重载体现在参数列表的不同,即使其方法名和普通方法同名,它们也不存在重载。构造方法的重载是构造方法的重载,方法的重载是方法的重载,两者没有关系。
9、给私有成员变量赋值推荐使用set方法的方式,同时还可以通过构造方法,又或者在定义成员变量时手动赋值,也可以通过反射中的Field类的对象给对象的属性赋值总共四种方式。
10、构造方法是在创建对象的时候给成员变量赋值只能赋值一次;而set方法是在创建完对象以后对成员变量的值进行修改可赋值多次,它们的最终目的都是成员变量赋值,只不过实现方式不一样,这就是它们的区别。
11、this关键字代表其所在方法所属对象的引用,用于解决局部变量隐藏成员变量的问题,用this关键字直接访问成员变量。
12、我们平时所说的代码块指的是孤零零的{},由{}扩起来的代码称之为代码块,类或者方法也可认为是代码块,但是一般不这么说。局部代码块的作用在于
让变量尽可能早的从内存中消失从而提高效率;而构造代码块的作用源于其先于构造方法执行所以把所有构造方法中的共同的内容定义在构造代码块中,用以提高代码复用性。
13、对象初始化过程:如Person p = new Person();首先把Person.class文件加载到内存中;其次在栈内存开辟一个变量空间给p使用;再次new Person()就会在堆内存中开辟空间;然后方法进方法区用类名做标记同时成员变量进堆内存并给出了默认初始化值;再接着对成员变量进行显示初始化;接着如果有构造代码块,可以在构造代码块中对成员变量赋值,然后是构造方法的赋值,到此为止,对象初始化完毕。最后把堆内存对象的首地址赋值给栈内存的p变量。
14、static关键字的特点在于其修饰的成员被该类下所有对象共享,被static修饰的内容随着类的加载而加载,优先于对象存在;可以直接通过类名调用。所以当多个对象共享某一数据的时候,我们就可以用static修饰这个数据。需要注意的是:在静态方法中是没有this关键字的,因为静态是随着类的加载而加载,而this是对象创建才存在的;静态方法只能访问静态成员;静态内容可以通过对象调用,也可以通过类名调用,推荐使用类名调用。
15、一个Java文件里面的类去调用另一个JAVA文件里面的类,编译的时候可以先编译后者再编译前者又或者直接编译前者后者会自动编译。
16、Math类中的方法public static double ceil(double num)//返回大于等于参数的最小整数 ,返回值是double 类型。
17、1-100之间的随机数可用(int)(Math.random()*100)+1;或者 java.util.Random r = new java.util.Random(); int num = r.nextInt(100)+1;
18、继承源于当多个类中存在相同属性和行为时,将这些内容抽取到单个类中,那么多个类无需再定义属性和行为,通过extends关键字让他们产生关系继承,这里的多个类称为 子类或派生类, 单个类称为父类或者超类。继承的好处在于提高了代码的复用性,让类与类产生关系,是多态的前提。继承的特点是JAVA中的类只支持单继承,不支持多继承。(因为如果可以多继承,就会出现调用不明确的问题)但是JAVA支持多层继承。当出现B类是A类的一种就可用继承关系表示。注意:不要为了获取某个功能而去继承。
19、子父类中使用变量时,变量的查找范围:首先在局部范围找有就使用,没有就在本类成员位置找有就使用,再没有就在在父类成员位置找有就使用,没有就报错。
20、super代表的是父类内存空间标识,可以用super区分子父类中出现的同名成员,也可用于子类调用父类的构造方法时。 通过super可以直接调用父类的构造方法和成员。而this代表本类对象的引用,用于解决局部变量隐藏成员变量的问题,通过this可以直接调动本类的构造方法和成员。这就是它们的联系与区别。
21、重写override指的是子类中存在与父类中方法声明完全一样的方法,除了方法体以外其他都相同,但是子类修饰符权限要大于等于父类。另外注意,只有方法才存在重写,变量不存在。
22、子父类间成员方法注意事项:第一,父类中私有方法不能被重写,因为私有的不能被继承不算重写。第二,子类方法访问权限要大于等于父类方法访问权限如父类如果是public,子类只能是public。
23、子类构造方法中都有默认语句super(),子类默认构造方法都访问了父类的无参构造方法,因为子类会具备父类中非私有数据,这个初始化要靠父类完成,所以先调用父类构造方法并初始化数据;如果父类没有无参构造子类构造可通过super(参数)调用父类带参构造方法又或者通过this(..)调用本类构造方法,需要注意的是如果一个类中所有的构造方法第一句都调用this(..),这样是错误的做法;最后子类的构造方法第一行调用父类的构造方法时不会创建对象。另外需要注意的是构造方法中的this()和super()语句必须放第一行。
24、代码块执行顺序: 父类静态代码块->子类静态代码块->父类构造代码块->父类构造方法->子类构造代码块->子类构造方法,另外需要提及的一点是静态代码块用于初始化静态成员变量。
25、子类如何使用父类的私有成员变量?答: 1、子类调用父类的带参构造访问父类的私有属性,但是只能给父类的私有属性赋值。 2、子类调用父类的set方法给父类中的私有成员变量赋值,通过调用父类的get方法获取父类的成员变量。通过反射操作父类的私有成员(以后讲,比get/set要麻烦很多,这也就体现了封装的好处)。
26、final最终的意思,最终方法不能被重写,最终类不能被继承,最终变量是常量。被final修饰的类有 java.lang.包下void,boolean和基本数据类型的包装类和String类,StringBuffer类,StringBuilder类,System类,Class类,Compile类,Math类还有 java.lang.reflect.Array类除此之外还有java.util.Scanner包下的Scanner类,java.util.regex.Matcher类和java.util.regex.Pattern类。
27、被final修饰的变量注意事项:1、被final修饰的变量在创建对象以后不能赋值。2、被final修饰的变量必须被显示的赋值一次,因为常量在方法区中的常量池中不在堆中可通过在定义变量的时候直接赋值,在构造方法中对它进行赋值,在构造代码块中对它进行赋值。
28、被final和static同时修饰的成员变量有什么特点?答:  1、被final和static同时修饰的变量必须被显示的赋值一次,因为常量在方法区中的常量池中不在堆中可通过在定义变量的时候直接赋值,在静态代码块赋值。
29、多态指的是对象在不同时刻表现出来的不同状态。多态的前提关键是要有父类引用指向子类对象,继承,和方法被重写。多态的成员特点是除了非静态方法有重写运行时看右边其他情况都看左边。多态的弊端是父类引用不能直接使用子类对象的特有功能,可通过向下转型就是父类强转为子类如Cat c=(Cat)a;完成。多态的好处是 增强了程序的扩展性和可维护性。
30、一个父类的引用指向的是狗,要把这个父类的引用强制转换成猫就会报类型转换异常java.lang.ClassCastException,如Animal animal = new Dog();
Cat cat = (Cat)animal;//因为animal存储的是狗,强转成猫就会报错。
31、如果一个类中含有抽象方法,这个类就可以被称为抽象类。该类需要被abstract修饰。抽象方法指的是在类中或者接口中只有方法声明没有方法体的方法,需要被abstract修饰。
抽象类的基本特点是: 1、抽象方法和抽象类用关键字abstract表示。2、有抽象方法的类一定是抽象类(或者接口)。抽象类中不一定有抽象方法。3、抽象类不能被实例化。因为被实例化后根本不知到他具体代表的谁。4、如果一个类继承抽象类,那么这个类要么本身也是抽象类,要么子类重写父类的所有抽象方法。抽象类的作用在于可以强制要求子类必须完成某些功能。
抽象类的成员特点是:1.有成员变量也有常量。2. 有构造方法,但是不能通过构造方法创建对象,其用于子类访问父类数据前,对父类数据进行初始化。3.可以有抽象方法是为了要求子类做某些事情。也可以有非抽象方法是为了被子类继承,提高代码的复用性。
32、接口看成是一种特殊的抽象类。比抽象类更抽象。因为它里面的方法都是抽象的。但是注意,接口不是类,我们只是把他看成类。
接口的基本特点:1、接口不能被实例化。2、接口中的方法要么被子类重写,要么子类也是抽象类。
接口的成员特点:1,接口的成员变量有默认修饰符:public static final,接口中只有常量.2.没有构造方法//因为接口中的成员变量都被final修饰,定义的时候必须做初始化。任何类如果没有继承父类,那么这个类就继承自Object类。3.接口中的成员方法有默认修饰符:public abstract,接口中的方法都是抽象的。
接口的思想特点:接口是对外暴露的规则,是程序的功能扩展,降低耦合性,可以用来多实现。
33、先天属性行为定义在抽象类中,后天扩展功能应该定义在接口中。
抽象类和接口,类和接口的关系:1.抽象类可以是变量也可以是常量,有构造方法,可以是抽象方法也可以是非抽象方法。而接口只能是常量,默认修饰符:public static final。只能是抽象方法,默认修饰符:public abstract。
2.类与接口的关系:类与类 继承关系,只能单继承,可以多层继承。类与接口 实现关系,可以单实现,也可以多实现。 接口与接口继承关系,可以单继承,也可以多继承。
3.设计理念的区别:抽象类被继承,抽象类中定义的是整个继承体现的共性内容,体现:is a。接口被实现,接口中定义的是整个体现的扩展内容,体现:like a。
34、==比较的是基本类型的值或引用类型的地址值是否相同;equals()默认比较的是引用类型的地址值是否相同,如果类重写了该方法,那就得按照重写后的规则进行比较。
35、Scanner中方法next()会将空格键、Tab键或Enter键等视为分隔符或结束符,nextLine()仅将Enter键作为结束符,返回Enter键前的所有字符,可以得到带空格。int num = scanner.nextInt();String str = scanner.nextLine();当录入的顺序依次是int、String,当输入int至回车时把回车当成String了导致接收不到数据解决办法: 1、在录入完int后重新创建一个新的Scanner对象;
       2、都用nextLine()方法用字符串接受,然后把其中要的那个字符串转成int。
36、创建字符串对象可通过直接赋值如String s = "helloworld"和String s = new String();括号里还可传入字符串或(字节)字符数组或者它们的一部分如:String s = new String(char[] chs, int index, int length);注意最后一个为长度。
37、字符串一旦被赋值就不能改变指的是字符串的值不能修改,而其引用是可以改变的。String s = new String("hello")在内存中创建了1个或两个对象,而
String s = "hello"在内存中创建了0个或一个对象。另"'会开辟内存空间,而null不会,在开发的时候要养成良好的习惯用null。
38、String类——成员方法:API
boolean contains(String str)判断字符串对象是否包含给定的字符串
boolean startsWith(String str)判断字符串对象是否是以给定的字符串开始
char charAt(int index)返回字符串中给定索引处的字符
int indexOf(int ch)和int indexOf(String str)返回指定字符(串)在此字符串中第一次出现的索引int indexOf(String str,int fromIndex)
String substring(int start)截取字符串,返回从指定位置开始截取后的字符串,原字符串长度不变String substring(int start,int end)不含尾索引。
char[] toCharArray()和byte[] getBytes()把字符串转换成字符(字节)数组
static String copyValueOf(char[] chs);static String valueOf(char[] chs)把字符数组转换成字符串。static String valueOf(int i)int类转字符串
String toLowerCase()小写原串不变;String concat(String str)拼接原串不变
String replace(char oldChar,char newChar)替换功能原字符串不变
String[] split(String str)切割功能原字符串不变。
String trim()去除字符串两端空格原字符串长度不变。int length()获取字符串长度,boolean isEmpty()判断字符串对象是否为空,注意是数据?
39、Arrays类是针对数组操作的工具类:
public static String toString(数据类型[] 变量名)把数组变成字符串
public static void sort(数据类型[] 变量名)对数组进行排序
public static int binarySearch(int[] arr,int value)二分查找
40、引用类型形式参数改变直接影响实际参数,但字符串却是特殊的。JVM对于字符串引用,由于在字符串的"+"连接中,有字符串引用存在,而引用的值在程序编译期是无法确定的。JVM对于字符串常量的"+"号连接,在程序编译期,JVM就将常量字符串的"+"连接优化为连接后的值。
41、System类提供了静态的变量和方法供我们使用:
public static void exit(int value)退出jvm,非0表示异常退出
public static long currentTimeMillis()返回当前系统时间的毫秒值
public static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length)从指定源数的指定位置开始复制,赋值到目标数组的指定位置。
42、StringBuffer类采用的是缓冲区机制,首先开辟一些空间然后随着数据的增多,还可以继续开辟空间,这些操作针对的是同一个对象。StringBuffer()初始化一个理论长度为16的空对象,StringBuffer(int capacity)初始化一个理论长度为指定大小的空对象,StringBuffer(String str)初始化一个内容为str的对象,理论长度为字符串的长度+ 16,public int length() Public int capacity(),StringBuffer append(数据类型 变量名)在结尾处添加,StringBuffer insert(int index, 数据类型 变量名)在指定位置添加,StringBuffer deleteCharAt(int index)删除指定位置处的字符,StringBuffer delete(int start, int end)删除开始位置和结束位置之间字符
StringBuffer replace(int start, int end,String str)用指定字符串替start位置到end位置的内容,注意包左不包右,public String substring(int start)从索引为start处截取到结尾,public String substring(int start, int end)从索引为start,截取到end。包左不包右,public StringBuffer reverse()将此字符序列用其反转形式取代。
43、基本类型包装类:Integer(String s)S必须是一个由数字字符组成的字符串
String --> int:public static int parseInt(String s)
int --> String:public static String toString(int i)
public static String valueOf(int i)还有直接和空串连接 num +"";
自动装箱:基本类型赋值给引用类型如Integer integer = 1;
自动拆箱:引用类型赋值给基本类型如int i = new Integer(2);
Integer i7 = 127; Integer i8 = 127;System.out.println(i7 == i8);输出结果竟然为true为什么?byte范围内的值(-128 ~ 127),java提供了一个常量池直接赋值给Integer,是从常量池里面获取的。其他情况按照正常逻辑判断,完.

7 个回复

倒序浏览
谢谢老师,,学习了。
回复 使用道具 举报
zhoubinjian 发表于 2016-4-25 12:28
谢谢老师,,学习了。

不客气
回复 使用道具 举报
太棒了!!受教超多!!!
回复 使用道具 举报
404679874 发表于 2016-4-25 22:31
太棒了!!受教超多!!!

回复 使用道具 举报
好详细~  赞
回复 使用道具 举报
看的眼睛都花了~
回复 使用道具 举报

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马