java_study_note

    了解到高淇老师的教学挺详细的于是下定决心看了下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、发送数据


 

 

后面的笔记记录到了工程文件里面!!

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值