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

© 马赛 中级黑马   /  2015-11-30 21:14  /  2249 人查看  /  29 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

今天算是正式来论坛的第一天,正愁有没有什么好的学习方法,然后看到有人会来论坛进行每天的学习总结。
虽然我已经学习基础课7天了,但是我觉得现在还不晚,这样不仅可以督促自己复习每天的学习,还可以给加深一次印象,何乐而不为呢。{:2_40:}
今天先写一下昨天,也就是第七天的总结,然后会一点点把之前的补上,毕竟一下都弄完也不好消化

29 个回复

正序浏览
不错不错
回复 使用道具 举报
第五天
第五天讲的是一维数组和二维数组,当时学完二维数组以后做了杨辉三角题目,课上自己想没有想出来,然后老师讲课的时候我有点走私,还在自己想怎么做,以至于后来老师解析完这道题,我还是没弄懂,到晚自习结束我也没心思弄这道题,后来回宿舍,十一点多的时候舍友说看一下杨辉三角,然后我说我也看一下,结果突然就想明白了,然后当时就能自己把代码写出来,我想说的有2点,一个是上课老师讲课一定要认真听,然后就是有不会的不要急,先缓一下,没准什么时候就突然开窍了,当然不能耽误太长时间
第五天内容总结,其实像这种数字类的知识,多想想就明白了,但是面向对象讲的是思想,真的是不好弄明白
一、数组(重点、难点、掌握)
        什么叫做数组:用来装一堆相同数据类型数值的容器叫做数组
        一维数组格式:
                数组类型[] 数组名(一般用这种格式)
                数组类型 数组名[]
        动态初始化
                数组类型[] 数组名 = new 数组类型[m];
                动态初始化定义了数组的长度,但是没有定义数组内容,系统会给数组分配默认值
                        int类型的默认值是0
                        浮点型默认值 0.0
                        char类型默认值 "\u0000"
                        String默认值 null
                        boolean默认值 false
        静态初始化
                数组类型[] 数组名 = {数据1, 数据2, 数据3, 数据4, 数据5}
                静态初始化给出了数组里边的内容,系统会自动判断数组长度
        获得数组长度的方法:
                数组名.length
        数组即可以存储基本数据,也可以存储引用数据
        通过数组引出来内存中 栈、堆和方法区(面向对象讲)
                栈内存:用来存储局部变量
                堆内存:用来存储new出来的对象
        数组在内存中是通过数组在内存中的地址来进行指向的
二、二维数组(理解)
        二维数组的格式
                数组类型[][] 数组名
                数组类型 数组名[][]
        二维数组动态初始化
                有2种
                数组类型[][] 数组名 = new 数组类型[m][n]
                数组类型[][] 数组名 = new 数组类型[m][]
                m代表二维数组最外边的大括号,表示行,包含n
                n代表二维数组里边的大括号,表示列,被m包含
                int[][] arr = new int[m][n];
                表示int数组类型的arr,里边有m个一维数组,每个一维数组有n个数据
        二维数组静态初始化
                数组类型[][] 数组名 = new 数组类型[][]{{},{}};
                数组类型[][] 数组名 = {{1,2,3,4},{3,4},{3},{2,3}};        
        注意:静态初始化数组,大括号后边有一个分号
                还可以这样
                int[ ][ ] arr = new int[3][ ];
                arr[0] = new int[2];
                arr[1] = new int[3]
                arr[2] = new int[1];

        

Day_05.rar

319.64 KB, 下载次数: 50

回复 使用道具 举报
第九天这几天面向对象,抽象内容比较多,有点不知道该如何着手去学习这一块, 各位有什么好的方法不妨说一下,也是和大家分享交流

