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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 戴克瑞 初级黑马   /  2018-1-26 08:54  /  1190 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

已经度过基础班的我们迎来了就业班的挑战.以下是我上了就业班13天来的总结
第一天:
从零基础的开始学习半个多月,顺利的考过了基础班的基础考试(虽然中间不细心导致不及格一次,不过补考的补课也彻底弥补了自己基础不扎实的底蕴)。
1.7号是第一天正式上就业班,经过一整个元旦的休息,也没有敲代码。班上大部分同学都已经对一些格式有些陌生,早上老师带着我们回顾之前的学习内容:格式书写,if语句的使用,遍历数组的使用,集合的回顾,API的查找,String类的使用等一些基础知识。
下午新的内容就是学新的知识点:一些Math.xx的类型使用,还有static关键字的全部内容。
1.【理解】static静态关键字
a.【理解】能够独立阐述静态的定义和特点
b.【理解】能够理解静态的内存图解
c.【理解】能够独立阐述静态的注意事项
d.【理解】能够独立阐述静态的优缺点
e.【应用】能够自定义一个工具类并使用
另外还学习了代码块的解释:
【理解】代码块
a.【理解】能够在类中独立定义构造代码块
b.【应用】能够在类中独立定义静态代码块
c.【理解】能够理解构造代码块和静态代码块的执行流程

第二天:
1.1今天学习新的内容:代码的继承
关键字: super(继承父类内容),this(执行本类中的内容)
继承中构造方法的执行顺序
A:super(实参列表);语句  在子类的构造方法中使用,用来调用父类中的构造方法(具体哪一个由传递的参数决定),并且只能在构造方法第一行使用
B:this(实参列表); 语句  在类的构造方法中使用,用来调用本类中的其它构造方法(具体哪一个由传递的参数决定),并且只能在构造方法的第一行使用
this和super的区别
                this:当前对象的引用
                        调用子类的成员变量
                        调用子类的成员方法
                        在子类的构造方法第一行调用子类其他构造方法
                super:子类对象的父类引用
                        调用父类的成员变量
                        调用父类的成员方法
                        在子类的构造方法第一行调用父类的构造方法


单词final的使用:
Final代表最后的意思,如果一个变量名前面加了final 那只能在这个类中使用.
子类继承父类是使用extends 来继承父类
格式.
Class XXX extends xxx(XXX为子类名字,xxx为父类名字)
子类集成父类后,父类必须要使用abstract来修饰
格式.
Abstract class xxx{  //class前面须需要增加Abstract来修饰
Public void abstract show(){  //show是方法名字 前面需要增加Abstract来修饰
Syso...//输出语句
}
}
第三天
第三天主要讲的新内容是  
创建接口跟多态的使用.
接口
        接口是一个比抽象类还抽象的类,接口里所有的方法全是抽象方法,接口和类的关系是实现用的是implements。接口和抽象类一样不能实例化。
       
        它的出现是为了解决类单一继承的局限性。

        格式:
                         interface 接口名 {

                         }

        示例代码:
interface Animal {
        public static final int num = 10;
        public abstract void eat();
}

class Cat implements Animal {
        public void eat() {
        }
}

2.接口的成员特点
        只能有抽象方法
        只能有常量
        默认使用public&abstract修饰方法
        只能使用public&abstract修饰方法
        默认使用public static final来修饰成员变量
        类与接口的关系是实现关系,一个类实现一个接口必须实现它所有的方法,除非这个类是一个抽象类。
建议:建议大家手动的给上默认修饰符
多态
1.多态的前提
        ①子父类的继承关系
        ②方法的重写
        ③父类引用指向子类对象
       
多态的案例代码:
public class PoymorphicDemo {
        public static void main(String[] args) {
                //父类引用 Animal a
                //指向         =
                //子类对象 new Cat()
                Animal a = new Cat();
                a.eat();
        }
}
class Animal {
        public void eat() {
                System.out.println("吃东西");
        }
}
class Cat extends Animal {
        public void eat() {
                System.out.println("猫吃鱼");
        }
}


