韩顺平java从入门到精通视频教程学习笔记整理.docx
《韩顺平java从入门到精通视频教程学习笔记整理.docx》由会员分享,可在线阅读,更多相关《韩顺平java从入门到精通视频教程学习笔记整理.docx(120页珍藏版)》请在冰豆网上搜索。
![韩顺平java从入门到精通视频教程学习笔记整理.docx](https://file1.bdocx.com/fileroot1/2023-2/3/e3ec35f1-1d4a-400d-9765-488584f55e41/e3ec35f1-1d4a-400d-9765-488584f55e411.gif)
韩顺平java从入门到精通视频教程学习笔记整理
java平台
1、J2SEjava开发平台标准版
2、J2EEjava开发平台企业版
java程序需要在虚拟机上才可以运行,换言之只要有虚拟机的系统都可以运行java程序。
不同系统上要安装对应的虚拟机才可以运行java程序
开发步骤
1、编写源文件(.java)
2、编译源文件为类文件(.class)可用J2SE或J2EE编译
3、在虚拟机上运行
注释
ava文件)
2、java编译器即
3、java字节码文件(.class文件)
4、由解释执行器即将字节码文件加载到java虚拟器(jvm)
5、字节码文件(.class)就会在java虚拟机中执行
对程序进行改过使之变为一个简单的加法运算程序
;.
case常量n:
语句n;
break;
default:
语句;
break;
}
*****:
switch中的可用数据类型主要是:
允许byte,short,int,char,enum等
1、单分支控制作业:
请大家看个案例[]:
编写一个程序,可以输入人的年龄,如果该同学的年龄大于18岁,则输出“你年龄大于18,要为自己的行为负责!
”
2、双分支控制作业:
请大家看个案例[]:
编写一个程序,可以输入人的年龄,如果该同志的年龄大于18岁,则输出“你年龄大于18岁,要对自己的行为负责!
”否则,输出“你的年龄不大这次放过你了”
3、多分支控制作业:
请大家看个案例[]
编写一个程序,可以输入人的年龄,如果该同志的年龄大于18岁,则输出“你年龄大于18,要对自己的行业负责,送入监狱”。
如果该同志的年龄大于10岁并且小于等于18,则输出“你的年龄也不小了,把你送少管所”。
其它情况,则输出“小孩子,下次注意”。
4、多分支控制作业:
请大家看个案例[]
请编写一个程序,该程序可以接收一个字符,比如:
a,b,c,d,e,f,g
a表示星期一,b表示星期二...根据用户的输入显示相应的信息,要求使用switch语句完成。
5、多分支控制作业:
请大家看个案例[]
对比switch与if语句在执行分支语句的区别。
***switch分支语句不支持判断类型即boolean类型,switch只支持byte,short,int,char,enum等数据类型
-------------------------------------------------------------------------------
循环控制
听其名而知其意,就是让你的代码可以循环的执行。
循环控制有三种
1、for循环语法:
for(循环初值;循环条件;步长){
语句;.
注意:
从猫类到对象,目前有几种说法:
1、创建一个对象;2、实例化一个对象;3、对类实例化...以后大家听到这些说法,不要模糊。
(对象就是实例,实例就是对象)java最大的特点就是面向对象。
性名字
=3;
="小白";
="白色";
2、对象是具体的,实际的,代表一个具体事物
3、类对象的模板,对象是类的一个个体,实例
类--如何定义类
一个全面的类定义比较复杂,如:
package包名;
class类名extends父类implements
接口名{
成员变量;
构造方法;
成员方法;
}
要透彻的掌握类,必须要了解类的构成
class类名{---->待定...
成员变量;
}
类--类的成员变量
成员变量是类的一个组成部分,一般是基本数据类型,也可是引用类型。
比如我们前面定义猫类的intage就是成员变量。
对象--如何创建对象
创建一个对象有两种方法
1、先声明再创建
1、对象声明:
类名对象名
2、对象创建:
对象名=new类名()
2、一步到位法
类名对象名=new类名()
对象--如何访问(使用)对象的成员变量
对象名.变量名;.),我们人类还有一些行为比如:
可以说话、跑步..,通过学习,我们人类还可以做算术题。
这时就要用成员方法才能完成。
现在要求对Person类完善:
1、添加speak成员方法,输入出:
我是一个好人
2、添加jisuan成员方法,可以计算从1+..+1000的结果
3、修改jisuan成员方法,该方法可以接收一个数n,计算从1+..+n的结果
4、添加add成员方法,可以计算两个数的和
类--类的成员方法(成员函数)定义
成员方法也叫成员函数,这里希望大家不要被两个名词搞晕了。
public返回数据类型方法名(参数列表)
{
语句;+1000的方法
publicvoidjiSuan(){
intresult=0;
for(inti=1;i<=1000;i++){
result=result+i;
}
"1+..+1000结果是"+result);
}
+n
publicvoidjiSuan(intn){
intresult=0;
for(inti=1;i<=n;i++){
result+=i;
}
"1+..+n结果是"+result);
}
访问修饰符返回数据类型函数名(参数列表){
语句;也可以没有返回值void表示没有返回值
访问修饰符返回数据类型函数名(形参列表){
语句;;
publicclassDemo110{
publicstaticvoidmain(String[]args){
Cfbjiu=newCfb();
();
}
}
classCfb{
publicvoidcf(){
try{
设计类;2.然后根据类创建对象。
小练习:
1、设计计算机类,要求如下:
[]
属性:
品牌(Brand)、颜色(Color)、cpu型号(CPU)、内存容量(Memory)、硬盘大小(Harddisk)、价格(Price)、工作状态(Work)
方法:
打开(Open)、关闭(Close)、休眠(Sleep)
创建一个计算机对象,调用打开,关闭方法
;
}成员方法
}
java面向对象编程
(2)--this
一个问题?
请大家看一段代码:
*重点*:
this是属于一个对象,不属于类的。
java虚拟机会给每个对象分配this,代表当前对象。
坦白的讲,要明白this不是件容易的事
注意事项:
this不能在类定义的外部使用,只能在类定义的方法中使用
/*
this的必要性
*/
publicclassDemo112{
publicstaticvoidmain(String[]args){
Dogdog1=newDog(2,"大黄");
Personp1=newPerson(dog1,23,"郭德纲");
Personp2=newPerson(dog1,24,"刘谦");
();
}
}
变量名或者对象名.类变量名
方法名或者对象名.类方法名
*重点*static静态的方法可以访问static静态变量,不能访问非静态变量(类变量)
非静态方法可以访问非静态变量(类变量)同时也可以访问static静态变量。
变量名]直接访问
类方法小结
1、什么时候需要用类方法
案例[]:
定义学生类,统计学生共交多少钱?
类方法属于与类相关的,公共的方法
实例方法属于每个对象个体的方法
类方法可以通过[类名.类方法名]直接访问
-------------------------------------------------------------------------------
java面向对象编程的四大特征
抽象/封装/继承/多态
抽象
1、简单理解
我们在前面去定义一个类时候,实际上就是把一类事物的共有的属性和行为提取出来,形成一个物理模型(模版)。
这种研究问题的方法称为抽象。
封装--什么是封装
封装就是把抽象出来的数据和对数据的操作封装在一起,数据被保护在内部,程序的其它部分只有通过被授权的操作(成员方法),才能对数据进行操作。
封装--访问控制修饰符
电视机的开关,对音量,颜色,频道的控制是公开的,谁都可以操作,但是对机箱后盖,主机板的操作却不是公开的,一般是由专业维修人员来玩。
那么java中如何实现这种类似的控制呢?
不能随便查看人的年龄,工资等隐私[]
定义名字;
注意:
打包命令一般放在文件开始处。
包--命名规范
小写字母比如包--常用的包
一个包下,包含很多的类,java中常用的包有:
.*包自动引入.*工具包
.*包网络开发包.*包窗口工具包
包--如何引入包
语法:
import包;
比如import.*;
我们引入一个包的主要目的要使用该包下的类
定义类的改进
在提出包后,我们类的定义就更加完善了:
class类名{class类名{class类名{package包名;待定..
成员变量;→成员变量;→成员变量;→class类名{→
}成员方法;构造方法;成员变量;
}成员方法;构造方法;
}成员方法;
}
-------------------------------------------------------------------------------
继承--为什么有?
[]
..
构造方法;
成员方法;
}
-------------------------------------------------------------------------------
java面向对象编程
(2)--方法重载(overload)
方法重载(overload)
按顺序,我们应该讲解多态,但是在讲解多态前,我们必须讲解方法重载和方法覆盖(override)。
请编写一个类(Abc),编写方法可以接收两个整数,返回两个数中较大的数[]
.n的n个人围坐一圈,约定编号为k(1<=k<=n)的人从1开始报数,数到m的那个人出列,它的下一位又从1开始报数,数到m的那个人又出列,依次类推,直到所有人出列为止,由此产生一个出队编号的序列。
提示:
用一个不带头结点的循环链表来处理Josephu问题:
先构成一个有n个结点的单循环链表,然后由k结点起从1开始计数,计到m时,对应结点的人从链表中删除,然后再从被删除结点的下一个结点又从1开始计数,直到最后一个结点从链表中删除算法结束。
找到开始数数的人
for(inti=1;itemp=;
}
while!
=1){
m下
for(intj=1;jtemp=;
}
数到m的小孩,退出圈
=;
.
-------------------------------------------------------------------------------
java面向对象编程(3)--抽象类
抽象类--解决之道
当父类的一些方法不能确定时,可以用abstract关键字来修饰该方法[抽象方法],用abstract来修饰该类[抽象类]。
量名
5、一个接口不能继承其它的类,但是可以继承别的接口
");
}
publicvoidstop(){
"我是相机,停止工作了..");
}
}
");
}
publicvoidstop(){
"我是手机,停止工作了..");
}
}
一个加法器,计算它们的和
2.作一个减法器,计算它们的差
3.作一个乘法器,计算它们的积
4.作一个除法器,计算它们的商(和余数)
[]
publicclassWork01{
publicstaticvoidmain(String[]args){
inti=9;intj=4;
intk=i+j;
intl=i-j;
intm=i*j;
intn=i/j;
into=i%j;
"和:
"+k+"差:
"+l+"积:
"+m+"商:
"+n+"模:
"+o);
}
}
*******************************************************************************
第二题:
正方型[]
;;;;;.+20=?
思考如果让用户输入一个整数n计算累加和:
1+2+3+...+n能做到吗?
[]
import.*;.+n的值是"+i);
}
}
*******************************************************************************
第十二题
请编写一个Cat类,要求如下:
该猫可以做四则运算,也可以进行面积计算;
将四则运算器和面积运算器合二为一,作一个运算器,主菜单让用户选择是做四则运算还是面积运算,分为两个子菜单,让用户选择加减乘除或者形状。
;;
publicclassWork13{
publicstaticvoidmain(String[]args){
Scannersr=newScanner;;
}
}
}
}
*******************************************************************************
代码分析:
1、运行一下代码,将得到什么打印结果:
inti=3;
intj=0;
doublek=;
if(jif(i==j)
执行此语句,得到结果0
else
、以下代码能否编译通过?
假如能编译通过,运行时得到什么打印结果?
inti=4;
switch(i){
default;
"default");;
publicclassWork14_1{
publicstaticvoidmain(String[]args){
();;
publicclassWork15{
publicstaticvoidmain(String[]args){;
publicclassWork16{
publicstaticvoidmain(String[]args){
ength
三、关于数组的用法,有几种方式:
3、古板用法(当已知元素值的时候可以使用此法)
1、初始化数组
语法:
数据类型数组名[]={元素值,元素值...};
例:
inta[]={2,5,6,7,8,89,90,34,56}
上面的用法相当于:
inta[]=newint[9]
inta[0]=2;inta[1]=5;inta[2]=6;...a[8]=56;
2、数组的引用(使用)
语法:
数组名[下标]
例:
a数组的第8个元素a[7]
一个问题?
一个养鸡场有6只鸡,它们的体重分别是3kg、5kg、1kg,、2kg、50kg。
请问这六只鸡的总体重是多少?
平均体重是多少?
请你编写一个程序。
等都可以有数组,那么可不可以有对象数组呢?
对前面的养鸡场的题,进行升级,题要求如下:
一个养狗场有4只狗,分别是:
名字体重
花花
白白
黑黑78kg
红红
请编写一个程序,可以计算他们的平均体重,可以找出体重最大和最小的狗的名字,可以通过输入狗的名字,查找它的体重。
;
import.*;
publicclassDemo131{
publicstaticvoidmain(String[]args)throwsException{etName("花花");
dogs[0].setWeight;
dogs[]*/
etName(name);etWeight(weight);etWeight();etWeight();
intmaxIndex=0;etWeight()){
etWeight();
maxIndex=i;
}
}
etWeight();
intminIndex=0;
for(intj=1;j<;j++){
if(minWeight>dogs[j].getWeight()){
etWeight();
minIndex=j;
}
}
"体重大的狗是第"+(maxIndex+1)+"狗,名字叫:
"+dogs[maxIndex].getName()+"\t体重是"+maxWeight);
"体重小的狗是第"+(minIndex+1)+"狗,名字叫:
"+dogs[minIndex].getName()+"\t体重是"+minWeight);
etName())){quals()方法用于字符串比较内容是否一致。
"你要找狗名"+dogs[cIndex].getName()+"\t体重是"+dogs[cIndex].getWeight());
}
}
}
}
.,第i次从R[i-1]-R[n-1]中选取最小值,与R[i-1]交换,...,第n-1次从R[n-2]-R[n-1]中选取最小值,与R[n-2]交换,总共通过n-1次,得到一个按排序码从小到大排列的有序序列。
例如,给定n=8,数组R中的8个元素的排序码为:
(8,3,2,1,7,4,6,5),选择排序过程。
.,kn表示成一棵完全二叉树,然后从第n/2个排序码开妈筛选,使由该结点组成的子二叉树符合堆的定义,然后从第n/2-1个排序码重复刚才操作,直到第一个排序码止,这时候,该二叉树符合堆的定义,初始堆已经建立。
接着,可以按如下方法进行堆排序:
将堆中第一个结点(二叉树根结点)和最后一个结点的数据进行交换(k1与kn),再将k1--kn-1重新建堆,然后k1和kn-1交换,再将k1--kn-2重新建堆,然后k1和kn-2交换,如此重复下去,每次重新建堆的元素个数不断减1,直到重新建堆的元素个数仅剩一个为止。
这时堆排序已经完成,则排序码k1,k2,k3,...kn已排成一个有序序列。
若排序是从小到大排列,则可以建立大根堆实现堆排序,若排序是从大到小排列,则可以用建立小根堆实现堆排序。
其它排序法--希尔排序法(知道有这个排序法即可)
希尔排序(ShellSorting)又称为“缩小增量排序”。
是1959年由提出来的。
该方法的基本思想是:
先将整个待排元素序列分割成若干个子序列(由相隔某个“增量”的元素组成的)分别进行直接插入排序,待整个序列中的元素基本有序(增量足够小)时,再对全体元素进行一次直接插入排序。
因为直接插入排序在元素基本有序的情况下(接近最好情况),效率是很高的,因此希尔排序在时间效率上比前两种方法有较大提高。
其它排序法--二叉树排序法
二分插入排序(BinaryInsertSorting)的基本思想是:
在有序表中采用二分查找的方法查找待排元素的插入位置。
其处理过程:
先将第一个元素作为有序序列,进行n-1次插入,用二分查找的方法查找待排元素的插入位置,将待排元素插入。
-------------------------------------------------------------------------------
外部排序法
其它排序法--合并排序法(最为常用的排序方法)
合并排序法(MergeSorting)是外部排序最常使用的排序方法。
若数据量太大无法一次完全加载内存,可使用外部辅助内存来处理排序数据,主要应用在文件排序。
排序方法:
将欲排序的数据分别存在数个文件大小可加载内存的文件中,再针对各个文件分别使用“内部排序法”将文件中的数据排序好写回文件。
再对所有已排序好的文件两两合并,直到所有文件合并成一个文件后,则数据排序完成。
1、将已排序好的A、B合并成E,C、D合并成F,E、F的内部数据分别均已排好序
2、将已排序好的E、F合并成G,G的内部数据已排好序
3、四个文件A、B、C、D数据排序完成
;
publicclassDemo136{
publicstaticvoidmain(String[]args){
intarr[]={2,5,7,12,25};
*******************************************************************************
java基本语法--多维数组
多维数组--二维数组
多维数组我们只介绍二维数组
1、定义
语法:
类型数组名[][]=new类型[大小][大小];
比如:
inta[][]=newint[2][3];
2、分析
二维数组在内存中存在的形式
3、案例,请用二维数组输出如下图形
000000
001000
020300
000000
;
publicclassDemo140{
publicstaticvoidmain(String[]args){
quals(empNo)){quals(empNo)){
quals(empNo)){
;;
publicclassDemo141{
publicstaticvoidmain(String[]args){
LinkedListll=newLinkedList();
Emppemp1=newEmpp("sa01","aa",;
Emppemp2=newEmpp("sa02","bb",;
Emppemp3=newEmpp("sa03","cc",;
;
publicclassDemo142{
publicstaticvoidmain(String[]args){
;
publicclassDemo143{
publicstaticvoidmain(String[]args){
;
publicclassDemo143{
publicstaticvoidmain(String[]args){
terator();
oString();
;
publicclassDemo144{
publicstaticvoidmain(String[]args){
Hashtableht=newHashtable();terator();();){
Stringkey=().toString();
Empemp=(Emp)(key);
"名字:
"+()+"