这是昨天的课程了,今天休息一天,昨天上课的时候,刚开始讲父类引用指向子类对象的时候,怎么也听不进去,吸收不了知识,因为我总在想到底为什么访问变量要看左边,访问方法要看右边,总是想不通内存图里怎么走的,感觉要一点都学不下去似的,后来我也不想了,然后就死记这个结论,还算可以,能够在遇到此类的问题的时候,知道该看哪里运行哪里编译,然后就是感觉,现在的话想要把什么都弄明天有点不现实,时间和精力都不允许,所以,能快速吸收消化的就赶紧吸收了,不要因为纠结那么一点点为什么,把其他的知识点扔一边不去管,这也算是昨天上课的一点感悟吧。然后下边是昨天的总结,感觉自己语言组织能力太差了,光靠自己想东西来总结有点头疼,而且脑子会很空,所以参考着老师的总结写完了,相当于又复习一遍吧
一、多态
        多态就是一个事物有多种状态,比如(水:液态、固态、气态)
        多态的三个前提:
                1.有继承关系
                2.方法重写
                3.父类引用指向子类对象
        父类引用指向子类对象:
                1.访问变量:编译看左边,运行看左边
                2.访问成员方法:编译看左边,运行看右边
                3.访问静态方法:编译看左边,运行看左边
                调用静态方法:可以通过类直接访问,也可以通过
                对象访问,但本质是类名访问,所以调用静态方法
                不存在多态,这个是一个假象。静态方法不算方法的重写
        类型提升:
                向上提升:小类型向大类型转换,父类 对象名 = new 子类();
                向下转型: 父类引用上进行强制转换,子类 对象名 = (子类)父类对象名;
        类型提升解决了多态的弊端,父类不能访问子类的独有的方法
        多态的好处和弊端:
                1.提高代码的维护性,由继承保证,大量的代码写在了父类中
                2.提高程序扩展性:由多态保证
                3.多态中父类不能访问子类中独有的方法
二、抽象类
        抽象abstract,不是具体的一个物体,属于一类,要用抽象类来定义,在以后的工作中要考虑是
        用抽象还是普通类
        抽象类的注意事项:
                有构造方法,不能进行实例化,要由具体的子类实例化,用多态实现
                抽象类不一定有抽象方法,但是有抽象方法的类一定是抽象类
                抽象类的成员:成员变量可以是变量,也可以是常量
                                成员方法:可以是普通方法,也可以是抽象方法
                抽象类的子类可以有两种,一种可以是抽象类,一种可以是普通类,但是普通类要重写父类里的抽象方法
        抽象类也可以有父类
        abstract不能和哪些关键字一起用?
                1.private:抽象类,希望别人实现方法,被private修饰会冲突
                2.final:被final修饰以后不能重写方法
                3.static
三、接口
        接口 interface,可以给一个类提供而外的功能,使用 implement 实现接口,也算是对继承只能单继承弊端的一个解决方法
        接口中的成员只能是常量和抽象方法,要实现接口就要全部实现抽象方法
        接口是能力的扩展,不会对本质产生影响
        比如一个门,可以在门的基础上添加门铃,门铃就可以看作是对门能力的扩充,门铃就是一个接口
        接口的注意事项:
                接口主要是对能力的扩充,没有new构造方法
                定义的变量在接口里会变成常量,所以标识符所有字母都要大写,有个隐藏的 public static final
        java源码中很多都是用接口来写的,因为java不受行业约束
        类和类的关系:
                继承关系,只能单继承,不能多继承,能多层继承,不能多重继承
        类和接口的关系:
                实现关系,类来实现接口的方法,单实现也可以多实现
        接口和接口的关系:
                可以继承,多继承(没有讲)
        抽象类和接口关系:
                实现接口
        抽象类可以有变量、常量、成员方法、抽象方法
        接口只能有常量和抽象方法


第九天ppt和总结


Day_09.rar

392.05 KB, 下载次数: 49

回复 使用道具 举报
真是厉害啊
回复 使用道具 举报
不错,加油加油!
回复 使用道具 举报
感谢分享
回复 使用道具 举报
看了一遍,复习一遍-。-准备入学面试中
回复 使用道具 举报
第八天的
一、代码块
    有三种:
        1、局部代码块
            方法体里,for循环里的大括号就是一个局部代码块
  1. public static void main (String[] args){
  2.                 {
  3.                     int num = 100;//作用域在大括号里边,使用后立即释放
  4.                 }
  5.             }
复制代码

