了解到高淇老师的教学挺详细的于是下定决心看了下300集的java学习,下面是看视频的笔记,笔记的是一些我不会的,不懂得,不是很明白的或者我认为重要的东西。
这也是我的一个学习方法,通过keyword联想一些东西,有时候很多事情,一下子想不出,给你一个keyword可能就可以回想起某件事。
第1集
语言发展史
机械语言--汇编语言-- 高级语言
第2集
jdk - jre - jvm
第3集
helloworld.java -- helloworld.class 类名要和文件名相同
第5集
一个文件可以有很多类,编译后生成对应class, public 的 类要和文件名保持一致
tab 可以自动补齐命令
windows cmd改变盘符直接输入就行
第6集
变量名可以是中文 因为java采用Unicode字符集
标识符 以字母,下划线,$开头
可以用汉字
第7集
java是一种强类型语言,每一个变量都必须声明类型
基本数据类型(数值,字符,bool)
引用数据类型(类,接口,数组)
8进制 0开头 int a = 010;
16进制 0x开头 int a = 0x1f //自动转化为整形
Integer.toBinaryString(int); //转化为二进制
Integer.toOctalString(int); //转化为十进制
Integer.toHexString(int); //转化为十六进制
第8集
浮点数默认是double
double d = 3.14;
float f = 3.14f;
比较中最好不要用float 如果要相减
浮点数 10^31 int 2 ^31(表示方法不一样)
第9集
转义字符 \
java里面的字符串,是定义成String类
第10集
自动转换(从小的转化为大的)
int 可以直接转化为 byte short char (在范围内)
强制转化如果超范围会截断
二元运算会类型提升(自动转换为最高的类型)***********
第11集
二进制整数定义
int a = 0b111111111111111111111111111111_1111;//可以加分隔符
int a = 1232_324;//整形也可以用!!!!!!!!!!
第12集
局部变量必须先初始化
实例变量,成员变量,属性 可以不用
final 常量 A 只能初始化一次***************用大写区分,规范
类名开头大写每个大写
第13集
逻辑运算采用短路方式
除法和乘法直接调用 移位最快**************************
第14集
+运算只要两边有一个是字符串就会变为字符串相连
第15集
eclipse使用
第16集
eclipse使用
第17集
if-else使用
double d = Math.random(); // 随机返回一个float数
第18集
switch语句
switch(int){//int, 或者可以自动转化为int的类型(byte,char,short)
case 6:
.......
break;
default://剩下的
break;
}
case 穿透使用多种选择。
第19集
switch 可以是字符串
第20集
while循环
do{
}while(a < 0)
第21集
for循环
\t == tab
\n == enter
第22集
99乘法表
第23集
break,continue
第24集
方法
java只有值传递,没有引用传递
第25集
递归recusion
public static void test(){
test();
}
第26集
API(application Programming Interface)
package类的集合
不要使用默认包
常用 java.lang.* 可以直接用
生成API
文档注释 /** 回车
@author 作者
@version 版本
@param 参数
@return 返回值
右键 export javadoc 调用javadoc
第27集
键盘输入 scanner
import java.util.Scnner ****************************
Scnner s = new Scnner(System.in);
注意 s.next 和 s.nextInt();
第28集
oriented object 面向对象
以类为单位---面向对象
以方法为单位---面向过程
好处:可以扩展,方便维护
第29集
面向对象的底层要面向过程完成
第30集
面向对象的本质:以类的方式组织代码,以对对象的方式封装(oop)
类:对对象的抽象object instance
类是对象的模版,对象是类的实例****************
main函数是开始,从属于类,但无关*****************
第31集
java除了基本类型的使用之外都称之为引用类型
数据的初始化都为0,或者null
public class student{
//实例变量声明,可以不初始化,会默认初始化
//通过类加载器加载类,
String name; // 为null
int age;
int weight;
void study(){
//局部变量,一定要初始化
String sname;
}
}
内存分析
栈:*局部变量*,连续空间
堆:放置new出的*对象*,不连续空间
方法区(属于堆):*类*的代码信息,static变量,常量池
从main函数开始执行,
第32集
类可以引用如图2
第33集
System.gc(); 提醒java调用垃圾回收器,少用。
编译器会自动回收
第34集
构造方法:初始化实例
属于一种特殊的方法:
通过new调用
可以有返回值对象本身,但不能用return
有默认构造器
public 类名(){
}
第35集
java可以重载
名字相同,但参数不同
第36集
static静态常量
不属于对象,属于类,可以直接 类名.name 调用
静态函数不能调用非静态数据和方法*******************
如图3
第37集
this的用法
构造函数会隐式构造this作为传参,所以可以直接用this
this不能用于static,因为没有对象
可以通过this();调用其他构造方法,必须位于第一句
第38集
面相对象的三大特征:继承,封装,多态
继承(extends):
一个类不能有多个父类,只保留单继承**********
java.lang.Object 超类
第39集
java重写、、、、、、与重写没有任何关系
第40集
ctrl + t 查看继承关系
ctrl + 右键 查看类
Object可以重写
第41集
super是直接父类对象的引用。this是当前
都是隐式传递
第42集
继承 直接创建对象引用 是相同的(组合)
is - a has - a
第43集
final 常量不能改,类不能继承,方法不能重载
第44集
封装
隐藏内部复杂设计,只对外公开简单的接口
private default(默认) protected public
source--genernal自动添加函数
第45集
多态(polymorphism)
父类调用子类,指向子类,要有重写**********************
if(c instanceof cat){//c为父类
转化为子类型后调用。。。。。。。
}
第46集
继承内存分析
如图4
第47集
继承内存分析
图5
第48集
通过抽象类可以规范化子类的定义
抽象类(abstract):包含抽象方法的类
包含抽象方法的类,一定是抽象类
只有方法的声明,没有方法体
抽象类不能实例,但可以作为一个对象
抽象类的构造函数只能被子类调用
public abstract class Animal{
public abstract void run();
}
class Cat extends Animal{
//必须实现Animal的抽象类
}
第49集
接口(interface):比抽象类还要抽象的类
接口用来实现,将设计与实现分离。
public interface MyInterface{
//接口里面只有常量和抽象方法********************
String Maz_Grade = 120;
//接口中的常量一定是public static final****************************
public void test();
public int test1(int a, int b);
}
public interface YouInterface{
public Yours(){
}
}
public class MyClass implement MyInterface,YouInterface{
//实现接口
}
//这里可以多继承************************************************
//接口可以继承接口*********************
第50集
回调(callback, Hook1)
通过重写实现
public class MyFrame{
public void paint(){
System.out.println("fsdfa");
}
}
public class PaintFrame{
public static void drewFrame(MyFrame f){
System.out.println("Fjf");
f.paint();//*********************
System.out.println("Fsdf");
}
public static void main(String[] args){
draeFrame():
}
}
class GameFrame extends Myframe{
public void paint(){
//这里重写方法,但是可以实现*******************
}
}
第51集
内部类(innerclass)
可以调用外部类的函数属性,但外部类不可以调用内部类
第52集
数组
int [] a = new int[3];
int a [] = new int[3];
第53集
数组
Class []class = {
new Class("fj");
new Class("fd");
}//有参构造
第54集
字符串是一个类
不能初始化两次
public String(){//源码无参构造函数
this.value = new char[0];
}
public char charAt(int index ){
if(index<0 || index >index.length)
return ;
return char[index];
}
public String substring(int beginIndex){
//从beginIndex开始
第55集
trim去除收尾的所有字符
abc.equalsIgnoreCase("abc")//忽略大小写比较
abc.lastIndexOf("BB")//返回最后一个index
abc.startWith("a")//以什么开头
第56集
可变字符序列
StringBuilder sb = new StringBuilder();
StringBuilder(线程不安全,效率高)//没有加final
StringBuffer(线程安全,效率高)
String:不过变序列
append(往后面增加);
第57集
不可变字符序列,长度不可变
所以用可变的。
数组的扩容通过改变对象
第58集
String.delete(start, end)//return this;
通过return this,方法链
String.insert()
String.reverse();//反转
同步(synchronize)与StringBuffer方法相同,但StringBuffer加了同步
第59集
MyArrayList
第60集
多维数组
int [][] a = new [1][];
a[0] = new int[3];
第61集
矩阵打印
第62集
package array;
import java.util.Arrays;
public class array {
public static void main(String[] args) {
int[][] a = {
{1,2},
{34,23},
{3,65}
};
int [][] b= new int[3][];
b[0] = new int[3];
System.out.println(a[0][1])
b[0][1] = 1;
System.out.println(b[0][1]);
int [] c = new int[10];
for (int i = 0; i < c.length; i++) {
c[i] = i + 1;
}
Arrays.sort(c);
System.out.println(Arrays.binarySearch(c,5));
System.out.println(Arrays.toString(c));
for(int m : c)//增强for循环
System.out.print(m);
}
}
output:
2
1
4
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
12345678910
第63集
基本类型的*包装类*
char -- Character
int -- Integer
package wrapperClass;
public class wrapperClass {
public static void main(String [] args) {
Integer a = new Integer(100); //不推荐使用
Integer b = 100;
Integer c = Integer.parseInt("142");
Integer d = new Integer("323");//不推荐使用
System.out.println(Integer.MAX_VALUE);
System.out.println(Integer.toHexString(a));
System.out.println(a);
System.out.println(b);
System.out.println(c);
System.out.println(d);
int dd = d.intValue();
System.out.println(dd);
}
}
output:
2147483647
64
100
100
142
323
323
第64集
自动装箱和拆箱 auto-boxing unboxing
package Boxing;
public class Boxing {
public static void main(String[] args) {
// TODO Auto-generated method stub
Integer a = 100;//自动装箱jdk5.0之后,自动转化为包装类
Integer b = 1000;
int c = Integer.parseInt("123");//自动拆箱
System.out.println(a);
System.out.println(b);
System.out.println(c);
Integer d = 1234, dd = 1234;
System.out.println(d == dd);
System.out.println(d.equals(dd));
Integer e = 12, ee = 12;//[-128,128]之间的数,仍然当做基本数据类型来处理,运算的时候,转换为基本数据类型,加快速率
System.out.println(e == ee);
System.out.println(e.equals(ee));
}
}
outptu:
100
1000
123
false
第65集
java.util.Date
时间类
以1970.1.1 0时开始,毫秒计数, 类型是long
第66集
Date
package TestDateFormate;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class date {
public static void main(String[] args) throws ParseException {
// TODO Auto-generated method stub
DateFormat df = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
Date d = new Date();
String str = df.format(d);
System.out.println(str);
System.out.println("***********************");
String str2 = "1977,6,6";
DateFormat df2 = new SimpleDateFormat("yyyy,MM,dd");
Date d2 = df2.parse(str2);
System.out.println(d2);
}
}
第67集
Calender类
package testDate;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
public class TestCalendar {
public static void main(String []args) {
Calendar c = new GregorianCalendar();
c.set(2019,Calendar.APRIL, 22, 12,23,24);
Date d = c.getTime();
System.out.println(d);
c.add(Calendar.YEAR, 5);
d = c.getTime();
System.out.println(d);
}
}
第67集
可视化日历
第68集
第69集
可视化日历
第70集
file类的使用
File f1 = new File("");
f1.createNewFile();
File f2 = new File("");
mkdir 和 mkdirs ();
第71集
打印树状文件
递归
第72集
Excetption 例外 异常抛出
第73集
checked exception
第74集
try{
}catch(Exception){
}finally{
}
*********************************************
第131章
Collection 集合或者容器
下有set List
ArrayList 实现List
第132章
泛型
********************************************************************************************************
java.net
IntelAddress类
getLocalHost 本机
getByName ip -> ip
getHostName 获取名字
getHostIp 获取Ip
端口表示一个 16位的二进制, 0-65535
8080 服务器
1521 oracle
3306 mysql
netstat -ano 查看端口
netstat -ano|findstr "" 查看指定端口
tasklist|findstr "" 查看指定的进程
InetSoketAddress类******************
处理端口
URI: Universal Resource Identifier 统一资源标志符
URL: Universal Resouce Locator 统一资源定位符
URN: Universal Resource Name 统一资源名称
URL类*************************
URL rul = new URL("www.baidu.com");
协议: getProtocol();
域名: getHost();
端口: getport();
请求资源: getFile();
网络爬虫的原理
URL url = new URL("www.baidu.com");
InputStream is = url.openStream();
BufferReader br = new BufferReader(new InputStreamReader(is,UTF-8");
String msg = null;
while(null != (msg = br.readLine()){
syso(msg);
}
br,close();
TCP 面向连接 安全
UDP 非连接
基本步骤:
DatagramSocket 类 指定端口 创建接收端
DatagramSocket server = new DatagramSocket (8888);
准备容器 封装成Dategrampacket 包裹
byte[] container = new Byte[1024*60];
Datagrampacket packet = new Datagrampacket(containter,0,container.length);
阻塞式包裹receive
server.receive(packet);
byte[] datas = packet.getDate();
int len = packet.getLength();
syso(new String(datas,0,len);
server.close();
发送 client
DatagramSocket 类 指定端口 创建发送端
DatagramSocket client = new DatagramSocket (8888);
准备容器 封装成Dategrampacket 包裹
String data = "ddd";
byte[] datas = data.getByte();
Datagrampacket packet = new Datagrampacket(data,0,datas.length, new InetSocketAdress("localHost",9999);
阻塞式包裹send
client.sent(packet);
client.close();
client
TCP 协议
1、使用指定的端口 用 ServerSocket创建服务器
ServerSocket s = new ServerSocket();
2、阻塞式等待连接
Socket c = s.accept();
syso("一个客户端建立一个连接“”);
3、操作: 输入输出流操作
c.getInputStream();
4、释放资源
client
1、建立连接: 使用Socket
2、发送数据
后面的笔记记录到了工程文件里面!!