百战程序员V1.2——尚学堂旗下高端培训_ Java1573题 - Go语言中文社区

百战程序员V1.2——尚学堂旗下高端培训_ Java1573题


百战程序员_ Java1573题

QQ群:
561832648
489034603

掌握80%年薪20万
掌握50%年薪10万

全程项目穿插, 从易到难,含17个项目
视频和资料持续更新,请关注www.itbaizhan.com

国内最牛七星级团队
马士兵、高淇等11位十年开发经验专家录制

目 录

百战程序员Java1573题 2
百战程序员介绍 3
JavaSE编程基础 9
第一章 初识Java 9
阶段项目课程1 11
第二章 数据类型和运算符 14
第三章 控制语句 17
第四章 数组 24
阶段项目课程2 27
第五章 面向对象 27
第六章 异常机制 39
阶段项目课程3 41
第七章 常用类 41
第八章 容器 47
阶段项目课程4 57
第九章 IO流技术 58
第十章 多线程 67
第十一章 网络编程 73
项目阶段课程5 80
附:内部类专题(自学) 80
线程池专题(自学) 83
附3:设计模式初步专题(自学,适合初级.更深入的会在框架阶段) 84
XML技术 86
反射 92
正则表达式(自学) 93
阶段项目课程6 99
百大项目第一阶段:项目调研 99
Oracle和Mysql数据库技术 99
阶段项目课程7 113
百大项目第二阶段:数据库表设计 114
存储过程 114
JDBC技术 115
阶段项目课程8 123
HTML语言 124
CSS语言 124
阶段项目课程9 125
HTML5新标签和新功能 126
BootStrap技术 128
阶段项目课程10 128
JavaScript语言 128
jQuery技术 134
阶段项目课程 11 147
服务器端编程(Servlet技术) 147
JSP技术 154
EL和JSTL标签库 155
AJAX技术 156
阶段项目课程12 156
中级补充课程 156
阶段项目课程13 157
百大项目第三阶段:需求分析、概要和详细设计 158
Struts2 框架 159
Hibernate 框架 160
Spring 框架 162
阶段项目课程14 164
Spring MVC技术 166
MyBatis 框架 168
EasyUI技术 170
RBAC技术 170
shiro安全框架 171
阶段项目课程15 172
maven 174
Linux系统实战 174
逆向工程、分页插件 175
Nginx服务器与vsftp服务器 175
HttpClient、jsonp、dubbo 176
Redis存储系统 176
solr企业级搜索 177
Zookeeper分布式系统和服务集群搭建 180
SSO单点登录 180
阶段项目课程16 181
JFinal 敏捷开发框架 183
百大项目第四阶段:项目核心模块开发 184
自由项目和风险投资17 184

百战程序员Java1573题
班级编号: 教学质量投诉邮箱: 1034558546@qq.com

本套课程体系为北京尚学堂科技集十年教学精华打造而成,并且是高端品牌“百战程序员”的主要教学体系之一(约占1/4课程,还有大数据、架构师、产品经理。4核课程让你挑战CTO职位)。“百战程序员”有“身经百战”含义,我们希望在培训期间学员就能身经百战,学习和参与各种项目,身经百战,脱胎换骨,高薪工作手到擒来。
《百战程序员Java1573题》是集北京尚学堂10年Java教学精华所成, 同时按照教学进度,从零开始步步深入,直到成为年薪20万的程序猿。按照我们目前的数据统计,能够完成1573题80%的同学,年薪应该可以达到20万左右。对于一般同学来讲,能够完成50%就足够找一份年薪10万的工作。可以说,本套题集字字千金!不,题题千金。

由于课程量较大,而且加入了很多新技术,希望同学们课上认真跟讲师互动,课下认真复习,争取毕业时拿到较高、较满意的薪水。

本套课程是尚学堂经过10年教学改版的最新课程,包含了无数老师的心血。

如果学习期间,我们的教学活动有需要改进的地方,可以跟授课讲师直接交流,或者您可以将具体意见直接投诉到北京总部邮箱:1034558546@qq.com. 我们将会在第一时间进行改进,并与您取得联系。

本套课程的教学进度是经过尚学堂多位金牌讲师合力制定,有一定的科学性。

本套课程配套视频由全国最牛的“七星团队”录制。 马士兵、高淇、裴新、邹波、李毅、胡琦光、卢俊杰、齐毅、刘凯利、夏中云、高明鑫等。每位老师都有10年以上开发和教学经验。
本套课程体系 (1.0版)已经完成,视频和其他资料我们将每周进行更新, 想加入我们一起学习,请加入QQ群:453049965或者416323638 通过申请后加入我们,广交朋友,一起学习,一起战斗。
百战程序员介绍

官网:www.itbaizhan.com
让成功只需努力,不需运气
把小白培养成CTO的黄埔军校

我们的理念:
让成功只需要努力,不需要运气!
我们的定位:
把小白培养成CTO的黄埔军校
我们的承诺:
按效果收费,保障年薪,少一万,赔一万
我们的薪水保障(我们对课程有信心到会将保底薪水合同里面,愿意承担法律责任):
第一年年薪15万(保底薪水,拒绝玩文字游戏)
第二年年薪30万(保底薪水,拒绝玩文字游戏)
第三年年薪40万(保底薪水,拒绝玩文字游戏)

为什么叫“百战程序员”?

北京尚学堂科技旗下高端品牌,十余年教学实践、项目实战,50多位企业技术总监参与研发课程,所有精华全部汇聚到“百战程序员”,致力于打造成“培养CTO的黄埔军校”。

源自成语“知己知彼,百战不殆”,广义的含义就是:做好充分准备,每次挑战都能成功。这也是完全符合我们的理念“让成功变得简单,只需要努力,不需要运气”。

“百战”也暗含“百战百胜”之意,非常吉利。

“百战”也是我们教学方案的缩写“百大项目案例实战”,整个为期3年时间,我们会准备100个项目实战案例,为大家冲击CTO岗位做好充分准备。

最后,希望所有“百战程序员”, 靠自己努力,成为改变家庭命运的有责任感的战士、奋斗的战士、不屈的战士、百战百胜的战士!

培养理念和课程体系:
2017年
覆盖专业:(Java方向)Java+大数据+架构师+产品经理
覆盖专业:(PHP方向)Java+大数据+架构师+产品经理
CTO的含义是”首席技术官”,国内一般称为“技术总监”, 一般是分管技术的副总级别,也就是公司技术一把手, 需要对公司整体的技术方案负全责, 这就需要CTO具有相当强的综合能力。

尚学堂十余年培训数万人,影响了几百万程序员,具统计只有约9.83%的程序员最终走到了CTO或类似级别的岗位,成为真正的人生赢家。 典型代表是腾讯公司股东和副总裁张志东先生。也是众多技术发烧友的“最终梦想”,也是我们“百战程序员”的梦想, 也告诉大家IT界有很多技术宅男实际上身价亿万。