2、构造代码块
            类里方法外,每次new一个对象,就执行一次
  1.   class ClassA{
  2.                 {
  3.                     System.out.println("构造代码块");
  4.                 }
  5.                 public ClassA(){
  6.                
  7.                 }
复制代码

3、静态代码块
            在类加载的时候加载到方法区里的静态区,只执行一次
  1. class ClassB{
  2.                 static{
  3.                     System.out.println("静态代码块");
  4.                 }
  5.             }
复制代码
       代码块可以使用非正式的模拟数据进行对代码的测试
  1. class BlockDemo{
  2.         static int[] scores = new int[3];
  3.         //使用静态代码块对数组进行初始化
  4.         static {
  5.                 score[0] = 20;
  6.                 score[1] = 30;
  7.                 score[2] = 40;
  8.         }
  9.         public static void main(String[] args){
  10.                 print(scores);
  11.                 int index = getIndex(scores);
  12.                 System.out.println("获得的角标是:"+i);
  13.         }
  14.         //定义一个数字遍历方法
  15.         public static void print(int[] arr){
  16.                 for(int i = 0; i<arr.length; i++){
  17.                         System.out.print(arr[i]);
  18.                 }
  19.                 System.out.println();
  20.         }
  21.         //定义一个数组角标查询方法
  22.         public static int getIndex(int[] arr){
  23.                 int index = -1;
  24.                 for(int i = 0; i<arr.length; i++){
  25.                         if(arr[i] == 30){
  26.                                 index = i;
  27.                         }
  28.                 }
  29.                 return index;
  30.         }
  31. }
复制代码

二、继承(重点,难点)
    多个类具有相同属性和行为,将这些相同的属性和行为封装到另外一个类中,可以使代码的工作量减少,同时
    也利于对代码的维护。
    继承的语法
        class 子类名 extends 父类名
        父类可以叫做基类,也可以叫做超类
        子类可以叫做派生类
        子类在继承父类公有属性和方法的同时自己还可以扩充属于自己的属性和方法
        通过老师、学生和人来演示
  1. //老师类和学生类具有一些共同的属性和方法,这些属性和方法定义在了人类里
  2.     class Person {
  3.         // 人类具有的属性(老师和学生同时也具有的属性)
  4.         String name;
  5.         int age;

  6.         // 构造方法
  7.         public Person() {

  8.         }

  9.         public Person(String name, int age) {
  10.                 this.name = name;
  11.                 this.age = age;
  12.         }

  13.         // 成员方法
  14.         public void eat() {
  15.                 System.out.println("吃饭");
  16.         }

  17.         public void sleep() {
  18.                 System.out.println("睡觉");
  19.         }

  20.         // set,get方法
  21.         public void setName(String name) {
  22.                 this.name = name;
  23.         }

  24.         public String getName() {
  25.                 return this.name;
  26.         }

  27.         public void setAge(int age) {
  28.                 this.age = age;
  29.         }

  30.         public int getAge() {
  31.                 return this.age;
  32.         }
  33.         
  34.         }
  35.         //定义一个学生类,学生类继承person类
  36.     class Student extends Person {
  37.         private String number;//学生特有的属性
  38.         public Student(){
  39.                
  40.         }

  41.         public Student(String name, int age, String number) {
  42.                 super(name,age);
  43.                 this.number=number;        
  44.         }

  45.         public void study() {//学生特有的学习方法
  46.                 System.out.println("学习");
  47.         }
  48.         public void setNumber(String number){
  49.                 this.number = number;
  50.         }
  51.         public String getNumber(){
  52.                 return number;
  53.         }
  54.     }
  55.         //定义一个老师类
  56.     class Teacher{
  57.         private double salary;//老师特有的属性
  58.         public Teacher(){
  59.         
  60.         }
  61.         public Teacher(String name, int age, double salary){
  62.                 super(name,age);
  63.                 this.salary = salary;
  64.         }
  65.         public void teach(){//老师特有的授课类
  66.                 System.out.println("老师上课");
  67.         }
  68.         public void setSalary(String salary){
  69.                 this.salary = salary;
  70.         }
  71.         public String getSalary(){
  72.                 return salary;
  73.         }
  74.     }

  75.    
  76.     /*运行类*/
  77.     class ExtendsDemo{
  78.         public static void main(String[] args){
  79.                
  80.         }
  81.     }
复制代码

    继承有优点也有缺点
        优点:节省代码量,便于维护和代码的复用
        缺点:耦合性强

    如果父类和子类中的成员变量名相同了,就要使用this和super来调用成员变量
  1. class A {
  2.         int num = 30;
  3.     }
  4.                         
  5.     class B extends A {
  6.         int num = 20;
  7.                                 
  8.         public void method() {
  9.                 int num = 10;
  10.                 System.out.println(num);// 10
  11.                 System.out.println(this.num); // 20
  12.                 System.out.println(super.num); // 30
  13.         }
  14.    }
复制代码

    继承可以多层继承,但是不能多重继承,即:可以 class A extends B extends C{} 但是不能 class A extends B,C{}
   子类只能继承父类的非私有成员,子类不能继承父类的构造方法,但是可以通过super关键字访问父类构造方法
   子类构造方法在初始化的时候,要先初始化父类的构造方法,然后再做子类的构造方法
   当几个类存执 a is b的结构时才可以使用继承机制,不能说两个类都有同一个名字的方法就要用继承机制
   比如猫和手机都有玩游戏的方法,但是它们之间没有a is b的关系,所以不能使用继承机制
   在一个子类中访问一个变量
       1.现在子类局部范围找
       2.在子类成员范围找
       3.在父类成员范围找,不能在父类局部范围里找
       4.如果没有就会报错
   继承中一个内容,方法的重写,和之间学过的方法重构还是有区别的
   如果子类和父类中有相同名字的一个方法,子类如果向要扩充或改写此方法,就需要用到方法的重写
   重载是针对于一个类中方法的
        方法名字定义成一个是方便程序员使用,但是根据参数的方式自行匹配               
   重写是针对于继承机制中的多个类的方法
   重写的目的,对父类的代码进行扩展,或者变化特别大完全覆盖        

        先弄这么多,好多东西还没弄明白,看视频了

回复 使用道具 举报
感谢分享!!
回复 使用道具 举报
哎呀,大神的节奏啊
回复 使用道具 举报
感谢楼主
回复 使用道具 举报
恩 不错不错~~~~
回复 使用道具 举报
马赛 来自手机 中级黑马 2015-12-1 12:19:11
18#
上午继承里边的构造方法有点晕
回复 使用道具 举报
总结的很不错,值得学习
回复 使用道具 举报
一、构造方法(重点、掌握)
    构造方法是用来创建对象的,写法和前边学到的public static void xxx 和 public void xxx 类似
    只不过构造方法没有返回值,也没有void,方法名要和类名一模一样
    构造方法分为无参构造方法和有参构造方法,自己如果没有写构造方法,系统会有一个默认的无参构造方法
    Student类的构造方法
  1. class Student{
  2.         String name;
  3.         int age;
  4.         //无参构造方法
  5.         public Student(){
  6.        
  7.         }
  8.         //有参构造方法
  9.         public Student(String name, int age){
  10.                 this.name = name;
  11.                 this.age = age;
  12.         }
  13. }
复制代码

成员变量的赋值方法
    1,set和get方法
    2,构造方法传递参数

二、成员方法的分类和使用
  1. //无返回值
  2.         public void noValue(){
  3.                 System.out.println(100);
  4.         }
  5.         //有返回值
  6.         public int hasValue(){       
  7.                 return 100+200;
  8.         }
  9.         //有参
  10.         public void hasParam(int num){
  11.                 System.out.println(num);
  12.         }
  13.         //无参
  14.         public void noParam(){
  15.                 System.out.print("100+200");
  16.         }
复制代码

三、基本类的标准写法
        这个是老师的经验分享,写类的一般步骤
        1,private属性
        2,构造方法,先写无参再写有参的
        3,成员方法
        4,set和get方法
        5,用不到的可以不写,代码依附于需求
    拿Student当例子
  1. class Student{
  2.         private String name;       
  3.         private int age;
  4.         public Student(){
  5.        
  6.         }
  7.         public Student(String name, int age){
  8.                 this.name = name;
  9.                 this.age = age;
  10.         }
  11.         public void study(){
  12.                 System.out.println(name + "今年" + age + "岁");
  13.         }
  14.         public void setName(String name){
  15.                 this.name = name;
  16.         }
  17.         public String getName(){
  18.                 return name;
  19.         }
  20.         public void setAge(int age){
  21.                 this.age = age;
  22.         }
  23.         public int getAge(){
  24.                 return age;
  25.         }
  26. }
  27. class StudentDemo{
  28.         public static void main(String[] args){
  29.                 //使用set方法赋值
  30.                 Student s1 = new Student();
  31.                 s1.setName("张三");
  32.                 s1.setAge(18);
  33.                 s1.study();
  34.                 System.out.println("-----");
  35.                 //使用构造方法赋值
  36.                 Student s2 = new Student("李四", 20);
  37.                 s2.study();
  38.         }
  39. }
复制代码

四、创建一个对象的步骤
        同第六天
五、static关键字
        方法区里边有一个静态区,可以放静态变量和静态方法,static数据就放在方法区
        静态的东西随着类的加载而加载
        优先于对象存在
        静态变量可以被公用
        如果一个变量需要被对象共享,就应该使用static关键字
        直接通过类名调用,最开始学习方法的时候都是用的static修饰
        静态只能调用静态
        静态变量和成员变量的区别
        静态变量属于类,随着类的加载而加载
        成员变量属于对象,随着对象的创建而加载
        静态变量存储在方法区中的静态区
        成员变量存储在堆内存
        静态变量优先于成员变量,所以不能用对象.来调用静态变量
六、main方法
        public static void main(String []){}
        public : 公共的,权限最大的
        static : 静态的,通过类名.直接调用
        void :没有返回值的
        main :一个被特殊化的方法名,如果写错,java虚拟机不会启动
        String[] args :字符串数组类型的参数,以前用于接收键盘录入
        在控制台输入 java 类名.java 数据1 数据2 数据3 ...
        会传入字符串类型的参数
        可以通过以下代码获得args的内存地址
  1. class Demo{
  2.                 public static void main(String[] args){
  3.                         System.out.println(args);
  4.                 }
  5.         }
复制代码
七、Api文档
  1. /**
  2.          * 当前类是可以对数组做常见操作的类
  3.          *
  4.          * @author
  5.          * @version
  6.          */
  7.         public class ArrayTool {
  8.                 private ArrayTool() {}
  9.         /**
  10.          * 遍历数组中的每个元素,显示出来
  11.          * @param arr 请传入一个数组
  12.          */
  13.                 public static void print(int[] arr) {
  14.                         ...
  15.                 }

  16.         /**
  17.          * 判断num数字是否存在数组arr中,返回它的下标位置
  18.          * @param arr 请传递一个数组
  19.          * @param num 请传入一个数字
  20.          * @return -1、没有找到,否则返回下标值
  21.          */
  22.                 public static int getIndex(int[] arr, int num) {
  23.                         ...
  24.                 }
  25.         }
复制代码
       使用 javadoc -d .\帮助文档 -author -version ArrayTool.java 可以创建帮助文档
        打开新建的帮助文档文件夹,找到 index.html 就是帮助文档
        通过Api查看Math方法,Math方法的父类是java.lang,所以不用导包,因为lang包里的方法会经常被用到
        基本的数学方法都可以在Math类中找到
        Math没有构造,都是静态成员和方法,直接用Math.调用
        学习Math类中的random随机数方法(大于0小于1)
       获得1-100之间的随机数的代码
  1. import java.util.Scanner;

  2. class GuessGame{
  3.         public static void main(String[] args){
  4.                 //使用Math类中的random方法
  5.                 //random方法返回的是double类型,需要强制转换
  6.                 int randomNum = (int)(Math.random()*100)+1;
  7.                 Scanner sc = new Scanner(System.in);
  8.                 //人机交互
  9.                 System.out.println("请输入你猜的数字(1-100)");
  10.                 //因为不知道循环次数,所以使用while循环
  11.                 while(true){
  12.                         int guessNum = sc.nextInt();
  13.                         if(guessNum > randomNum){
  14.                                 System.out.println("大了,请重猜");
  15.                         }else if(guessNum < randomNum){
  16.                                 System.out.println("小了,请重猜");
  17.                         }else{
  18.                                 System.out.println("恭喜,猜对了");
  19.                                 break;
  20.                         }
  21.                 }
  22.                 System.out.println("游戏结束!");

  23.         }
  24. }
复制代码
       附上第七天ppt和总结


day_07.rar

367.89 KB, 下载次数: 174

回复 使用道具 举报
usaoak 初级黑马 2015-11-30 23:59:00
15#
能做到坚持很不容易。顶了……支持。
回复 使用道具 举报
马赛 中级黑马 2015-11-30 23:51:14
14#
bbaijiajinger 发表于 2015-11-30 23:26
内存 分为五个区

栈,堆,方法区、本地方法区、寄存器

另外两个用不到呢,谢谢补充
回复 使用道具 举报
写的不赖                        
回复 使用道具 举报
内存 分为五个区

栈,堆,方法区、本地方法区、寄存器
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马