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

qq591453432

中级黑马

  • 黑马币:81

  • 帖子:37

  • 精华:0

西安黑马JAVAEE第一期---记录帖by赌徒

  本帖为记录日常学习,日常总结帖,作为本人个人意见的帖子.有哪些不足还请大家指出,那些好的方面大家互相学习.

本帖子从7月26日开始记录,本人自7月19日正式开课(7月18为开学典礼)到今日已开学8日,课堂正式讲解内容为5日,目前已经讲到---数组,因为之前种种原因没有开贴,自今日起尽可能每日一贴,作为每日总结,供大家相互学习交流.在此感谢传智&黑马能给我提供一个学习晋升自己的机会,也感谢同学给我一个竞争激励的机会,感谢亲人对本人的相信与支持谢谢.


22 个回复

倒序浏览
在这里感谢班主任欧卫娜老师的关怀,感谢达摩老师的讲解(双元班感谢冯佳老师的视频),感谢李刚老师的辅导
回复 使用道具 举报
  7月26日,今日做了阶段性的考核.具体测试为前5天的知识汇总成的40道选择题.(30单选10多选),3道编程题.具体情况不再仔细说明.
  Day01:计算机基础,Java语言基础.
  计算机主要分为二大部分
计算机基础

一:硬件部分:1)外部硬件主要为输入设备(鼠标,键盘...)和输出设备(显示器,打印机,耳机...)
       2)内部硬件主要为:电源,主板,内存卡,硬盘.....
二:软件部分:1)系统软件:Windows,Linux,OSX,DOS....
       2)应用软件:QQ,网易云音乐,Word...(为了满足用户的需求,我们正是要学习软件开发.JAVAEE更偏向于浏览器方向)
Java语言基础

一:Java语言之父--詹姆斯*高斯林(James Gosling),java语言出现的背景.

二:JDK的版本1.1 ,1.2 , 1.3, 1.4, 1.5(此版本以后更名为5.0而5.0版本也是Java语言的里程碑式的版本,此版本包含了从1996年发布1.0版本以来的最重大的更新,其中包括泛型支持、基本类型的自动装箱、改进的循环、枚举类型、格式化I/O及可变参数。以上为百度到的.

三 : Java语言跨平台性的真实原理 : 因为Java编译的软件运行要通过Java虚拟机来运行(也就是JVM),所以实现了Java语言的跨平台性,但是要注意的是JVM并不是夸平台的,其需要使用对应的操作系统的JVM虚拟机.

四 : JRE和JDK : 1 ) JRE :  包括Java虚拟机(JVM)和Java程序所需的核心类库.即 JRE = JVM+Java核心类库.

                 2 ) JDK : JDK是提供给Java开发人员使用的Java语言的软件开发工具包,其中包含了很多开发工具如:javac.exe(编译工具) jar.exe(打包工具) 等,而在JDK中也包括了JRE(因为我们开发完程序后需要运行一下看看效果),所以当我们安装JDK后就不必再去单独安装JRE了.即 JDK = JRE + JAVA的开发工具.

                 a ) :JDK安装后目录的解释  bin目录 : 存放一些可执行程序,如:javac.exe(编译工具) jar.exe(打包工具)等.

                 b) : db目录 : db目录是一个小型的数据库, 在JDK6.0开始,Java中引用了一个新成员JavaDB,(一个小型开源数据库)其轻便且支持JDBC4.0所有规范,所以在学习JDBC时不用再额外安装数据库了,选择JavaDB即可 .

                 c) : jre目录 : 此目录是Java运行时环境的根目录,它包括Java虚拟机,运行时的类包,Java应用启动器以及一个bin目录,但不包含开发环境中的开发工具。

                d) : include目录 :  由于JDK是通过C和C++实现的,因此在启动时需要引入一些C语言的头文件,该目录就是用于存放这些头文件的。

                e) :  lib目录:为 Java 类库或库文件,是开发工具使用的归档包文件。                    

                       f) : src.zip文件:src.zip为src文件夹的压缩文件,src中放置的是JDK核心类的源代码,通过该文件可以查看Java基础类的源代码。

此处重要标记...因为我也没有完全记住这些目录所以大家都懂得,但是我想,在能力范围之内还是要记住的,毕竟我们的目标是成为内行!!!

五 : 第一个Java语言程序:helloworld.