2.动态绑定和静态绑定
        动态绑定:运行期间调用的方法,是根据其具体的类型
        静态绑定:final,static,private修饰的方法和构造方法其实都属于静态绑定,在编译的时候就确定了该方法当前类中的方法。
         因为final,static,private还有构造方法都不存在被继承的问题。



3.多态的成员特点
        ①成员变量  编译时看的是左边,运行时看的左边
        ②成员方法  编译时看的是左边,运行时看右边
        ③静态方法  编译时看的是左边,运行时看的也是左边(因为加了static就表示这个方法属于这个类了不会被继承到子类)

        总结:编译时看的都是左边(也就是看父类里有没有这个方法,如果没有的话编译的时候就会报错),运行时成员方法看的是右边(实际的运行效果看子类该方法的代码。),其他(成员变量和静态的方法)看的都是左边

第四天
第四天主要讲的最主要内容就是就是
内部类.以及匿名内部类
内部类其实就是在类中再创建一个类.
1.成员内部类
                在类的成员位置,和成员变量以及成员方法所在的位置是一样的
                在内部类当中,可以直接访问外部类的成员,包括私有成员


2.如何创建内部类对象
           格式:
外部类名.内部类名  对象名=new 外部类().new 内部类名();
1.匿名内部类:
     匿名内部类其实不是类,他其实是一个对象,是某个类或者某个接口的子类对象。
     定义在方法当中
     必须在定义匿名内部类的时候创建他的对象
   格式:
    new 类/接口(){

    };
        理解:看到new就知道其实是在创建对象
          如果是创建了继承这个类的子类对象,我们可以重写父类的方法
                    如果是创建了实现这个接口的子类对象,我们必须要实现该接口的所有方法
  
* 原理:创建了继承这个类的子类对象或者是创建了实现这个接口的子类对象
第五天
今天学习的主要内容是以查询API为主 ,主要分为Object类 & System类.
Object是所有类(引用数据类型)的根类,也是就说随便什么类的对象都可以使用Object继承下来的方法。比如最常见的toString方法和equals方法。
那什么是toString跟equals呢?
Object的toString方法
        1.我们输出一个对象的时候,默认是输出的是这个类的toString方法的返回值。而Object是所有类的根类,在Object的toString方法是返回的类名加地址值。所以我们自定义一个类,默认都是返回这个类的地址值,如果需要输出对象的成员变量值,可以去改写这个类里的toString方法。
Object的equals方法
        2.equals其实就是用来比较两个对象是否相等。不过我们看Object的equals的源码可以发现这个方法其实就是拿当前对象this和通过equals方法的参数传进去的参数进行==的判断。==用于比较基本数据类型的时候其实是比较的基本数据类型的值,都是如果是引用数据类型,其实比较的是对象的地址值。
        但是如果很多时候我们进行两个对象的比较的时候其实是认为如果对象的成员变量都一样,他们就是同一个对象的。所以Object的equals方法这个时候就不能满足我们的需求了。所以这个时候就需要自己去重写equals方法。
除此之外我们还学习了其他略重要的date,SimpleDateFormat(),Calendar,class
Date
         表示特定的瞬间,精确到毫秒,他可以通过方法来设定自己所表示的时间,可以表示任意的时间

System.currentTimeMillis():返回的是当前系统时间,1970-1-1至今的毫秒数.。它返回的毫秒数只能代表当前时间。但是Date可以表示过去的某个时间或者未来的某个时间。

2. Date构造方法:
                  Date() :创建的是一个表示当前系统时间的Date对象
                Date(long date) :根据"指定时间"创建Date对象


3.Date类的常用方法
        void setTime(long time) // 为Date对象设置时间
        long getTime()  //返回当前Date对象所表示时间的毫秒数。

impleDateFormat()构造方法:
        SimpleDateFormat() :使用默认的模式进行对象的构建
        SimpleDateFormat(String pattern) :使用的指定的模式进行对象的构建

2.常用方法:
        String format(Date date) //把Date转化成字符串
        Date parse(String source) //把字符串转换成Date对象
Calendar简介
        Calendar是日历类,它为特定瞬间与一组诸如 YEAR、MONTH、DAY_OF_MONTH、HOUR 等 日历字段之间的转换提供了一些方法,并为操作日历字段(例如获得下星期的日期)提供了一些方法。