(百科链接:http://baike.baidu.com/item/%E5%BC%A0%E5%BF%97%E4%B8%9C/12113

业界公认评价
张志东很值得尊敬,一是其技术上的炉火纯青,即便是他的对手,都对这点佩服得五体投地。QQ的架构设计源于1998年,截止到2009年8月,QQ用户数从之前设计的百万级到现在的数以亿计,整个架构还在适用。  张志东值得尊敬的另一个原因是其对物质上的追求极低,在腾讯创始人们纷纷在澳洲买别墅,开游艇,高管集体团购宝马的态势下,张志东却一直开着20多万的中档车。”

(马化腾旁边的就是:腾讯另一个主要创始人,张志东)

我们设计的课程涵盖了作为CTO需要了解的绝大部分技术内容,是尚学堂十余年研发的精华所在,累计投入研发经费1200万元,里面包含了50余位CTO的技术精华,并且我们会持续更新。
我们设计为四个方向,是为了全方位综合性的培养人才,事实上,只有精通任何一个方向,熟悉其他一个方向,就足够能拿到40万以上的年薪。 各位在学习的时候,也不要期望能将多个方向全部精通。我们的理念仍然延续北京尚学堂最基本的教学理念“实战化”,希望百战程序员们“身经百战,见识各种技术、各种项目,集百家所长”, 这样更有机会成为CTO。

课程体系:(详见Java、大数据、互联网架构师、产品经理)
Java/PHP: 作为未来的CTO怎么能不熟练掌握一门开发语言呢? 这是进入行业的基础
大数据: 大数据是目前和未来都很热门的方向。课程涵盖:大数据、机器学习、云计算。
互联网架构师: 涵盖高并发、虚拟机调优、数据库优化、分布式架构等。
产品经理: 乔布斯就是最好的“产品经理”,不懂得产品设计过程如何做好“CTO”?

为何我们敢保障15万(第一年)、30万(第二年)、40万(第三年)年薪, 甚至写到合同里面?【即使你在家自学本套1370题目,掌握80%,就可以挑战20万年薪了!】 事实上,只要精通任何一个方向,熟悉其他一个方向,就足够能拿到40万以上的年薪。 定位4个方向全方位发展,让学员更安全更有保障能拿到对应薪酬,这样也让公司更安全,让“百战程序员”品牌更有分量。

看看“百战程序员”前身“大数据班”学员的就业吧,仅仅掌握了Java和大数据,第一年就个个嗷嗷叫, 冲击30万年薪了。 当然,为了安全起见,我们第一年保底薪资保守的定到15万。 以前的“双核CPU”课程就足够保障了, 那么现在的“四核CPU”课程呢? 学员们很期待,我们也很期待!
以下聊天记录为学员和老师的对话,为了不影响学员工作,一般将名字隐去。

年薪37万,这只是刚毕业第一年的学员!还有一个23K*12=27.6万年薪。注意,这只是学了Java,再学了大数据的学员,并且只是第一年。如果,将架构师和产品经理学完呢?当然,我们不主张一直再学校学习,第二年和第三年全部是平时上班,周末集训。
当然,这些是其中的优秀学员!

下面是相对普通的毕业学员,一行三人来北京学习,毕业后分布在北上广深一线大城市, 平均月薪16k,年薪为:16*12=19.2万,未加五险一金、补助和年终奖。加入的话,妥妥突破20万。

百战程序员培养时长和方式:

腾讯等大型企业对技术人员定级和相应的薪酬标准(2015年,后续年份自我脑补):

入学方式:
进入官方网址:itbaizhan.com
联系报名
自学<Java300集第一季>内容(共100集,约40小时课程。不需要学习第二季和第三季)
北京大学计算机系教授都推荐的课程,你怎么能不自学,可以自行看视频学习,也可以加入自学辅导班(收费:480元,时长4年有效)

参加入学考试(技术笔试、面试)
通过考试者,可以入学
大学毕业的报名者,请携带毕业证和身份证
大学在校生,请携带学生证和身份证

免费实训4天,双向选择
免费特训4天,能不能撑下来。能撑下来就跟,不能淘汰。
正式签订合同,开始学习

收费方式:
可0学费入学!可参与合作单位、百度金融等大型机构和银行的学习贷款,让你零学费入学,赚钱后再还学费(通过学习每个月多赚3000就相当于免费学了。很多学员学完后是每个月多赚1万)!
每年付一次,双向选择,客户决定是否续费第二年服务

开班计划(2017年,共计:6期)

JavaSE编程基础
第一章 初识Java
你学习编程的目的是什么?学习编程最快的办法是什么?
程序员的职业规划是什么?我怎么能拿到10万年薪,30万年薪,50万年薪?
一个技术点,怎么样才能算学会?需要能默写出来吗?
北京尚学堂旗下“百战程序员”的理念和定位是什么?
如何考取百战程序员,进入正式班级学习?
哪个网站会公布最新的“百战程序员”视频和资料?
说出计算机语言为什么按照第一代、第二代、第三代发展?
降低计算机语言开发难度,减少对计算机硬件的直接编程

Java有什么核心优势让其流行?
跨平台性
互联网上的电脑硬件不同,软件环境差异较大。需要一个跨平台的语言。

Java的三个版本是什么?
JavaSE: 定位在客户端,主要用于桌面应用软件的编程
JavaEE:定义在服务器端的企业版,主要用于分布式网络程序的开发
JavaME:主要应用于嵌入式系统开发,如手机和PDA的编程

Java是哪个公司发明的? 现在这家公司处境如何? 为什么?
Java是Sun公司发明的
Sun公司在2009被Oracle公司收购
因为Sun是一家极具创新能力的公司,但是没能利用Java构建一个强有力、可变现的生态系统,没打好Java这张牌

Java的跨平台是通过什么实现的?
通过在不同平台上安装相应的Java虚拟机实现的;虚拟机可以将字节码文件(class)解释成相应平台的机器语言并执行

Java语言释型还是编译型?还是两者都是?
先编译再解释

JDK、JRE、JVM的全称是?
JDK: Java Development Kit 针对Java开发员的产品
JRE: Java Runtime Environment是运行Java程序所必须的环境集合
JVM:Java Virtual Machine解释运行Java字节码文件,跨平台的核心

JDK包含JRE,这句话对吗?
对;JDK包含JRE;同时JRE包含JVM

【上机】熟悉DOS命令行方式的常用命令:dir、cd等.
DOS下,自动补齐命令的键是哪个?DOS下,想查找以前执行的命令用哪个键?
DOS下,自动补齐命令的键是哪个Tab键
DOS下,想查找以前执行的命令用上下箭头, ↑或↓键

DOS下,dir命令表示什么含义? cd 表示什么含义?
dir:查看某个目录下的子目录和文件
cd:改变当前目录

【上机】安装JDK、配置环境变量、并写出自己的第一个HelloWorld程序
需要配置Java_HOME ,path,classpath三个环境变量
public class Test{
public static void main(String args []){
System.out.println("Hello World");
}
}

为什么采用Java_HOME的方式配置环境变量较好?
便于Java_HOME路径的重用,避免由于JDK安装路径变化而修改多个环境变量;

public class 的类名必须跟文件名保持一致吗?
public class 的类名必须跟文件名保持一致

编程风格一定要:成对编程和缩进。用文字或代码说明如何实现成对编程和缩进。
public class Test{
public static void main(String args []){
System.out.println("Hello Java");
System.out.println("尚学堂");
}
}

system.out.println("hi"); ----这句代码能否顺利执行?
不能顺利执行;Java区分大小写,需要将system修改为System

一个Java源文件可以写多个class吗?编译后,会不会生成多个class文件?
一个Java源文件可以写多个class?编译后会生成多个class文件

编程时,为什么需要注释?注释的类型?
注释就是程序员为读者作的说明,是提高程序可读性的一种手段;注释同时也是调试代码时的一种手段,可以对某些不要执行的代码进行注释;
注释分为单行注释,多行注释和文档注释三种类型;

多行注释能不能嵌套使用?
多行注释不能嵌套使用

【上机】使用snagit/ FastStone Capture软件截图
【上机】使用pdf阅读器做笔记,阅读相关电子书文档
【上机】使用录屏软件Camtasia录制和转换视频
【上机】使用onenote记笔记和画图
【上机】使用亿图软件画出相关图形

阶段项目课程1
【项目】台球游戏小项目
练习目标:

  1. 找到敲代码的感觉
  2. 收获敲代码的兴趣
  3. 作出效果,找到自信
  4. 从一开始就学会调试错误
  5. 掌握Java代码基本结构
    注意:不要求学生理解代码的语法功能,只要按照代码结构输入代码,能够经过调试实现代码的正常运行即可;
    全部讲解和练习时间控制在2小时以内
    项目需求:
    桌球在球桌中按照一定线路和角度移动;遇到边框会自动弹回

要求:
即使看不太懂,也要照着敲如下游戏代码,至少5遍。要求所有字符和源文件一致。如果报异常,请细心看所在行和老师代码有何区别:

第二章 数据类型和运算符
常用的进制有哪些?
十进制、二进制、八进制、十六进制

如何将10进制转换为2进制数据
除2取余,逆序排列
举例:

位、字节、字符的概念及其计数范围?
位:计算机存储信息的基本单位,代表一个二进制数位,
计数范围:0或1
字节:8个连续的二进制位为一个字节,可以存放1个西文字符的编码
计数范围:-128~127
字符:单引号用来表示字符常量,例如 ‘A’,‘张’
计算范围:0-65535之间的编码

标识符的作用是什么?
用作给变量、类和方法命名
这个标识符合法吗? int aaa@bbb = 33;
不合法

标识符能不能使用汉字开头?为什么?
可以,字母的含义包括:英文、汉字等(不建议大家使用汉字来定义标识符)

Java中有没有goto语句?有没有goto关键字?
java中没有goto语句,有goto关键字

byte,short,int,long类型,分别占用几个字节?表数范围多大?
byte:1个字节 -128~127
short:2个字节 -215~215-1
int:4个字节 -231~231-1
long:8个字节 -263~263-1

整型常数默认是什么类型?
int类型

float,double分别占用几个字节?
float:4个字节
double:8个字节

如何用科学计数法表示3.14?
314E-2

浮点常量默认是什么类型?
double类型

如下写法哪些是不对的:
a. byte b = 30;
b. byte c = 500;
c. long d = 2343223;
d. float f = 3.14;
b:不对,超出了byte的范围
d:不对,缺少f,应该写为3.14f或3.14F

浮点数能用于比较吗?下面可能打印什么结果:

打印结果为: d1 == d2
float类型的数据在内存中的存储形式为科学计数法, 且有效位数为7位, 则d1为4.2343242E7, d2用科学计数法表示同样为4.2343242E7, 因此d1 == d2

字符型变量几个字节? 这种写法对不? char c = "d";
字符型变量占2个字节
写法不对,应该为char c=‘d’;

布尔型变量占用空间是一位还是一个字节?
布尔型变量占一位

这种写法好不好? if(b==true)
不好,应写为if(b)

常量的声明使用哪个关键字?
常量的声明使用的关键字是final

常量的命名规范是?
全部由大写字母组成,单词间通过下划线来界定

解释一下,驼峰原则?
当变量或函数名称需要多个英文单词组成时,首字母以小写开头,每个单词首字母大写(第一个单词除外)

使用Scanner接收键盘输入,是否一定要加import Java.util.*; ?
需要导包
也可以写为import java.util.Scanner;

类名的命名规则是? 方法名、变量名的命名规则是否一致? 常量的命名规则是?
类的命名规则:每个英文单词的首字母都大写
方法名、变量名的命名规则:第一个单词首字母小写,从第二个单词后,每个单词的首字母大写
常量的命名规则:字母全部大写

引用类型是占用几个字节?
引用数据类型占4个字节,用于存储对象的引用

算术运算符中类型提升是怎么回事? a+b返回什么类型? int a=3; long b=3;
类型提升指的是自动类型转换
a+b返回的是long类型

i++和++i的异同之处
相同:都是变量i自增1
i++与++i作为一条单独语句使用时, 没有区别
不同:i++是先使用i的值进行其他运算,然后再自增1
++i是先自增1,然后再使用i的值进行其他运算

关系运算符中,能不能这么写:"1<a<3"?
不能,
应该写为a>1&&a<3

逻辑运算符|、&、!、^的含义及其运算规则?
| 或: 只要有一个为true,则直接返回true
& 与: 只要有一个为false,则直接返回false
! 非: 如果为true,则返回false,如果为false,则返回true
^ 异或: 如果两个操作数相同,则返回false,如果两个操作数不同,则返回true

运算符||和|的异同之处
相同:
|| 与 | 都是逻辑运算符, 运算规则都为只要有一个为true,则直接返回true
不同:
|| 短路或 : 从左到右计算,如果符号左边的操作数为true,则不会继续计算,直接返回 true; 如果符号左边的操作数为false,则需要继续计算
| 逻辑或:操作数左右两边的操作数都需要计算,不会发生短路
|| 只是逻辑运算符
| 还可以是位运算符中的按位或符号

5*4最快的运算方式是?
位运算5<<2

这两个表达式分别返回什么结果? ((1<3)?"a":"b")+3+4, x=-2; x > 0 ? 1 : (x == 0 ? 0 : -1)
((1<3)?"a":"b")+3+4 返回结果为a34
x=-2; x > 0 ? 1 : (x == 0 ? 0 : -1) 返回结果为-1

什么情况下,加号会变成字符串连接符?
“+”号左右一个为String类型时,则变成字符连接符

4&5,4|5的结果分别是多少? 4&&5这个操作可行吗?为什么?
4&5的结果为4
4|5的结果为5
4&&5这个操作不可行,因为&&左右要求为boolean类型表达式

int能否自动转换成byte,short,char? 是否有一定条件才能转换?
不能
需要强制类型转换

long能自动转换成int吗?long能自动转换成float吗?
long可以自动转成int
long可以自动转成float

自动类型转换中,容量小和容量大指的是什么意思?
容量大小指的是不同数据类型的存储数据的范围

强制类型转换中,是否可能发生数据丢失?
可能发生数据丢失

布尔类型能否自动转换为int? 如果不能,简述理由。
不能
因为类型不匹配

下面两种写法,哪个较好:
a. 70L60243657020
b. 70
60243657020L
第一种写法好;
第二种表达式的前半部分70602436570的乘积有可能会超过int的取值范围, 导致精度损失

第三章 控制语句
三种控制结构是什么?
顺序结构,选择结构,循环结构

如果if语句后面不写{},if的控制范围是否只限于第一句?
正确

Math.random()是什么意思?如果想获得15-20之间的随机数,怎么办?
产生一个0-1之间的随机数,包含0但不包含1
(int)(Math.random()*6)+15;

switch语句的功能是否完全可以使用if else if else多选择结构来代替?如果是,为什么还需要switch结构?
可以
switch一般用来做多值的判断,如果判断条件为区间,则最好使用多重if来做,如果是等值情况最好使用switch来做

switch中的表达式的结果需要是什么类型?
byte,char,short,int
jdk1.5 加入了枚举
jdk1.7加入了String

switch语句中,一个case开始执行后,什么时候结束执行这个case的语句?
遇到break结束执行这个case语句

switch语句中,default是否必须写?
不是必须写

下面代码有什么错误?

case后的表达式后面应该是“:”冒号

循环结构模拟了现实世界中的什么逻辑?
循环结构模拟了现实世界中的“重复问题“的逻辑

循环结构的四种内部结构是什么?
while(布尔表达式){
循环体;
}
do{
循环体;
}while(布尔表达式);
for(初始表达式;布尔表达式;迭代因子){
循环体;
}
foreach(数组或集合中元素的类型 迭代变量:数组或集合名){
循环体;
}
while和dowhile有什么区别?
当条件不成立时,do-while至少执行一次

什么情况下,会出现死循环?并写出一个例子来
循环条件始终成立时,则会出现死循环
while(true){
System.out.println(“helloworld”);
}
for循环相比while循环有什么优势?
语法结构比while简便,
通常用于解决循环次数固定的问题

下面代码都有什么问题:

a没有初始化

下面代码有错误吗?如果有,指出错误:

i超出了作用域的范围

循环中,break的作用是?continue的作用是?
break用于强行退出循环,不执行循环中剩余的语句
continue用于跳过本次循环, 不执行continue后的语句, 继续下一次循环

语句块能否使用外部的变量?语句块中定义的变量,外部能否使用?
语句块能使用外部的变量, 但是语句块中定义的变量外部不能使用

方法的定义中,是否必须要有返回值类型?如果确实不需返回值,使用哪个关键字声明?
返回值类型不是必须的
不需要返回值使用关键字void

方法的定义中,return是否必须?它有什么作用?
不是必须
return语句终止方法的运行并指定要返回的数据

Java中,参数的传递使用值传递还是引用传递?
值传递

方法定义中,形式参数和实际参数有什么区别?用自己的话描述。
方法定义时的参数称为形式参数,需要数据类型
方法调用时的参数称为实际参数,不需要类型,只需要值

方法定义时,使用实参还是形参?
方法定义时,使用的是形参

定义形参时,必须要写变量类型吗?
必须要写变量类型

实参类型是否必须和形参类型匹配?
必须匹配

什么是方法的重载,有什么作用?
方法重载:
[1]在同一个类中
[2]方法的名称相同
[3]参数列表不同
[4]与访问修饰符和返回值类型无关
[5]与异常无关
作用:
传递不同的参数实现相同的效果

两同三不同指的是?返回值不同构成重载吗?形参名称不同构成重载吗?
两同:同一个类中,方法名称相同
三不同:参数列表的参数的类型,个数,顺序不同
返回值不同构不能方法得载
形参名称不同构不成方法重载

递归算法中,递归头和递归体分别指什么?
递归头:什么时候不调用自己方法,即递归的结束条件
递归体:什么时候需要调用自己方法,即自己调用自己

递归算法的优点是什么?缺点是什么?
递归的优点:将问题逐渐简单化
递归的缺点:会占用大量的系统堆栈,内存耗用多,在递归调用层次多时速度 比循环慢的多。

【上机】使用递归算法完成阶乘算法
public static int jiCheng(int number){
if (number==1) {
return 1;
}else{
return numberjiCheng(number-1);
}
}
【上机】根据随机生成的的月份,打出该月份的天数.(不考虑闰年、闰月)
public class Test{
public static void main(String [] args){
int day=0;
int ran=(int)(Math.random()
12)+1;
switch(ran){
case 2:
day=28;
break;
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
day=31;
break;
default:
day=30;
break;
}
System.out.println(ran+”月,共”+day+”天”);
}
}
【上机】用while和for循环分别计算100以内奇数和偶数的和,并输出。
(1)求1-100以内奇数的和;
用while循环:
int i=1;
int sum=0;
while(i<=100){
sum=sum+i;
i+=2;
}
System.out.println("1-100之间所有奇数的和是"+sum);
用for循环:
int i=1;
int sum=0;
for(i=1;i<=100;i+=2){
sum=sum+i;
}
System.out.println("1-100之间所有奇数的和是"+sum);
(2)求1-100以内偶数的和(略)

【上机】用while和for循环输出1-1000之间能被5整除的数,且每行输出3个。
用while:
int i=1;
int count=0;
while(i<=1000){
if(i%5==0) {
System.out.print(i+"t");
count++;
if(count%3==0){
System.out.println();
}
}
i++;
}
用for循环:
int i=1;
int count=0;
for(i=1;i<=1000;i++){
if(i%5==0) {
System.out.print(i+"t");
count++;
if(count%3==0){
System.out.println();
}
}
}

【上机】打印出九九乘法表
for(int i=1;i<=9;i++){
for(int j=1;j<=i;j++){
System.out.print(j+”” +i+”=”+(ij)+””);
}
System.out.println();
}

【上机】编程求:∑1+∑2+……+∑100
public static int getSum(int number){
if(number==1){
return 1;
}else{
return number+getSum(number-1);
}
}
public static void main(String [] args){
int sum=0;
for(int i=1;i<=100;i++){
sum+=getSum(i);
}
System.out.println(“和为:”+sum);
}

【上机】生成0-100随机数,直到生成88为止,停止循环!
public static void main(String[] args) {
//生成1-100随机数;
int r=(int)(Math.random()100)+1;
while(r!=88){
r=(int)(Math.random()
100)+1;
}
}

【上机】把100~150之间不能被3整除的数输出
for(int i=100;i<=150;i++){
if(i%3!=0){
System.out.println(i);
}
}

【上机】打印出实心1010正方形、空心1010正方形
for(int i=1;i<=10;i++){
for(int j=1;j<=10;i++){
System.out.print(“*”);
}
System.out.println();
}

【上机】打印出实心1010菱形, 空心1010菱形
//1-6行正三角
for(int i = 0; i < 6; i++){
//前空格
for(int j = 0; j < 5 - i; j++){
System.out.print("");
}
//

for(int j = 0; j < 2 * i + 1; j++){
System.out.print("");
}
//
后空格
for(int j = 0; j < 5 - i; j++){
System.out.print("");
}
System.out.println();
}
//7-11行倒三角
for(int i = 0; i < 5; i++){
//前空格
for(int j = 0; j < i + 1; j++){
System.out.print("");
}
//

for(int j = 0; j < 9 - 2 * i; j++){
System.out.print("");
}
//
后空格
for(int j = 0; j < i + 1; j++){
System.out.print("");
}
System.out.println();
}

【上机】将如上所有上机相关算法的作业,封装成方法,便于重用。

第四章 数组
数组的类型可以为任意类型吗?
可以是任意类型

数组中的元素的类型必须是相同的吗? 数组中的元素是有序的吗?
数组中元素的类型必须是相同的
数组中元素是有序的, 索引的顺序

数组的长度可变不? 数组的长度使用哪个属性?
数组一旦声明其长度不能更改
数组的长度属性是length

数组元素下标(或索引)的范围是?
范围是0-数组名.length-1

数组也是引用类型吗? 数组也是对象,这句话对吗?
数组是引用数据类型
数组也是对象这句话正确

数组中的元素就像对象中的成员变量一样,初始化方式也一样。这句话对吗?
正确

【上机】数组的三种初始化方式是什么? 并测试练习相关代码
静态初始化
int [] a={1,2,3};

动态初始化
int [] a=new int[2];
a[0]=1;
a[1]=2;

默认初始化
int [] a=new int[2];//0,0

数组的静态初始化代码,下面代码有没有不合理的地方:

    有,new Dog(“小强”,2)后的逗号应去掉

完成如下代码:

下面的数组定义哪些是正确的?

    CDE是正确的

请在下面语句中找出一个正确的。
A. int arr1[2][3];
B. int[][] a2 = new int[2][];
C. int[][] arr2=new int [][4];
D. int arr3[][4]= new int [3][4];
B正确

【上机】定义一个长度为10 的一维字符串数组,在每一个元素存放一个单词;然后运行时从命令行输入一个单词,程序判断数组是否包含有这个单词,包含这个 单词就打印出“Yes”,不包含就打印出“No” 。
public class Test{
public static boolean isFind(String [] arr,String word){
boolean isFlag=false;
for(int i=0;i<arr.length;i++){
if(word.equals(arr[i])){
isFlag=true;
break;
}
}
return isFlag;
}
public static void main(String [] args){
String[] arr={“hello”,”world”,”java”,”html”,”oracle”,
”apple”,”orange”,”banana”,”red”,”green”};
System.out.println(isFind(arr,args[0])?”Yes”:”No”);
}
}

冒泡排序的基本思路
1.整个数列分成两部分:前面是无序数列,后面是有序数列
2.初始状态下,整个数列都是无序的,有序数列是空
3.如果一个数列有n个元素,则至多需要n-1趟循环才能保证数列有序
4.每一趟循环可以让无序数列中最大数排到最后,(也就是说有序数列的元素个数增加1)
5.每一趟循环都从数列的第一个元素开始进行比较,依次比较相邻的两个元素,比较到无序数列的末尾即可(而不是数列的末尾)
6.如果前一个大于后一个,交换
7.根据是否发生交换判断数组是否已经有序

使用冒泡排序完成数组元素的排序
int [] array={34,23,4,55,34,53};
for(int i=0;i<array.length-1;i++){
boolean flag = true;
for(int j=0;j<array.length-1-i;j++){
if(array[j]>array[j+1]){
int temp=array[j];
array[j]=array[j+1];
array[j+1]=temp;
Flag = false;
}
}
if(flag){
break;
}
}

可变参数的作用及其用法
作用:适用于参数个数不确定、类型确定的情况,java把可变参数当做数组处理
用法:
只能出现在参数列表的最后
…位于变量类型和变量名之间,前后有无空格都可以
调用可变参数的方法时,编译器为该可变参数隐含创建一个数组,在方法体中以数组的形式访问可变参数

如何给main方法传递实参
通过命令行参数给main方法传递实参

【上机】用二重循环求出二维数组b所有元素的和:
int[][] b={{11},{21,22},{31,32,33}}
int sum=0;
for(int i=0;i<b.length;i++){
for(int j=0;j<b[i].length;j++){
sum+=b[i][j];
}
}
System.out.println(“和为:”+sum);

eclipse可以开发Java,可以开发c++吗?
可以

eclilpse中的debug模式有什么好处?
修正语法错误和逻辑错误的过程,保证程序的正确性

eclipse中运行一个Java程序,如何操作?
单击右键选择run As ,再选择java Application

eclipse需要安装吗? 使用eclispe需要安装JDK吗?
不需要

【上机】熟悉eclipse开发环境,建立一个Java项目,并运行一个类
【上机】熟悉eclipse的调试环境(debug),建立一个Java项目,并使用debug 进行调试,测试程序每步执行情况。
假如我找不到package explore视图了,怎么样才能让他出现?
菜单栏WindowShow Viewpackage explore

阶段项目课程2
【项目】福彩双色球项目
练习目标

  1. 掌握数据类型和运算符
  2. 掌握流程控制
  3. 掌握数组
  4. 掌握方法的定义和调用
  5. 提高代码调试能力
    全部讲解和练习时间控制在4小时以内
    项目需求
    双色球投注区分为红色球号码区和蓝色球号码区,
    红色球号码区由1-33共33个号码组成,蓝色球号码区由1-16共16个号码组成。
    投注时选择6个红球号码和1个蓝球号码组成一注进行单式投注,每注金额2元。
    中奖规则同福彩双色球规则;
    显示中奖结果的同时显示您一共下注人民币??元,累计中奖人民币??元

扩展:
按照自己的思路和老师的代码模板,设计一个小的作业项目。
将上一个作业作业录制成自己的教学视频
第五章 面向对象
简述面向对象和面向过程的区别和联系?
两者都是软件开发思想,先有面向过程,后有面向对象。在大型项目中,针对面向过程的不足推出了面向对象开发思想。
比喻
蒋介石和毛泽东分别是面向过程和面向对象的杰出代表,这样充分说明,在解决复制问题时,面向对象有更大的优越性。
面向过程是蛋炒饭,面向对象是盖浇饭。盖浇饭的好处就是“菜”“饭”分离,从而提高了制作盖浇饭的灵活性。饭不满意就换饭,菜不满意换菜。用软件工程的专业术语就是“可维护性”比较好,“饭” 和“菜”的耦合度比较低。
区别
编程思路不同: 面向过程以实现功能的函数开发为主,而面向对象要首先抽象出类、属性及其方法,然后通过实例化类、执行方法来完成功能。
封装性:都具有封装性,但是面向过程是封装的是功能,而面向对象封装的是数据和功能。
面向对象具有继承性和多态性,而面向过程没有继承性和多态性,所以面向对象优势是明显。

对象和类的关系是?
类是抽象的
对象是具体的,是类抽象概念的实物表达

栈的特点是?存放什么内容?
栈的特点:先进后出
在函数中定义的一些基本类型的变量和对象的引用变量都在函数的栈内存中分配。

堆得特点是?存放什么内容?
堆内存的特点:
堆内存有内存地址,都是将内存的地址赋值给引用变量
堆内存变量无用后由垃圾回收机制不定时回收
堆内存会自动初始化

堆内存存放引用数据类,及new出来的都在堆内存里面

【上机】画出如下程序的内存结构(课堂上的代码):

局部变量、成员变量、静态变量分别怎么声明?
局部变量:在方法或代码块中声明的变量称为局部变量
成员变量:在类中声明的变量称为成员变量
静态变量:使用static修饰的成员变量称为静态变量

局部变量使用之前,必须要手动初始化吗?
局部变量在使用之前,必须要手动初始化

如果不手动指定成员变量的值,系统将会自动初始化。那么初始化的规则是?
整型初始化为0
浮点型初始化为 0.0
引用数据类型初始化为null
boolean类型初始化为false
char类型的初始化为u0000

成员变量从属于谁? 静态变量又叫什么以及从属于谁? 局部变量从属于谁?
成员变量从属于对象
静态变量又叫类变量从属于类
局部变量从属于方法或代码块

构造方法的作用是两个:一个构造类的对象,另一个作用是初始化对象的属性。这 种说法对不?

构造方法的名称必须保持跟类名一致吗?
必须与类名一致

构造方法有没有返回值?详细用文字描述返回值问题。
构造方法没有返顺值,也不可以写void

构造方法如何被调用?
构造方法在创建对象时被调用,使用关键字new

构造方法中能不能有return语句?
构造方法中不能使用return语句

系统一定会给我们添加无参数的构造方法吗? 请详细解释。
如果手动编写了构造方法之后,系统就不会添加无参构造方法了

下面的代码有什么问题:

    当局部变量名称与成员变量名称相同时,使用this代表成员变量,代码应改为

computer(int price, int type, String brand){
this.price=price;
this.type=type;
this.brand=brand;
}

【上机】设计一个类代表二维空间的一个点
public class Point{
private int x;
private int y;
public void setX(int x){
this.x=x;
}
public int getX(){
return x;
}
public void setY(int y){
this.y=y;
}
public int getY(){
return y;
}
public Point(){
}
public Point(int x,int y){
this.x=x;
this.y=y;
}
}
【上机】设计一个类代表二维空间的一个圆。要求两个成员变量。一个是圆心,一 个是半径提供计算面积的方法。
public class Cricle{
private int r;
private Point point;
public void setR(int r){
this.r=r;
}
public int getR(){
return r;
}
public void setPoint(Point point){
this.point=point;
}
pubic Point getPoint(){
return point;
}
public Cricle(){

}
public Cricle(int r,Point point){
this.r=r;
this.point=point;
}
public double area(){
return Math.PI*Math.pow(r,2);
}
}
【上机】为上述Cricle类添加一个方法,计算一个点(Point对象)是否在圆(Cricle 对象)内,并写程序验证

//在Cricle类中加入方法
public class Cricle{
…..
public boolean isFlag(Point p){
if(Math.pow(x-p.getX())+Math.pow(y-getY())<=Math.pow(r,2)){
return true;
}
}
return false;
}
public class Test{
public static void main(String [] args){
Point p=new Point(3,3);//圆心
Cricle c=new Cricle(5,p);
System.out.println(c.isFlag(new Point(5,5))?”在圆内”:”不在圆内”);
}
}
构造方法能不能重载?
构造方法可以重载

this在普通方法中,指的是哪个对象?在构造方法中,指的是?
this在普通方法中总是指向调用该方法的对象
this在构造方法中总是指向正要初始化的对象

static变量在内存中放置在哪个区? static变量和方法为什么被称为类变量和类方 法?可以被该类所有对象共享吗?
static变量存在数据区
static变量和方法归类所有,使用类名去调用
可以被该类的所有对象所共享

静态初始化块和main方法哪个先被执行?
静态初始化块先执行

一个构造方法调用另一个构造方法怎么调用? this(),这样的调用方式必须位于第 一句吗?
this()调用本类的无参构造方法
this(实参列表)调用本类的带参构造方法
super()调用直接父类的无参构造方法
super(实参列表)调用直接父类的带参构造方法
this()调用必须位于构造方法的第一句

package的两个作用是什么?
解决类之间的重名问题
为了便于管理类:合适的类位于合适的包

增加package以后,我们在DOS下编译怎么做?
javac -d . Test.java

import是用于导入包还是导入类?
import是用于导入其它包中的类

import Java.util.*; 会不会降低程序运行速度?为什么?
不会降低程序的运行速度
因为是导入该包下的所有的类,会降低编译速度

import static 静态导入的作用是导入类还是导入类的静态属性和静态方法
导入类的静态属性和静态方法

如果同时导入:Java.util.Date; Java.sql.Date; 在程序中怎么区分它们?
只能用包名+类名来显示调用相关类
java.util.Date date=new java.util.Date();

【上机】 完成this、static、package、import的测试代码
package cn.sxt.pro
import java.util.Scanner;
public class Test{
public static int age;
private String name;
public void setName(String name){
this.name=name;
}
public static void show(){
}
public static void main(String [] args){
System.out.println(Test.age);
System.out.println(Test.show());
}
}

Javadoc注释怎么写?
/**开头
*/结束

Java项目的API文档如何生成?请将步骤写出。
javadoc 源文件名.java;

面向对象中的封装,追求的是“高内聚,低耦合”。解释一下,内聚什么?什么叫 耦合?
内聚:程序内的各个模块之间的关系紧密程度
耦合:外部程序(子程序)之间的关系紧密程度

封装的几个关键字:private,default,protected,public的含义。
代表的是访问权限
private:私有的,只能本类访问
default:默认的,本类,子类,本包中的其它类都可以访问
protected:受保护的,本类,本包及其它包中的子类可以访问
public:公共的,本类,子类,本包及其它中的类都可以访问

一般属性是否要设置为private?
是, 属性就不能被赋值上任何非法的值了

如果属性设置为private,如何让外部访问该属性?
编写公有的取值的get方法

提供getter、setter方法的操作,eclipse中如何实现?
菜单栏SourceGenerate getters and setters

对于boolean类型的属性,提供的getter方法是:getXXX或是isXXX?
isXXX;

Javabean就是只包含属性和相关getter、setter方法,不包含业务逻辑处理的 类,这种说法对吗?
不对
Javabean既可以封装数据同时也可以封装业务逻辑

继承的好处是什么?
好处一:继承的本质在于抽象。类是对对象的抽象,继承是对某一批类的抽象
好处二:为了提高代码的复用性

Java中有多继承吗?C++中有多继承吗? 单继承相比多继承优势在什么地方?
java中只有单继承
C++中有多继承
使用单继承有利于系统的维护,使得类与类之间的关系简单

【上机】模仿课堂上动物世界的例子,我们自己写个例子。
class Person{

}
class Teacher extends Person{

}

Java的继承使用哪个关键字实现?
extends

定义某个类时,如果没有使用extends,那么继承了哪个类?
如果没有使用extends,那么继承了Object类

Java中,有没有多继承? 请说明,Java为什么取消了多继承?
java中没有多继承
使用单继承有利于系统的维护,使得类与类之间的关系简单

重写(override)指的是什么?
指的是子类对父类中方法的重写

假如父类有main方法,子类能不能继承?
不能

Object是所有类的根类吗?是所有类的直接父类吗?
Object是所有类的根类
不是所有类的直接父类

在哪里查看Object类的源代码?
jdk安装目录中的src压缩包中可以查看源码

Object类中的toString方法能否被子类重写?请做测试。

【上机】完成继承、Object相关的测试代码

super指的是什么?
super指的是直接父类

构造方法中,第一个话总是super吗?
也可以是this()

叙述一下,有继承结构时,构造方法的调用顺序?
继承条件下构造方法的调用规则如下:
如果子类的构造方法中没有通过super显式调用父类的有参构造方法,也没有通过this显式调用自身的其他构造方法,则系统会默认先调用父类的无参构造方法。在这种情况下,写不写“super();”语句,效果是一样的。
如果子类的构造方法中通过super显式调用父类的有参构造方法,那将执行父类相应构造方法,而不执行父类无参构造方法。
如果子类的构造方法中通过this显式调用自身的其他构造方法,在相应构造方法中应用以上两条规则。
特别注意的是,如果存在多级继承关系,在创建一个子类对象时,以上规则会多次向更高一级父类应用,一直到执行顶级父类Object类的无参构造方法为止。

重写中,子类的返回值类型可不可以跟父类不完全一致?说出你的理由。
可以
子类的返回值可以与父类相同,也可以是父类方法返回值的子类

如何判断两个对象内容是否相同?重写equals()有什么要求?
判断两个对象的内容是否相同,需要重写Object类的equals方法

举一个现实的例子,说明多态。
我第一次去见丈母娘。还没见的时候,我女朋友已经把我的情况介绍给丈母娘了,说我“长得像港台明星”。见面以后丈母娘一看,哇,原来是像曾志伟。当场晕倒。

多态的三个必要条件是什么?
继承
方法重写
父类引用指向子类对象

什么是向上转型?什么是向下转型?
向上转型:父类引用指向子类对象
向下转型:将父类引用转成真实的子类对象

多态的常用使用场合有哪些?
使用父类做方法的形参,实参可以是该父类的任意子类类型
使用父类做方法的返回值类型,返回值可以改父类的任意子类对象

Java的方法绑定采用动态绑定还是静态绑定?
静态方法,构造器,private方法,用关键字super调用的方法是静态绑定
通过对象调用的方法,采用动态绑定

final修饰变量、方法、类分别表示什么含义?
final修饰的变量不可改变,一旦赋了初值,就不能被重新赋值,称为常量
final 修饰的方法不能被子类重写
final修饰的类不能有子类

final修饰的方法能不能被重载?能不能被重写?
final修饰的方法可以重载
final修饰的方法不能重写

String类能不能被继承?为什么?
String类不能被继承
因为String类是使用final修饰的类

包含抽象方法的类是抽象类吗? 抽象类一定包含抽象方法吗?
包含抽象方法的类是抽象类
抽象类中不一定含有抽象方法

抽象类中能不能有普通方法?能不能定义构造方法?
抽象类中可以有普通方法
抽象类中可以定义构造方法

抽象类能不能被new出来?即抽象类的构造方法能不能被调用?
抽象类不能被new出来
抽象类的构造方法被子类调用

接口中只能定义常量和抽象方法吗?
JDK1.7之前,接口中只能定义静态常量和公共的抽象方法
JDK1.8中,接口中可以定义静态方法

接口描述了现实世界中什么逻辑?
接口描述了现实世界是“如果你是…则必须能..”的思想
如果你是天使,则必须能飞;如果你是汽车,则必须能跑

接口中的常量一定是public static final吗?抽象方法一定是public abstract 吗?
是的

接口中能不能定义普通变量,普通方法?从设计接口的角度说明为什么这么做?
接口中不能定义普通变量,也不能定义普通方法
因为接口就是一种规范,定义一种规则

接口能不能被new?
接口不能被new

接口中有没有多继承?
接口中有多继承

一个类能不能实现多个接口?
一个类能够实现多个接口

【上机】完成抽象类、接口的语法测试代码
public interface TakePhoto {

}
abstract class Phone{

}
class MoblePhone extends Phone implements TakePhoto{

}
class Test{
public static void main(String[] args) {
MobilePhone mp=new MobilePhone();
}
}

【上机】使用接口,定义电子产品系统(智能手机、MP3、智能手表)。
public interface Electronic {

}
class MobilePhone implements Electronic{

}
class Mp3 implements Electronic{

}
class Watch implements Electronic{

}

如何对一个数组的多个对象按照不同的依据进行排序;
对象实现Comparable接口
或者定义比较规则的类实现Comparator接口

模拟实现Comparable和Comparator接口;
实现Comparable接口
public class Student implements Comparable<Student>{
private int age;
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public int compareTo(Student o) {
return this.age-o.getAge();
}
}
实现Comparator接口
class AgeComparator implements Comparator<Student>{
@Override
public int compare(Student o1, Student o2) {
return o1.getAge()-o2.getAge();
}
}

GC指的是什么?写出英文全称。垃圾回收机制中,程序员能不能调用垃圾回收器?
GC:是指垃圾回收
英文:garbage collection
程序员无权调用垃圾回收器

System.gc()指的是什么意思?
运行垃圾回收器

finalize方法可以用来做什么?
在垃圾收集器将对象从内存中清除出去前,做必要的清理工作

通过两个事例描述C++,Java不同的内存回收机制。
很久很久以前,每家每户“自扫门前雪”,自己收垃圾。
现在,环保局的垃圾车自动收垃圾。
通过,这些例子类比Java和C++不同的回收机制及特点。
C++需要程序员手动编写垃圾回收的代码,如果程序员忘了那么就容易造成内存 溢出等问题
java无需手动编写,jvm的垃圾回收机制会自动进行垃圾回收,减轻了程序员的 工作,也避免由于程序员忘记而造成的各种内存溢出等问题

第六章 异常机制
Java中,处理异常的两大步是?
捕获异常
声明异常

如果catch两个异常,一个是父类,一个是子类。这两个异常的catch顺序如何 确定?
子类异常在前父类异常在后

finally里面一般放置什么代码?
无论是否发生异常,都必须要执行的语句放到finally中, 比如数据库连接的关闭、IO流的关闭、socket连接的关闭等物理连接的关闭

Error和Exception的区别和联系
联系:Error与Exception都继承自Throwable类
区别:
Exception:
[1]可以是可被控制(checked)或不可控制的(unchecked)
[2]表示一个由程序员导致的错误
[3]应该在应用程序级被处理
Error:
[1]总是不可控制的(unchecked)
[2]经常用来用于表示系统错误或低层资源的错误
[3]如果可能的话,应该在系统级被捕捉

Throwable是一个类还是接口?
Throwwable是一个类

如果碰到NullPointerException,我们一般应该如何查错?如何做处理?
如果碰能NullPointerException异常,我们应该使用debug进行调试
使用try-catch-finally进行异常捕获处理

【上机】完成课堂测试异常的代码
【上机】eclipse中,增加try-catch块的操作是怎么做的?
Alt+Shift+Z

【上机】自定义一个自己的异常类
public class SexException extends Exception {
public SexException() {
super();
}
public SexException(String message) {
super(message);
}
}
方法重写时,子类声明异常能否超出父类的范围?
子类声明异常不能超出父类的范围
[1]父类没有声明异常,子类也不能
[2]不可抛出原有方法抛出异常类的父类或上层类
[3]抛出的异常类型的数目不可以比原有的方法抛出的还多(不是指个数)

【上机】下面的代码,有什么问题? 解释原因

    子类重写时,不可抛出原有方法抛出异常的父类或上层类       

说出你现在接触的几个异常?尽量多写。
ArithmeticException
NullPointerException
ClassCaseException
ArrayIndexOutOfBoundsException
NumberFormatException

阶段项目课程3
【项目】太阳系项目
练习目标:

  1. 类和对象
  2. final常量
  3. 构造方法及其重载
  4. this和super关键字的使用
  5. 方法重写
  6. 类的三大特征:封装、继承、多态
  7. 作出效果,找到自信
    注意:不要求学生对AWT编程的内容有详细认识,重点是关于太阳系星球的面向 对象设计和开发;全部讲解和练习时间控制在4小时以内 。
    要求:
    太阳系中八大行星围绕太阳按照不同的速度转动;月亮围绕地球转动。
    根据老师课程讲解,完成太阳系项目小游戏。

扩展:
按照自己的思路和老师的代码模板,设计一个小的作业项目。
将上一个作业作业录制成自己的教学视频

第七章 常用类
为什么需要包装类?包装类的作用是?
因为java语言是面向对象的语言,但是java中的基本数据类型却不是面向对象的,而在实际的使用中经常需要将基本数据转化成对象,便于操作。比如说在集合中存储数据时,只能存储对象
作用:
[1]作为和基本数据类型对应的类类型存在,方便涉及到对象的操作
[2]包含每种基本数据类型相关的属性以及相关的操作方法

将字符串"123"转化成基本类型数字的方式有哪些?
通过Integer类的静态方法来转换
Integer.parseInt(“123”);

自动装箱和自动拆箱指的是?举例说明。
自动装箱和自动拆箱指的是将基本数据类型和包装类进行自动的互相转换

【上机】完成老师课堂上Integer的测试,并自己写Double类的测试代码
public class TestDouble {
public static void main(String[] args) {
Double int1 = new Double(10);
Double int2 = Double.valueOf(20);
double a = int1.doubleValue();
Double int3 = Double.parseDouble("334");
Double int4 = new Double("999");
String str1 = int3.toString();
}
}

为什么String类被称为不可变字符序列?从String类的源代码分析,给出解释。
字符串是常量,它们的值在创建之后不能更改,String对象是不可变的,所以可以共享
String类的底层结构是char类型的数组value,而这个数组使用final进行修饰

【上机】String类的equals方法跟Object的equals方法什么关系? 并详细阅 读String类的equals方法源代码,分析它的内部流程。
String类的equals方法重写了Object类的equals方法,用于比较两个String对象的内容是否相同

String类的equals方法的源码分析:
如果两个String对象的内存地址(引用)相同,那么return true
如果两个String对象的内存地址(引用)不相同,那么进行类型判断,如果不是String类型,那么直接返回false,如果是String类型则进行向下类型转换,转换成String类型,然后变改char类型数组,比较两个数组对应位置上的内容是否相同,如果相同返回true,如果不同返回false

String类的trim()方法是什么作用?
返回字符串的副本,去掉字符串前后的空格

"hamburger".substring(4, 8) 返回的结果是?
urge

【上机】分析下面代码的结果,并画出内存结构图,针对每个打印的结果给出文字 解释。

    System.out.println(s==ss);结果为true
    System.out.println(s3==s4);结果为true
    System.out.println(s4==s5);结果为false
    System.out.println(s4.equals(s5));结果为true

【上机】练习String类的常用方法
字符串的长度:
System.out.println(“hello”.length());
去掉字符串前后的空格:
System.out.println(“ hello world ”.trim());
截取子字符串:
System.out.println(“helloworld”.substring(0,4));

StringBuffer和StringBuilder的联系是?区别是?
联系:
StringBuffer和StringBuilder都是可变字符序列,底层数组结构都是char类型的数组
区别:
StringBuffer:jdk1.0版,线程安全,但是效率低
StringBuilder:jdk1.5版,线程不安全,但是效率高
如下的代码会造成什么后果?运行期间会产生多少个对象? 使用StringBuilder 修改这段代码。

    会导致大量副本字符串对象存留在内存中,降低效率
    运行期间会产生10001个对象
StringBuffer sb=new StringBuffer();

for(int i=0;i<10000;i++){
sb.append(i);
}

计算机中的时间是如何表示的?
获取从1970-1-1 0:0:0到当前时间所经历的毫秒数,然后转换为日期或者时间

System.currentTimeMillis()表示什么意思?
返回以毫秒为单位的当前时间

Date d = new Date()表示的是当前时间吗?
是,精确到毫秒

【上机】我们使用SimpleDateFormat类来实现时间跟字符串的转化。常用那两 个方法?并写出代码,举例说明
//字符串转日期
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
sdf.parse("1990-3-3");
//日期转字符串
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
sdf.format(new Date());

将1990年3月3日通过Calendar来表示,并得出这天是该年的第几天?将该日 期增加35天,是哪一天?使用代码来说明。
public static void main(String[] args) throws ParseException {
Calendar c=new GregorianCalendar();
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
c.setTime(sdf.parse("1990-3-3"));
System.out.println( c.get(Calendar.DAY_OF_YEAR));
c.add(Calendar.DATE, 35);
System.out.println(c.get(Calendar.YEAR)+"年"
+(c.get(Calendar.MONTH)+1)+"月"+c.get(Calendar.DATE));
}

【上机】写代码测试Date/SimpleDateFormat/Calendar的用法。
//Date的用法
public static void main(String[] args) {
Date date1 = new Date();
System.out.println(date1.toString());
}
//SimpleDateFormat的用法
SimpleDateFormat s1 = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
String daytime = s1.format(new Date());
//Calendar的用法
GregorianCalendar calendar2 = new GregorianCalendar();
calendar2.set(Calendar.YEAR, 2009);

【上机】模仿老师的写法,完成可视化日历程序的开发。<

版权声明:本文来源简书,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://www.jianshu.com/p/49ad52bd5405
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2020-01-07 20:38:43
  • 阅读 ( 1761 )
  • 分类:职场

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