1) : 先创建一个扩展名为helloworld.java 的源文件(程序员能读懂,计算机读不懂)

2) :   通过javac.exe编译工具来编译helloworld.java文件从而生成后缀名为helloworld.class的字节码文件(计算机能读懂,程序员读不懂)

3) : 通过java.exe运行工具来运行 helloworld查看结果.

4) :helloworld案例:

class helloworld {

  public static void main(String[] args) {

    System.out.println("helloworld");

  }

}


六 : 配置path环境变量: 为了让任何目录都可以调用JDK安转目录中的bin目录中的.exe程序

      配置classpath环境变量:为了在当前目录下可以正常编译当前目录的.java文件.(JDK5.0后可以省略配置classpath环境变量了,因为默认从当先目录查找).



注意:Java语言是强类型语言,所以说在其编译时对那些关键字还有其他的字母大小写是有区别的.(另外根据不同老师,校区安排可能学习的顺序可能不同,还请谅解.)



在此再次感谢达摩老师对前五天总结的树状图.




1-5天知识点汇总.jpg (12.05 KB, 下载次数: 50)

前五天总结

前五天总结
回复 使用道具 举报
抢沙发,前来顶贴
回复 使用道具 举报
看完楼主的总结后,我的心久久不能平静!这些总结构思新颖,题材独具匠心,段落清晰,情节诡异,跌宕起

伏,主线分明,引人入胜,平淡中显示出不凡的文学功底,可谓是字字珠玑,句句经典,是我辈应学习之典

范.就文学艺术的角度而言,可能不算太成功,但它的实验意义却远大于成功本身.一马奔腾,射雕引弓,

天地在我心中!您不愧为无厘头界新一代开山怪!是你让我的心里重燃起希望之火,这是难得一见的好说

! 苍天有眼,让我在有生之年能观得如此精彩说说!真如"大音希声扫阴翳",犹如"拨开云雾见青天",使

我等之辈看到希望,晴天霹雳,醍醐灌顶,不足以形容大师文章的构思;巫山行云,长江流水更难比拟大

师的文才!你烛照天下,明见万里;雨露苍生,泽被万方!透过你深邃的文字,我仿佛看到了你鹰视狼顾,龙

行虎步的伟岸英姿;仿佛看到了你手执如椽大笔,写天下文章的智慧神态;仿佛看见了你按剑四顾,江山

无数的英武气概!你说的多好啊! 我在网上打滚这么多年,所谓阅人无数,见怪不怪了,但一看您的气势,

我就觉得您与在网上灌水的那帮小混蛋有着本质的差别,那忧郁的语调,那熟悉的签名,那高屋建瓴的辞

藻,就足以证明您的伟大。是您让中华民族精神得以弘扬。佩服佩服
回复 使用道具 举报
加油!!{:2_36:}
回复 使用道具 举报
Day02 : 一,常量:

1) : 什么是常量 : 在程序执行的过程中其值不可以发生改变 .
    a) : 常量的分类 :  字面值常量  ,  自定义常量 (面向对象部分讲,然而我们后天就开始讲了!!!!!)
    a1) : 字面值常量 : byte , short , int , long ,char ,String(引用数据类型), float ,double , boolean.(目前我自己知道的)
二 : 进制
此处老师不要求掌握,可能因为怕自己学的时候绕进去出不来.
进制就是进位制,是人们规定的一种进位方法。 对于任何一种进制--X进制,就表示某一位置上的数运算时是逢X进一位。二进制就是逢二进一,八进制是逢八进一,十进制是逢十进一,十六进制是逢十六进一。
此后不在详细解答进制的相关转换等,如果想"了解"推荐学习(进制的快速转换法--8421码);
1) : 不同进制在Java语言中的表现:
二进制 : 以0b开头    如 : 0b100  (表示二进制的100)
八进制 : 以0开头      如 : 0100    (表示八进制的100)
十进制 : 默认形式    如 : 100      (表示十进制的100)
十六进制:以0x开头  如 : 0x100   (表示十六进制的100)


2) : 原码 , 反码 , 补码 (都是指的二进制数)
原码:
        就是二进制定点表示法,即最高位为符号位,“0”表示正,“1”表示负,其余位表示数值的大小
反码:
        正数的反码与其原码相同;负数的反码是对其原码逐位取反,但符号位除外。