2.创建对象
        使用Calendar.getInstance()创建对象。该方法会返回一个Calendar对象。注意:使用该方法创建的对象表示的是当前时间。
       
3.常用方法
          void set(int field, int value) :把指定的字段修改成指定的值
      void add(int field, int amount): 在指定的字段上加上指定的值
          int get(int field) // 返回给定日历字段的值
          
          void setTime(Date date)//使用给定的 Date 设置此 Calendar 的时间
Class
是用来描述字节码的一个类,这个类的对象就是字节码对象,我们的类被加载到内存中的时候会把字节码文件生成一个字节码对象(也就是Class这个类的对象)
第六天
第六天学习的主要内容是集合跟foreach, list
集合又分为Collection跟Iterator.
Collection是一个接口,它是List和Set的父接口,因为是接口所以不能直接创建Collection对象,只能创建它的子类对象的方式来调用它的方法。
Iterator是一个接口叫迭代器,可以用来遍历集合。


foreach:增强for循环,一般用于遍历集合或者数组
        foreach循环其实是java的一个语法糖,他仅仅是方便我们去编写程序。
        foreach可以用来循环实现了Iterable接口的类的对象。


2.foreach格式:
        for(元素的类型 变量 : 集合或者数组对象) {
                可以直接使用变量;
        }

        示例代码:
                 //创建集合对象
                Collection<String> c = new ArrayList<String>();
                //添加元素
                c.add("hello");
                c.add("world");
                c.add("java");
                for (String string : c) {
                        System.out.println(string);
List的特点
                有序的(存储和读取的顺序是一致的)
                有整数索引
                允许重复的


List的特有功能
                void add(int index, E element)  
            E get(int index)  
                  E remove(int index)  
                   E set(int index, E element)
第七天
第七天主要就是讲解接口以及接口.
1.
1.Set集合的特点:
                        无序(存储和读取的顺序有可能不一样)
                        不允许重复(要求元素唯一)
                        没有索引

2.Set集合的遍历方式

        ①转数组遍历
        private static void method(Set<String> set) {
                //转数组
                Object[] objs = set.toArray();
                for (int i = 0; i < objs.length; i++) {
                        System.out.println(objs[i]);
                }
        }

        ②使用迭代器遍历
        private static void method2(Set<String> set) {
                //迭代器
                Iterator<String> it = set.iterator();
                while(it.hasNext()) {
                        String s = it.next();
                        System.out.println(s);
                }
        }
               

        ③使用增强for遍历
        Set<String> set = new HashSet<String>();//父接口引用指向子类对象
               
        //添加元素对象
        set.add("hello");
        //set.add("world");
               
        System.out.println(set.add("java"));
        System.out.println(set.add("java"));
        for(String s : set) {
                        System.out.println(s);
        }
1.HashSet实现了Set接口所以也有Set集合的特点。Set有一个特点是不允许重复。所以HashSet肯定也是不允许有重复元素的。



2.HashSet保证元素唯一的原理
        HashSet因为元素不能重复,所以他会在我们添加元素的时候,也就是调用add方法的时候去判断我们想要使用add方法添加到集合的元素和HashSet已有的方法进行判断是否有重复的,如果重复了就不会把这个东西添加到集合。如果没有重复的话就把这个元素添加到集合。



Map接口
Map的概述
        Map集合是用来存放那种有一对一的对应关系的数据的。
        Map:将键映射到值的对象。一个映射不能包含重复的键;每个键最多只能映射到一个值

        Map和Collection有什么区别?
                          Map:是一个双列集合,常用语处理有对应关系的数据,key是不可以重复的,我们也称之为是夫妻对集合
                          Collection:是单列集合,Collection有不同的子体系,有的允许重复有索引有序,有的不允许重复而且无序,那么我们也称之为单身汉集合

第八天

第九天
第九天的学习内容就比较多了 主要是上IO流跟File类
IO流分类:
                  流向
                                  输入流        读取数据        FileReader        Reader
                                  输出流        写出数据        FileWriter        Writer
                  数据类型
                                  字节流       
                                                  字节输入流                读取数据        InputStream
                                                  字节输出流                写出数据        OutputStream
                                字符流
                                                  字符输入流                读取数据        Reader
                                                  字符输出流                写出数据        Writer



InputStream和OutputStream都是字节流最顶层的基类,他们的构造方法包括常用的方法都和之前学的字符流很像。所以可以类比字符流的操作

FileInputStream和FileOutputStream复制图片的代码:
                //创建字节输入流对象
                FileInputStream fis = new FileInputStream("传智学院.jpg");
                //创建字节输出流对象
                FileOutputStream fos = new FileOutputStream("d:\\传智学院.jpg");
               
                //一次读写一个字节数组
                int len;//用于存储读到的字节个数
                byte[] bys = new byte[1024];
                while((len = fis.read(bys)) != -1) {
                        fos.write(bys,0,len);
                }
               
                //释放资源
                fos.close();
                fis.close();
File:
常用方法:
                   创建功能
                        boolean createNewFile()   //当指定文件不存在时创建文件并返回true,否则返回false
                          boolean mkdir()   //当指定文件夹不存在时创建文件夹并返回true,否则返回false
                          boolean mkdirs()  //创建指定文件夹,当文件夹所在的目录不存在,则顺道一块创建了
                  删除功能
                          boolean delete() //当指定的文件或文件夹存在时删除文件或者文件夹 并返回true,否则返回false(特别注意:如果这是一个文件夹,当文件夹里还有东西的时候是不能被删除的)

                  获取功能
                          File getAbsoluteFile()   //以File对象的形式返回当前File对象所有指向的绝对路径
                          String getAbsolutePath()  //返回File对象所指向的绝对路径
                          String getName()  //获取文件和文件夹的名称
                          String getParent()  //获得父目录
                          File getParentFile() //获得父目录谁表示的File对象
                          String getPath()  //返回创建File对象时给的路径
                          long lastModified() //以毫秒值的形式返回最后修改时间
                          long length()  //返回文件的字节数
                  判断功能   
                           boolean exists()    //判断文件或者文件夹是否存在,如果存在则返回true,否则返回false
                           boolean isAbsolute()  //判断File对象指向的路径是否是绝对路径,如果是绝对路径则返回true,否则返回false
                           boolean isDirectory() //判断File对象指向的路径是否是文件夹,如果是则返回true,否则返回false
                         boolean isFile()  //判断File对象指向的路径是否是文件,如果是则返回true,否则返回false
                         boolean isHidden()  //判断File对象指向的路径是否有隐藏属性,如果隐藏了则返回true,否则返回false
                修改文件名:
                        boolean renameTo(File dest
第十天
第十天的内容比较重要,也是我们基础班上过的课程 IO流.
IO流分类:
                  流向
                                  输入流        读取数据        FileReader        Reader
                                  输出流        写出数据        FileWriter        Writer
                  数据类型
                                  字节流       
                                                  字节输入流                读取数据        InputStream
                                                  字节输出流                写出数据        OutputStream
                                字符流
                                                  字符输入流                读取数据        Reader
                                                  字符输出流                写出数据        Writer
其实想归类很简单:主要看每个流的结尾分成输入流跟输出流,,以及读取字节跟字符的话看开头是buff还是file.是buff的话就是字符流,是file的话就是字节流.字符流是类似文本输入使用,字节流是使用文件拷贝或者拷贝MP3,图片等这些东西.
其中最常用的是BuffereReader(包含了FileReader),BuffereWriter(包含了FileWriter)
FileInputStream,FileOutputStream.

第十一天
第十一天讲的主要就是线程,简单来说就类似去买票 总的1000张票 5个窗口同时进行卖票,指导卖完为止的编程.
多线程:
        进程:当前正在运行的程序,一个应用程序在内存中的执行区域
    线程:进程中的一个执行控制单元,执行路径

        一个程序至少有一个进程,一个进程里至少有一个线程。

  
        单线程:安全性高,但是效率低
        多线程:安全性低,效率高

        多线程案例:360,迅雷等
多线程的实现方式:
        方法一:将类声明为 Thread 的子类。该子类应重写 Thread 类的 run 方法。如何创建该类的对象,去调用start方法就可以开启线程(特别注意,不是调用run方法是调用start方法.)
方法二:写一个类实现Runnable接口,实现run方法。然后在创建Thread对象的时候从Thread的构造方法里传进去一个该类的对象。再调用Thread对象的start方法
线程安全问题
                如果有多个线程,并且多个线程并发的访问操作共享的数据的时候,这个时候会出现线程安全问题。
                解决方法:使用同步代码块或者同步方法

比喻:
在火车上上测试
张三来了,一看门是绿的,他就进去了,把门锁上了,门变红了,
李四来了,一看门是红色的他就只能憋着
张三用完了厕所,把锁打开了,门就变成了绿色
李四一看门变绿了,他就进去了,把门锁上,门就变红了
王五来了,一看门是红色的,他也只能憋着
李四用完测试了,把锁打开了,肚子又不舒服了,扭头回去了,又把锁锁上了


synchronized:同步(锁),修饰代码块和方法,被修饰的代码块和方法一旦被
某个线程访问,则直接锁住,其它的线程将无法访问
第十二天
第十二天啊 尴尬 全做复习了 上的课内容之后用不掉
第十三天
主要内容:反射
1.反射
                在运行时,我们可以获取任意一个类的所有方法和属性
                在运行时,让我们调用任意一个对象的所有方法和属性


2.解释
                我们之前写的代码如果想要创建什么类的对象,使用某个方法的话等等都是要在代码里面去书写。但是这样的话就会有一点不太灵活。因为以后我们的代码运行起来没有特殊情况是不会让他停止的。如果在我们的代码运行起来后,我们想在某个地方使用别的类,或者另外的方法,就必须把项目停下来后,修改代码后重新运行。这个成本就比较大了。
但是有了我们的反射后,即使我们的代码一种在运行,只要我们修改了配置文件,代码就可以根据文件里面配置的类名或者方法名去使用新类,或者新的方法名。
                具体反射的好处可以参考RPGGame。
一、获取字节码对象的方式
方式1:        通过Object类的getClass()方法获取
                Teacher t = new Teacher();
                Class clazz = t.getClass();
               
               
               
方式2:        通过类名调用属性class来获取
                Class clazz2 = Teacher.class;
               


方式3:        通过Class类的静态方法forName()来获取
                Class clazz3 = Class.forName("com.itheima_01.Teacher");
(这是最灵活的方法)
1.通过反射获得类的构造方法。
        ①Constructor<?>[] getConstructors()
        通过Class类的成员方法getConstructors();该方法会返回一个Constructor[],而Constructor就是用来描述构造方法的类。
        示例代码:
        Class clazz = Class.forName("com.itheima_01.Student");
        Constructor[] cs = clazz.getConstructors();

        for (int i = 0; i < cs.length; i++) {
                System.out.println(cs[i]);
        }
        注意:该方法只能获取所有的public修饰的构造方法。


        ②Constructor<T> getConstructor(Class<?>... parameterTypes)
        通过Class类的成员方法getConstructor(Class<?>... parameterTypes) 获得指定参数列表的构造方法对象。
        示例代码:
        Constructor c = clazz.getConstructor(String.class, int.class);// 获取有参构造,参数1类型为String,参数2类型为int
1.通过反射创建对象的方式
        ①通过Class类的成员方法newInstance();
                示例代码:(通过newInstance方法创建Student的对象。)
                Class clazz = Class.forName("com.itheima_01.Student");
                Object obj = clazz.newInstance();               

        注意:其实就是调用的该类可见的无参构造。如果该类没有无参构造,或者该无参构造方法不可见,则会报错。


        ②通过Constructor类的成员方法newInstance
        示例代码:
        Constructor c = clazz.getConstructor(String.class, int.class);// 获取有参构造,参数1类型为String,参数2类型为int
        System.out.println(c);
        Object obj = c.newInstance("lisi", 30);
        System.out.println(obj);

5 个回复

倒序浏览
哇哦 这个代码可以的
回复 使用道具 举报
哇哇果断收藏
回复 使用道具 举报
yuxiaoyi 来自手机 中级黑马 2018-1-26 16:15:53
板凳
果断收藏
回复 使用道具 举报
黄马良 来自手机 初级黑马 2018-1-27 11:03:21
报纸
good good good
回复 使用道具 举报

感谢那个永不言弃的自己!加油!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马