资源描述
序
本视频假定读者已经掌握了C语言!
所以有关变量,数据类型,运算符, 流程控制,函数,指针等知识本视频中就是没有讲得,因为这些知识我已经在C语言中讲过了
C语言视频我暂时还没有录制, 没有C语言基础得同学瞧本Java视频会有不小得难度!
当然如果您已经学习了其她语言,掌握了有关变量,数据类型,运算符, 流程控制,函数,指针等知识,瞧此视频应该没什么难度吧!
没有学过C语言得推荐瞧谭浩强先生得书籍!
本人得qq只希望接受您对我视频教学错误得指正,对于您学习中出现得问题,对不起,我没有时间通过qq来帮您解决!实在就是抱歉!
2009年7月17日
ﻩ ﻩﻩ ﻩﻩﻩ 郝斌
注意:本资源[郝斌]Java自学视频教程共107集
郝斌,现在瑞德学校担任教学组长,
曾在雅博等公司担任项目总监。
6年开发经验,擅长C/C++ 、Java、 数据结构、数据库.具有四年培训经验.
郝斌:自学好辛苦, 不过好在最后我还就是学出来了, 教学好几年了, 感触颇多, 如今录制了一些教学视频, 把自己得心得发布出来, 希望对那些没钱培训得朋友有所帮助
视频目录
1_Java概述_1
2_Java概述_2
3_Java概述_3
4_Java得卸载
5_Java得安装
6_环境变量得设置
7_常见dos命令 文件名与类名不同时编译运行得问题
9_复习上节课
10_类与对象
8_ 变量命名规则 数据类型 运算符 格式化输出 流程控制
11_内存分配
12_访问控制符_1
13_访问控制符_2
14_构造函数
15_UltraEdit得使用
16_复习
17_函数得重载
18_构造函数
19_this
20_static
21_复习
22_static两示例_求个数_只生成一个对象__1
23_static两示例_求个数_只生成一个对象__2
24_继承得由来 与 继承得访问控制权限_1
25_继承得由来 与 继承得访问控制权限_2
26_面向对象得继承反映得就是现实中得一般到特殊得关系
27_Java为什么没有多继承
28_复习+super_1
29_复习+super_2
30_重写父类方法_1
31_重写方法示例
32_多态得语法知识
33_复习
34_多态注意事项与 实际应用示例
36_接口_1
35_抽象类 与 final
37_接口_2
38_面向对象复习
39_编译运行含有包层得类_1
40_编译运行含有包层得类_2
41_同包与不同包类得相互访问
42_复习 与 不同包之间得相互访问_1
43_复习 与 不同包之间得相互访问_2
44_jar包得生成
45_如何使用Jar包 与 包得总回顾
46_异常概述_1
47_异常概述_2
48_复习
49_为什么需要异常
50_printStackTrace方法得介绍
51_ 可处理可不处理得异常 与 必须得进行处理得异常
52_处理异常得两种方式
53_finally
54_ 自定义异常 与 throws常见错误解析_1
55_ 自定义异常 与 throws常见错误解析_2
56_异常复习
57_异常
58_ToString()方法介绍_1
59_ToString()方法介绍_2
60_equals_1
61_equals_2
62_复习
63_String类得 equals==常量字符串得用法
64_String类得常用方法介绍 字符串与整数得相互转化
67_复习
65_String常用方法举例
66_printf与println得区别
68_StringBuffer
69_数组
70_线程_1
71_复习
72_创建线程得第二种方式
73_线程常用方法得介绍
java自学视频 源代码
74_线程得控制
75_线程同步问题得产生原因
76_复习
78_闲聊
79_复习
77_买票程序讲解
80_生产消费程序演示_1
82_awt展望
81_生产消费程序演示_2
84_布局管理器
86_复习
83_gui
85_事件处理
87_十个按钮得设计
90_计算器 可运行jar包得生成
89_复习 内部类 匿名类
92_复习
91_什么叫流 流得分类 四大基本抽象流
88_三个文本框得相加运算示例
93字节流 字符流得使用与它们得区别
94_缓冲流得使用
95_将一个长整型数写入字节数组再从字节数组读出程序讲解
96_print流 Object流
97_容器得介绍与使用
99_ 复习
98_parable 接口 Set接口
101_Iterator接口
100_equals与hashCode方法得使用(难点)
103_泛型
102_Map接口得使用
104_网络编程基础知识 UDP编程
105_TCP编程 与 TCP下得WEB服务器程序得讲解
106_JavaSE复习大纲_上
107_JavaSE复习大纲_下
Java概述
Java特点
Java虚拟机(JVM)
每台计算机上都有独特得java虚拟机;
一次编译到处运行;
Java应用领域
J2SE
J2ME
J2EE
Java基础知识
Dos命令
Java中得注释
标识符
关键字
数据类型
常量 整型常量、浮点常量、字符常量
不同类型变量得存储范围
数据类型转化
运算符 算术运算符
关系运算符
逻辑运算符
赋值运算符
位运算符
运算符得优先级
流程控制 顺序
选择
循环
函数得重载
面向对象编程(上)
面向过程得设计思想/面向对象得设计思想
类得定义:静态属性(成员变量);
动态可执行得操作(成员方法);
对象得定义
程序得执行过程(执行过程得内存管理:堆栈等)
内
存
Code segment
(代码段)存放代码
Data segment
(数据段)存放静态变量,字符串常量
Stack(栈)
存放对象
Heap(堆)
存放对象引用
(一个类得new出多个对象,成员变量放在内存得不同区域,但就是方法只有一个且放在代码段)
访问控制符
public 可以通过外部访问方式访问类内部得public成员
Protect
默认
Private 不可以通过外部访问方式访问类内部得private成员
分三个层次掌握访问控制符:
(1)、类得内部访问
在一个类得内部,所有得成员可以相互访问,访问控制符就是透明得;
访问控制符就是针对类外部访问而言得;
===============类内/类外===============
(2)、同一个包中外部访问(同包不同类/同包不同类--继承)
通过类得对象名访问类得内部成员
通过类名访问类得内部成员
===============包内/包外===============
(3)、包
函数调用得过程:压栈过程
构造函数
构造函数得定义与作用:类创建对象
构造函数得返回值问题(构造函数没有返回值)
构造函数数据成员得赋值——对象被创建时会对其中各种类型得成员变量自动初始化赋值
多个构造函数可能带来得冲突(如果不定义程序就会默认提供,定义后就不再提供)
关键字this(理解成当前对象得引用或指针)
一个类得new出多个对象,成员变量放在内存得不同区域,但就是方法只有一个且放在代码段---成员方法如何区别就是哪一个对象掉用自己?--每一个非静态方法中都隐含一个this指针
关键字static(成员属于类)
非私有静态属性或方法可以直接用类名访问,类得对象也可以直接访问;
静态方法不可以访问非静态成员;非静态方法可以访问静态成员;
Static应用:创建对象计数;单态模式★--只能创建一个对象(见例子 TestStatic_2、java);
面向对象编程(下)
继承(extends)
(1)子类内部可以访问父类非私有得成员;
(2)子类得外部(子类new出来得对象),通过子类对象名只能访问从父类继承过来得非私有成员(反过来父类对象访问子类得成员同理,子类把public等修饰符也继承过来了)
(3)通过子类得类名访问父类得成员
总之—-私有不能被继承(私有成员逻辑上已经被继承过来得,只就是不能访问,因此继承要慎重否则浪费内存空间)
不同包得继承问题
继承原则:区别汽车与车轮得关系(包含关系)
父类/基类--子类/派生类
super
java只允许单继承(C++允许多继承)接口可以一定程度上解决单继承得缺陷
Super得使用(见TestSuper_1、java/TestSuper_2、java/TestSuper_3、java)
Super得应用---情景:父类有很多很多属性,子类继承过来如果一个个进行初始化就会太麻烦,可以使用Super调用父类得构造器进行初始化
总结:
1、每个子类构造方法得第一条语句,都就是隐含地调用super(),如果父类没有这种形式得构造函数,那么在编译得时候就会报错。
2、如果显示得写出super();语句,则必须保证该语句就是第一条语句,否则会出错
3、super();如果不写,则编译器会自动添加,所以此时如果父类没有无参得构造函数就会出错
4、既可以显示写super();前提就是父类必须有无参得构造函数也可以显示写super(实参); 前提就是父类必须有带参得构造函数
5、调用父类得构造函数得语句必须借助于super,不能直接写父类得类名,这与C++不同,
6、一个构造函数中不能写多个super(参数列表)语句;
Super、f();
方法得重写-—子类要比父类得权限大(否则多态无法实现)
TestStudent、java
多态(一个父类得引用类型变量既可以指向父类对象也可以指向子类对象,它可以根据当前时刻指向得不同,自动调用不同对象得方法,这就就是多态)
多态得作用:同一段代码做不同得事情(TestPoly_1、java)
通过父类得引用只能指向子类从父类继承过来得成员;
父类得引用永远不可能直接赋给子类得引用;只有当在父类引用本身指向得就就是一个子类对象时,才可以把父类引用强制转换为子类引用
抽象类(abstract 美[ˈæbˌstrækt])得由来:比如“植物”抽象词
abstract class A
{
abstract public void f();//没有方法体得方法叫做抽象方法,抽象方法没有方法体
}
有抽象方法得类一定就是抽象类,抽象类不一定有抽象方法;
可以定义一个抽象类得引用(多态抽象类),但不可以创建一个抽象类对象
Final:
修饰 整个类:表示不能被继承
成员属性:表示属性必须被赋值,且只能被赋值一次,通过两种方式
成员方法:可以继承但不可以重写
接口interface(特殊得抽象类)抽象方法与常量属性得集合
接口与抽象类得区别:抽象类就是一个类可以被继承,接口不能被继承只能被实现用关键字implements(实现)
接口内得方法没有 {},不允许有非抽象方法
包:
Javac —d 、 TestPackage、java
Java myPackage、cy、TestPackage
Path: exe得路径
Classpath: class得路径
DOS命令:
设置类得路径:set classpath=c:\Documents and setting\、、、
同包不同类得访问:
启动类
Javac a、java b、java 两个一起编译
同包非私有成员都可以
不同包得访问:
共有得类得共有成员才可以被另外一个包得类访问
Import
公有类保证可以在另一个类中创建对象,公有方法
除了内部类 普通类只能用public 或者什么都不修饰
如何生成jar包
放在一个文件夹中
DOS下 jar cvf xxx、jar *(进入当前目录)
如何使用jar包
Import zhangsan、lidi、A;
Set classpath=c:\documents and settting\、、、、t、jar;
面向对象得特点:
封装:
访问控制符:只有private
This:一个对象只含有属性得空间
private
继承:java只允许单继承,私有成员无法被继承
重写:方法名与参数列表与返回值必须一样
多态:
放在java、lang包中得类不需要引入,其她得类都需要手动引入
Object类得方法---toString()方法
一个类默认继承Object
该方法返回“类名哈希码--该对象在内存堆中得地址”
System、out、println(类得对象名)--实际输出得就是该对象得toString()方法所返回得字符串
重写toString方法得意义:为了实际需要
String与StringBuffer:
JAVA得StringBuffer类:
StringBuffer类与String一样,也用来代表字符串,只就是由于StringBuffer得内部实现方式与String不同,所以StringBuffer在进行字符串处理时,不生成新得对象,在内存使用上要优于String类。
所以在实际使用时,如果经常需要对一个字符串进行修改,例如插入、删除等操作,使用StringBuffer要更加适合一些。
在StringBuffer类中存在很多与String类一样得方法,这些方法在功能上与String类中得功能就是完全一样得。
但就是有一个最显著得区别在于,对于StringBuffer对象得每次修改都会改变对象自身,这点就是与String类最大得区别。
另外由于StringBuffer就是线程安全得,关于线程得概念后续有专门得章节进行介绍,所以在多线程程序中也可以很方便得进行使用,但就是程序得执行效率相对来说就要稍微慢一些。
1、StringBuffer对象得初始化
StringBuffer对象得初始化不像String类得初始化一样,Java提供得有特殊得语法,而通常情况下一般使用构造方法进行初始化.
例如:
StringBuffer s = new StringBuffer();
这样初始化出得StringBuffer对象就是一个空得对象.
如果需要创建带有内容得StringBuffer对象,则可以使用:
StringBuffer s = new StringBuffer(“abc");
这样初始化出得StringBuffer对象得内容就就是字符串"abc".
需要注意得就是,StringBuffer与String属于不同得类型,也不能直接进行强制类型转换,下面得代码都就是错误得:
StringBuffer s = “abc”; //赋值类型不匹配
StringBuffer s = (StringBuffer)”abc”; //不存在继承关系,无法进行强转
StringBuffer对象与String对象之间得互转得代码如下:
String s = “abc”;
StringBuffer sb1 = new StringBuffer(“123");
StringBuffer sb2 = new StringBuffer(s); //String转换为StringBuffer
String s1 = sb1、toString(); //StringBuffer转换为String
2、StringBuffer得常用方法
StringBuffer类中得方法主要偏重于对于字符串得变化,例如追加、插入与删除等,这个也就是StringBuffer与String类得主要区别。
a、append方法
public StringBuffer append(boolean b)
该方法得作用就是追加内容到当前StringBuffer对象得末尾,类似于字符串得连接。调用该方法以后,StringBuffer对象得内容也发生改变,例如:
StringBuffer sb = new StringBuffer(“abc”);
sb、append(true);
则对象sb得值将变成”abctrue”。
使用该方法进行字符串得连接,将比String更加节约内容,例如应用于数据库SQL语句得连接,例如:
StringBuffer sb = new StringBuffer();
String user = “test”;
String pwd = “123”;
sb、append(“select * from userInfo where username=“)
、append(user)
、append(“ and pwd=")
、append(pwd);
这样对象sb得值就就是字符串“select * from userInfo where username=test and pwd=123”。
b、deleteCharAt方法
public StringBuffer deleteCharAt(int index)
该方法得作用就是删除指定位置得字符,然后将剩余得内容形成新得字符串。例如:
StringBuffer sb = new StringBuffer(“Test”);
sb、 deleteCharAt(1);
该代码得作用删除字符串对象sb中索引值为1得字符,也就就是删除第二个字符,剩余得内容组成一个新得字符串。所以对象sb得值变为”Tst”.
还存在一个功能类似得delete方法:
public StringBuffer delete(int start,int end)
该方法得作用就是删除指定区间以内得所有字符,包含start,不包含end索引值得区间.例如:
StringBuffer sb = new StringBuffer(“TestString”);
sb、 delete (1,4);
该代码得作用就是删除索引值1(包括)到索引值4(不包括)之间得所有字符,剩余得字符形成新得字符串。则对象sb得值就是"TString”。
c、insert方法
public StringBuffer insert(int offset, boolean b)
该方法得作用就是在StringBuffer对象中插入内容,然后形成新得字符串。例如:
StringBuffer sb = new StringBuffer(“TestString”);
sb、insert(4,false);
该示例代码得作用就是在对象sb得索引值4得位置插入false值,形成新得字符串,则执行以后对象sb得值就是”TestfalseString”。
d、reverse方法
public StringBuffer reverse()
该方法得作用就是将StringBuffer对象中得内容反转,然后形成新得字符串.例如:
StringBuffer sb = new StringBuffer(“abc");
sb、reverse();
经过反转以后,对象sb中得内容将变为"cba”.
e、setCharAt方法
public void setCharAt(int index, char ch)
该方法得作用就是修改对象中索引值为index位置得字符为新得字符ch。例如:
StringBuffer sb = new StringBuffer(“abc”);
sb、setCharAt(1,’D');
则对象sb得值将变成"aDc"。
f、trimToSize方法
public void trimToSize()
该方法得作用就是将StringBuffer对象得中存储空间缩小到与字符串长度一样得长度,减少空间得浪费。
总之,在实际使用时,String与StringBuffer各有优势与不足,可以根据具体得使用环境,选择对应得类型进行使用。
String中得equals方法
线程:
进程:一个程序加载数据后得一次运行
线程:TestThread_1、java 一个程序得 不同得执行路径
单线程:程序一步步执行,执行完上一步才执行下一步,
多线程(thread):创建线程后,多个线程之间交替执行
时间片轮转算法
创建线程得方法一:继承Thread
【注意】
1、Thread中得start()方法得功能就就是创建一个新得线程,并自动调用该线程得run()方法,直接调用run()方法就是不会创建一个新得线程得;
2、执行一个线程实际就就是执行该线程run方法中得代码;
3、执行完aa、start();后并不表示aa所对应得线程就一定会立即得到执行,aa、start();执行完后只就是表示aa线程具有了可以立即被cpu执行得资格,但就是由于想抢占cpu执行得线程很多,cpu并不一定会立即去执行aa所对应得线程.
4、一个Thread对象能且只能代表一个线程,一个Thread对象不能调用两次start()方法,否则会抛出java、lang、lllegalThreadStateException异常
创建线程得方法二:实现Runnable接口
Class A implements Runnable{}//使类A具有了run()
A aa=new A();
Thread t=new Thread(aa);//创建一个线程,将aa作为运行对象
T、start();
Thread得常用方法:
Public final void setName()//设置当前线程得名字
Public static Thread currentThread()//返回当前正在执行得线程对象得引用
Public final String getName()//返回当前线程得名字
线程得状态切换:
线程控制:
线程控制得基本方法:
isAlive() 判断线程就是否还活着
getPriority() 获取优先级
Thread、sleep() 线程休眠
Join() 等待另一个线程运行完自己再运行(一个线程用到另一个线程得结果)线程得串行化
Yield() 线程让步,让出CPU,当前线程进入就绪队列
Wait() 线程等待
Notify()/NotifyAll() 唤醒一个/所有线程
优先级(1—10 小-大,默认5)
线程得休眠:
线程得挂起与恢复
线程得结束
线程得同步:
卖票(本质就就是多个线程访问一个资源,线程同步就就是保证资源多个线程处理资源过程中不出现错误)
问题:线程没处理完,语句没有执行完,就切换到另外一个线程,
If(票数大于0)//必须只有一个线程访问
{
买一张票;
票数减一;
}
ABC三个售票点;
Synchronized(str){} //Synchronized同步
修饰一个方法——-霸占正在调用该方法得对象
修饰一个方法内部得某个代码块
引入Synchronized得目得就就是让售票代码与—-tickets;代码,能要么都执行要么都不执行;
生产与消费(本质就就是多个线程共享一个数据,若线程不同步就会出现问题;TestPC、java)
SynStack
资源
Push();
Pop();
Consumer(消费者)
Producer(生产者)
【注意】一个类一旦继承Thread类或者实现Runnable接口,都不能把异常抛给调用者,因为Runnable接口中没有这样得声明
容器/集合:
Collection得介绍 -—Collection中得方法介绍
List Set得区别
重写toString方法得必要性
实现Collection接口都要进行重写toString方法
Collections类得使用(注意区别Collection接口)
为实现Collection接口得类提供随机排列等方法,接口中并没有这些方法
parable接口—-解决一个类存在多个属性,List中排序时,选择哪一个作为排序标准
只有一个pareTo();方法
【注意】不用自己调用,Collections类会自动调用该方法
Set接口
集合内部就是以哈希表为存储结构得,对比List
Set TreeSet类
HashSet类
要保证集合无重复需要重写equals()方法与hashCode()方法
系统默认得Equals()只要就是不同内存 (相同内容)就返回false,我们要达到得目得就是内存不同,内容相同也返回True
SUN公司已有得类Integer等类,已经在内部重写了Equals()与hashCode()方法
[, toString(),]?
什么类需要重写Equals()与hashCode()方法-——只有hashSet类
为什么需要重写Equals()与hashCode()方法?
hashCode()方法 近似于对象内存地址得十六进制表示
哈希码
对象aa
图、HashSet内部实现
TreeSet 它得内部就是一种树得存储结构,放进去已经自动排序了,且没有重复得
所以必须要重写parable接口
Iterator 接口
数组、链表、树
hasNext() 就是否存在下一个元素
Next() 移动到下一个元素
Remove() 一般不使用
GUI(图形化用户界面)
(提示:java得优点在于跨平台,GUI并不就是java得强项,也不就是重点,在真正实际得应用中很少用java写界面)
组件(ponent):如菜单、按钮、标签等
Java、awt、ponent所有组件得父类
容器:有一种特殊得组件专门用来包含其她得组件
Java、、awt、container 所有容器得父类
Frame常用得方法
Panel
不能单独存在必须添加到其她容器中
布局管理器
每一个容器都有一个默认得布局管理器,如果要自己设置组件得位置需要setLayout(null)
Frame默认 BorderLayout 东西南北中得排列
Panel 默认 FlowLayout 流式布局 new FlowLayout(FlowLayoout、RIGHT,20,40)
GridLayout 格子排列
几种布局形式:
BorderLayout 东西南北中得排列 默认中间,每个区域只能放一个
FlowLayout 流式布局
GridLayout 格子排列
网络编程
端口号:一台计算机从网卡接受过来得数据到底应该交给本地得哪个网络程序来处理得,这就是由端口号来决定得
端口得范围:0-1024-65535
协议: TCP
UDP
基于UDP得socket编程:
Import java、net、*;
DatagramSocket(5678)
DatagramPacket
基于TCP得socket编程:
【我得编程心得】
关于学习编程语言一些心得:基础需要耐心得学习,但学习编程得重点在于多写代码,多应用,这样才会有更多得独立思考,发现问题解决问题,巩固提高,不用过多得纠结于基础知识与语法
展开阅读全文