补码:
         正数的补码与其原码相同;负数的补码是在其反码的末位加1。
三:变量
1) : 什么是变量 : 在执行过程中某个范围内其值可以发生改变的量.
2) : 定义格式 : 数据类型  变量名  =  变量值 ;
3) : 为什么要定义变量 : 用来不断存放同一类型的常量.并可以重复使用.
4) : 数据类型 : 基本数据类型 , 引用数据类型
     a) : 基本数据类型 : 整数型 , 浮点型 , 字符型 , 布尔型 ,
         a1) 整数型 : byte ( -2^7 到 2^7-1 ) , short ( -2^15 到 2^15-1 ) , int ( -2^31 到 2^31-1 ), long ( -2^63 到 2^63-1 )
         a2)浮点型 : float , double (因为浮点型的储存方式与整数型的不同所以这里不再写其取值范围但是要记住float的取值范围大于long的取值范围)
         a3)字符型 : char 接收字符    (String为引用数据类型来接收字符串,因为本人之前学过C#不写上总觉得少些什么...强迫症)
         a4)布尔型 : boolean      
     b) : 引用数据类型(后天开始学面向对象,之后补充.)


-------------------------------0:06了,该睡觉了,明天接着更新.最近上课老是困,调一下生物钟不能再熬夜了,大家也不要熬夜太久哈-----------------------------
各位共同加油加油!!!!






回复 使用道具 举报
Day02下 : 感冒了好难受,话不多说,继续更.
一 : 运算符
  a) : 赋值运算符  = , += , -= , *= , / = , %=
  b) : 算数运算符 + , - , * , /,%,++ , -- ,
  c) : 逻辑运算符  & , && , |  , || , ^, !
  d) : 关系运算符  > , >= , < , <= , == , !=
  f) : 三元运算符 : (判断表达式) ? 值1 : 值2 ;
二 : 算数运算符 (以二进制位来进行操作)
  & , | , ~ , ^ , << ,>> ,>>>
个人认为在使用位运算符的时候只要把二进制中的0看做false 把1看做true 就很好理解了.


三 : 数据类型转换
1) : 强制转换  :  当一个大值的数据类型要赋值给一个小的数据类型变量时因为会超出这个变量的取值范围就需要进行强制转换,但是需注意强制转换后可能会损失精度.
2) : 隐式转换 :   取值范围小的数据类型与取值范围大的数据类型进行运算,会先将小的数据类型提升为大的数据类型再运算
需要注意的是:  byte  x  =  3 ;  x += 2 ; 操作时后台是这样处理的   x = (byte) (x+2);
另外在进行   字符   与整数运算时 会将char 类型隐式转换为int  这就导致了 当运行 System.out.println('a' + 1);时出现 98;

四 : 关于算数运算符 ++ , --
++,--分为(前++)和(后++) ,-- 与之相同    当进行(前++)时需要先将值+1后再参与其他操作,而(后++)是先将值进行操作后再进行+1操作.
当一个数据"单独""进行++操作时,就想到于+1运算.


回复 使用道具 举报
Day03 : 逻辑运算符的基本用法   键盘录入   选择语句(if语句和switch语句)


一 : 逻辑运算符的基本用法
   a) : &逻辑与:有false则false。   && 短路与 : 当进行判断时左边为false后边不再进行"操作"
              |逻辑或:有true则true。     || 短路或 : 当进行判断时左边为true后边不再进行"操作"
             ^逻辑异或:相同为false,不同为true。
             !逻辑非:非false则true,非true则false。
注意:当使用短路与&&时左边为false时右边不再进行操作  如 : int x = 3 , y = 2;       x++  ==  4 &&  ++y  =3 后 x = 5 , y  =  2 (感觉我理解的也有点错误,反正大概就是这个意思,个人理解吧).   
二 : 键盘录入,(这里直接做2个数的和操作,不再总结)
[Java] 纯文本查看 复制代码
import java.util.Scanner;
calss Day03 {
  public static void main(String[] args) {
   Scanner sc = new Scanner(System.in);
    int num1 = sc.nextInt();
    int num2 = sc.nextInt();
    System.out.println(num1+num2);
  }
}


三 : 选择语句
   1) : if 语句
单分支情况: if(判断表达式) {语句体}
双分支 : if(判断表达式) {语句体1} else{语句体2}
多分支: if(判断表达式1){语句体1} else if(判断表达式2){语句体2}....else{语句体n}
(网页编辑太难受了还请各位多多谅解)
     2) : switch语句
switch (表达式){
case 值1 : 语句体1; break;
case 值2 : 语句体2; break;
case 值3 : 语句体3; break;
...
default : 语句体n ; break;
}
注意:switch语句中的表达式可以为byte , short , int , char , Strint(JDK1.7之后),枚举(JDK1.5之后)       (不可以接收浮点型)
尽管有时候可以省略break但是还是不要省略,因为会出现case穿透现象,也不要省略break因为有它的时候可以作为一个对不正确的现象的提示.
另外在switch语句中case优先级大于default,所以无论default放在那里,程序都是先进性case的判断.
回复 使用道具 举报
Day04 : 循环语句   方法  
       1) : 循环语句--for循环
for (初始化表达式;判断表达式;循环后的操作表达式) {
循环语句体;
}
例如输出1-100
[Java] 纯文本查看 复制代码
for(int x = 1 ; x <=100; x++) {
System.out.println(x);
}
不再详细解释了,另外感谢达摩老师(for循环后的圆括号中可以定义多个变量!!!)
      2):循环语句--while循环
初始化表达式;
while(判断表达式) {
循环体语句;
控制条件语句;
}
例如输出1-100
[Java] 纯文本查看 复制代码
int x = 1;
while(x <= 100) {
System.out.println(x);
x++;
}
注意:for循环结束后初始化表达式中的变量不能再使用,二while语句可以.
     
      3):循环语句--do...while循环
初始化表达式;
do{
循环体语句;
控制语句;
}
while(判断表达式) ;
注意: do...while语句与for和while语句相比较,do...while无论半段表达式是否正确都进行一次循环.


      4) : 方法
修饰符 返回值类型 方法名(参数类型 参数名1,参数类型 参数名2...) {
            方法体语句;
            return 返回值;
}
当没有返回值时返回值类型使用void.
(具体内容不再解释:http://www.itheima.com/apply/21263.html该网站为基础视频下载链接,侵权删除!!!)


回复 使用道具 举报
Day05:数组
一维数组的定义格式: 数据类型[] 数组名 = new 数据类型[数据长度];
                                数据类型[] 数组名 = new 数据类型[]{元素1,元素2,…};可以简化为 数据类型[] 数组名 = {元素1,元素2,…};
数组是为了储存同一种数据类型的多个值,可以储存基本数据类型,也可以储存引用数据类型.
数组的长度为:  数组名.length  其索引(角标)的最大值为: (数组名.length-1)
两个常见的异常:ArrayIndexOutOfBoundsException:数组索引越界异常    NullPointerException:空指针异常


数组的内存图这里不再总结,还请大家多多谅解,因为有的东西我是知道的,但是说出了就很不流畅之类的.


二维数组:
定义格式:int[][] arr = new int[3][2] (这种定义格式定义出了二维数组的长度为3,每个一维数组的长度为2)
                 int[][] arr = new int[3][]  (这种定义格式定义出了二维数组的长度为3,没有定义其中一维数组的长度)
                 int[][] arr =  {{1,2,3},{4,5},{6,7,8,9}};  (这种定义格式定义出了二维数组的长度为3,第一个一维数组长度为3,第二个为2,第三个为4,并且定义出了每个一维数组中的元素值);


在学习二维数组时我经常把它看做一个树状图例如






回复 使用道具 举报
楼主的学习激情很大,让我来顶贴的热情更高
回复 使用道具 举报
大神求带。。。总结的不错
回复 使用道具 举报
Day06 : 面向对象(一)             今天的课程抽象的很~~~~~所以今天看着笔记总结....
一) : 面向对象的特征 :封装(encapsulation) 继承(inheritance)多态(polymorphism)[今天只学习了封装的一部分private]


二) : 类:一组相关的属性和行为的集合.   对象: 该类事物的具体体现.


三) : 成员变量和局部变量 :
成员变量定义在class中,方法外.  局部变量定义在方法中和方法上.
成员变量储存在堆中,随着对象的创建而存在,对象的消失而消失.  局部变量储存在栈中,随着方法的调用而存在,方法的调用完毕而消失.
成员变量有初始化赋值 , 局部变量没有初始化赋值,必须先赋值再使用.
另外:局部变量名称可以和成员变量名称一样,在方法中使用的时候,采用的是就近原则。


四) : 方法的形式参数是类名的时候  其接收的是对象.


五) : 匿名对象 : 即没有名字的对象,使用它的时候最好是只进行一次调用的时候,因为当匿名对象使用结束后就会变成垃圾.


六) :封装  :  是指隐藏对象的属性和实现细节,仅对外提供公共访问方式。
为什么要封装 : 隐藏实现细节,提供公共的访问方式, 提高了代码的复用性, 提高安全性    (因为有的时候需要给类中的属性定义一些条件比如说年龄不能为负数之类的,所以在类中并没有办法直接进行定义,所以要对其封装,就是使用private 关键词进行修饰,然后使用setXXX  ,   getXXX方法来获取相应的值并return到相关属性中.)
封装的原则 : 将不需要对外提供的内容都隐藏起来。把属性隐藏,提供公共方法对其访问。


七) : this关键词 : 代表当前对象的引用 .
今天的总结差不多到此结束了,我下边会用一个完整的例子来解释我对其理解,有更好的理解或者对我的想法有问题的还请多多指教,谢谢.


[AppleScript] 纯文本查看 复制代码
//定义一个饮料类;

class Day06_Dome {
	public static void main(String[] args) {
		drink d1 = new drink();
		d1.brank = "可口可乐";
		d1.capacity = 880;
		d1.price = 7;
		d1.drink();
		d1.see();
	
	}
}

class drink {

	String brank;		//创建品牌属性
	int capacity;		//创建容量属性
	int price;			//创建价格属性
	
	public void drink() {		//定义可以喝的行为
		System.out.println("可以喝...");
	}

	public void see() {			//定义可以查看多少钱的行为
		System.out.println(brank + "饮料"+capacity+"毫升的"+price+"元钱");
	}

}


写的不太好还请大家多多谅解.
回复 使用道具 举报
每天抢沙发 ing。。。。。。。。。。
回复 使用道具 举报
本帖最后由 qq591453432 于 2016-7-30 23:01 编辑

Day07_面向对象(二)


话说今天好像绕弯路了,特么的不知不觉把private和static还有 类名. 调用联系到一起去了,然后就特么的不知不觉的掉坑里了,还好现在忘了这件事,先不管了,生活总是要继续的,收拾好心情继续出发.加油加油!!!!!!!(说实话今天心情特糟,但是还是需要整理一下的,毕竟坚持了才能前进......注意不是在自己脚底下坚持挖坑)


一) :  构造方法  :构造方法的作用就是给初始化成员变量赋值,一种是无参数的构造方法,一种是有参数的构造方法(当然是类里的成员啦~~)
构造方法的格式和特点 : 1)方法名与类名相同(大小也要与类名一致)  2)没有返回值类型连void都没有  3)没有具体的返回值return;
如  :   class happy() {
           int a;
           String b;
           public happy() {}    //这种是没有参数的构造方法,(因为没有参数所以也就没有给初始化变量赋值这一说法了)[也是默认的格式]
           public happy(int a , String b) {           //这里运用的是方法的重载,毕竟构造方法也是方法,另外this.a=a;这个就是这个格式了...我也不知道该怎么解释
               this.a = a;                          //7.30 补充,this代表这个对象的地址值(我是这么理解的)
               this.b = b;
           }
   }
另外需要注意的是   :    一旦一个类里边有一个"构造方法" 后就会没有默认的格式,所以当我们定义了一个有参数的构造方法后就需要重新定义一个没有参数的(当然根据实际情况去决定要不要再定义,当然也可以有一个参数的,二个参数的等等)
二)  :  给对象变量赋值的两种方式的区别
A:setXxx()方法 修改属性值    B:构造方法给对象中属性进行初始化
三)  :  static关键字(我看见static莫名的好烦啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊!!!!!!!!!!!!)
static关键字的特点:  1:随着类的加载而加载    2:优先于对象存在  (因为他在方法外????再说也没讲方法中定义静态变量的啊!!!又特么掉坑里了?????)  3:被类的所有对象共享  4 : 可以通过类名调用 (因为他在类中,方法外,?????好像特么自己又绕回来了)

另外是静态的方法.....我因为这个地方绕不少圈子了,所以我也不总结这里了,就记住一个静态只能访问静态.
四) : 静态变量与成员变量的区别
静态变量也叫类变量  成员变量也叫对象变量(不写了........好烦)


五)  :  工具类中使用静态方法因为是工具,所以是面向所有的对象都有相同的共性,所以使用static
另外要 私有(封装)一下构造方法,因为我们不想其他人随意更改我们的参数.


还需努力,拜拜,心好累,晚安








回复 使用道具 举报
本帖最后由 qq591453432 于 2016-8-4 19:40 编辑

今天停更!!!!!!!!!因为最近睡得太晚了,中午有的时候老跑神,后天有一天星期,后天补更,谢谢


补更Day08   Day09   Day10


Day08_01代码块
局部代码块:在方法中出现限定变量声明周期,及早释放,提高内存利用率.


构造代码块:在类中方法外出现,多个构造方法方法中相同的代码存放到一起,"每次调用构造都执行",并且在构造方法前执行


静态代码块:在类中方法外出现,并且加上static修饰,随着类的加载而加载,用于给类进行初始化,并且只执行一次.

Day08_02继承
面向对象三大特性:封装,继承,多态


继承的好处:提高了代码的复用性,维护性,并且让类与类之间产生关系,也是多态的前提.

弊端:类之间的耦合性增强了,但是要知道其原则是  高内聚,低耦合(利大于弊)  

继承的特点: 只支持单继承(类与接口之间支持多实现)  , 如果想看一个体系的共有特性就看最顶层类(Object类是所有类的最顶层类),想用这个体系的所有功能就看最底层类

注意事项: 子类只能继承父类的非 私有 成员  子类不能继承父类的构造方法,但是可以用super关键词去访问.不要因为部分功能区继承,而是看他们是否是对方的一类才去使用.  

继承中的成员变量: 根据就近原则,但是如果出现相同名字的变量也没有太大意义,因为完全可以从父类继承下来.

this   super关键词   this代表当前对象的引用,谁来调用我我就代表谁,super代表当前对象的父类的引用.

方法重写 : 当子父类出现了一模一样的方法(返回值类型时子父类) , 当子类需要父类的功能,而功能主体子类有自己 特有的内容时可以重写父类方法,这样既可以保留原有的父类中的方法,又可以用子类特有的方法.

注意事项:父类的私有方法不能被重写(根本就访问不到,就没法继承,就没办法重写).
              子类重写父类方法时访问权限不能更低(要不然子类权限越来越小,到最后私有了别人不就访问不到了,所以写这个类也没什么意义了,所以最好和父类一致)
              父类静态方法,子类也必须通过静态方法重写(因为多态的原因,快捷的记住静态只能访问静态就行了)
              所以子类重写父类的方法的时候声明最好一模一样.

final 关键字修饰词  当final修饰类的时候该类不能被继承
                              修饰方法后该方法不能被重写
                              修饰变量后,变量变为常量(在显示初始化后或者在对象构造完毕前)
注意:当final修饰引用类型时,其地址值不能被改变,但是对象中的属性可以改变

Day09_多态及抽象类,接口
多态:  事物存在的多种形态(例如一只哈士奇,你既可以说他是一只狗,也可以说他是一只动物)
多态的前提: 1,要有继承关系2,要有方法重写(都不重写的话你继承它有个毛线用?直接用不就行了)3,要有父类引用指向子类对象
成员访问特点:变量:编译看父类,执行用父类,   方法:编译看父类,执行看子类  (动态绑定)  静态方法:编译看父类,执行看父类.
  
多态的好处与弊端: 提高了代码的维护性,提高了代码的扩展性.但是不能使用子类的特有行为和属性.


抽象类: 就是不能具体描述的.  有抽象方法的一定是抽象类,但是抽象类可以没有抽象方法.不能被实例化,但是可以根据多态的应用去实例化,抽象类的子类要么是抽象类,要么重写抽象类中的所有抽象方法.   有构造方法,可以是有参可以是无参


接口与抽象类相似,但是接口中的方法肯定全部都是抽象的.没有构造方法
回复 使用道具 举报
Day10主要讲了包和内部类,这里不再详细做笔记了
回复 使用道具 举报
666666666666666666666666666
回复 使用道具 举报
不错,加油
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马