毕向东Java视频学习笔记

2016年6月6日开始学JAVA

 

 Java_Day01

JVM:虚拟机

JRE:JAVA运行环境  (JVM+类库)

JDK:JAVA开发工具包(JRE+JAVA的开发工具)

cd..返回上一层

cd\ 返回根目录

md  新建文件夹

del 删除文件夹

rd  删除文件夹

cls 清屏

set 显示windows所有环境变量

环境变量的使用:

JAVA_HOME=F:\JAVA JDK

Path=%JAVA_HOME%\bin  //javac.exe的目录 javac执行一次变成class文件,变成JVM可以识别的文件.class

临时设置path(比如直接在U盘上运行,把JDK装在U盘上,在别人的电脑上运用)

(打开DOS不关闭,就可以设置临时环境变量)

set classpath

set path 查看环境变量

set path=hahaha 修改path为hahaha dos不关闭 一直使用环境变量

set path=   为空 删除path

set path=hahaha;%path% %path%是电脑之前自带的path环境变量

电脑会从左至右找path变量 找到了后面的就不会找了

如果.class文件不在.java文件同目录下

则改变classpath的class环境变量

set classpath=hahaha 在hahaha文件夹找

set classpath=hahaha; 在hahahah找完,再去原始目录找一次

set classpath=.代表当前路径

set classpath=.;hahaha
找了当前路径后再找hahaha路径 系统路径就不找了

一般情况下 不加分号比较好,加了分号如果找出其他相同名字的class 就运行的不是你想要(指定的)class文件 无法找出错误

JAVA_Day02

关键字:

红色字是java创建好的类

蓝色都是关键字 都是小写

类名的首字母大写是规范

标识符:

由26个字母组成、_、$、0-9数字组成

数字不可以开头

不可用关键字作为标识符

注释:

// 单行注释

/*   */ 多行注释

/**  */ 文档注释

// -  /* */ 嵌套注释

/*222/*1*/22*/ 多行注释不能嵌套多行注释

// 运行到这就注释结束 还剩下 一个*/

注释部分没有占字节,没有占字节码,不会编译到class文件中去

注释的应用:

代码是思想的一种体现

常量和变量:

八进制--0开头

16进制--0x开头

byte字节==占用1个字节

一个字节==8个二进制bit位

八进制:2进制位中的
3个2进制位 为一个8进制位

负数:

是这个负数相反数的二进制取反+1

结论:负数二进制最高位都是1

long l=12345678;    //数字本身是int型

long l=1234567890l; //数字本身是int型 加上l表示是long型

float m=2.3;  2.3本身默认为双精度

float m=2.3f;把双精度的2.3转换为单精度float

true false 是小写

视频13

面试题:

byte b=4;

byte b1=3;

byte b2=6;

b=b1+b2;

问:b是多少?

解释:整数都是int类型
4是int类型

b=4 系统默认做了强转 把int转换为byte

正解:b1 b2都是变量 不确定的,系统不知道b1是byte还是int,系统没有办法强转为byte
 无法判断进行赋值

b1如果是127 b2是111 b就装不下这两个值的和 因为byte只有1个字节
b1+b2超过1个字节的最大值(127) 会丢失精度报错

运算符:

(-5%2)=-1
只对前面的数取余带符号

(5%-2)= 1

+是连接符

Java_Day03

面试题

&&和&的区别:

相同点:运算结果相同,运算过程有点小区别;都是布尔表达式的连接符,&可以用于位运算,&&不可以参与位运算

& :无论左边运算结果是多少,右边都参与运算。

&&:左边为false时,右边不参与计算。

03按位运算

一个数异或同一个数两次,结果还是这个数

6^3^3=6

它的应用相当于加密

6的取反~6是-7   6取反+1=7

04移位运算

<<左移位

3<<2=12  3*2(的2次方)=12

3<<3=24  3*2(的3次方)=24

左移几位 就是这个数乘2的几次方(幂)

>>右移位

右移几位 就是这个数除以2的几次方(幂)

>> 对于高位出现的空位 原来高位是什么就用什么补这个空位

比如原来高位是1表示负数 右移后 高位仍然是1

>>>无符号右移

数据右移时,高位出现的空位,无论原高位是什么,空位都用0补

一般都是用无符号右移 如果是负数 最高位是1  一直右移 无法消去 会出错

2*8的运算改成2<<3是提高效率的一种方法

面试的时候这样写

a b的值互换

a=3 b=5;

a=a^b;//a=3^5;

b=a^b;//b=(3^5)^5;

a=a^b;//a=(3^5)^3;

{

局部代码块;

}

这个括号很重要

局部代码块可以定义局部变量的生命周期

{

Int a=4;

Printf(“a”);

}//a占用的内存就释放了 节省内存 优化空间

If和switch的应用

If:

1.对具体的值进行判断

2.对区间判断

3.对运算结果为布尔型boolean的表达式进行判断

Switch:

1.对具体的值判断

2.值的个数是固定的

3.对于几个固定的值的判断,建议使用switch语句,因为switch语句会将具体的答案都加载进内存,效率相对高一点。

Java_Day04

\t 制表符

\r 按下回车键

\n 换号

\b 退格

Windows系统中回车符其实是由两个符号组成\r\n

在dos中
\r\n和\n都能识别 但是在一些软件中只能识别\r\n

Linux中回车符是\n

02函数格式

修饰符 返回值类型 函数名 (参数类型 形参1,参数类型 形参2.....)

{

执行语句;

Return 返回值;

}

函数名一定要提高阅读性

当出现函数名为两个以上的单词时:(规范)

第一个单词首字母小写 剩下的单词都是首字母大写

特殊情况:

功能没有具体的返回值;

这是return后面直接用分号结束

关键字返回值用void

如果是void类型 可以不用写return;
系统会自动加上return;

函数的特点:

**便于对该功能进行复用

**定义函数可以将功能代码进行封装

*函数只有被调用才会被执行

函数重载(overload)

概念:

在同一个类中,允许存在一个以上的同名函数,只要他们的参数个数或者参数类型不同即可。

函数取名根据功能而定。

函数的重载:

1.同一个类

2.同名

3.参数个数不同 or 参数类型不同

4.函数重载和返回值类型无关

5.Java是一个严谨性语言(强类型语言),如果函数出现的调用的不确定性,会编译失败报错。

6.形参顺序不同也是不同的重载函数

数组

数组里面默认值为0

内存的划分:

1.寄存器

2.本地方法区

3.方法区

4.栈内存

5.堆内存

栈内存:

存储的都是局部变量

而且变量所属的作用域一旦结束,该变量就自动释放。

局部代码块,限定局部变量的生命周期。

堆内存:

存储的是数组和对象(其实数组就是对象),凡是new建立在堆中。

特点:

1.每一个实体都有首地址。

2.堆内存中每一个变量都有初始化值,根据类型的不同而不同,

整数是0,

小数是0.0或者0.0f,

Char是 ‘ ‘ 空字符

boolean型是false

字符串是null

3.一旦不使用,垃圾回收机制,自动回收内存。

Java_Day05

数组的几种定义方式

Int[] arr = new int[3];

Int[] arr = new int[]{1,2,3,4,5};

Int[] arr = {1,2,3,4,5};

排序

Import java.util.*;

Arrays.sort(arr);

折半查找(要求已经排好序而且是小数组)

Import java.util.*;

Arrays.binarySearch(arr,50);//Java自带的折半排序

如果50存在,返回具体的角标

如果50不存在 返回     -应该插入点下表-1

加一个负号表示50不存在在这个数组中

再-1表示 如果要插入到0角标 会冲突 到底这个数是存在(0)还是不存在(-0)

所以减一区分

Integer.toBinaryString();//十进制→2进制

Integer.toHexString();//十进制  →16进制

integer.toOctal();//十进制      → 8进制

Java_Day06

面向对象(Java核心思想)

特点:(解释什么是面向对象思想)

1.面向对象是一种常见的思想,符合人们的思考习惯。

2.面向对象的出现,让复杂的问题简单化。

3.面向对象的出现,让曾经在过程中的执行者,变成了对象中的指挥者。

在java中,没有对象造对象,有对象了维护各个对象之间的关系。

(封装 继承 多台 面向对象的3个大特性)

用java语言对现实生活中的事物进行描述,通过类的形式体现。

怎么描述呢?

对事物主要关注两方面。

一个是属性,一个是行为。

类与对象的关系?

类:事物的描述。

对象:该类事物的实例。

描述小汽车

分析

1.属性。

a) 轮胎数

b) 颜色

2.行为。

a) 运行

定义类其实就是在定义类中的成员

成员:成员变量<-->属性  成员函数<-->行为

成员变量(对象)和局部变量(方法)的区别

1.

成员变量定义在类中,整个类都可以访问

局部变量定义在函数语句的局部代码块中,只在所属的区 域有有效

2.

成员变量存在于堆内存的对象中

局部变量存在于栈内存中的方法中(main)(方法有点像C中的函数)

3.

成员变量随着对象的创建而存在,随着人对象的消失而消失

局部变量随着所属区域的执行而存在,随着所属区域的结束而释放

4

成员变量都有默认的初始化值(null 0 false 0.0 ‘’)

局部变量没有默认的初始化值

默认初始化 & 显示初始化

类类型的变量一定要指向对象,要不就是NULL

匿名对象:没有名字的对象

Car c = new Car();//有名的对象

New Car();//匿名对象

1.当对象对方法仅进行一次调用的时候,就可以简化成匿名对象。

new Car().num = 5;

new Car().color = “black”;

2.匿名对象可以作为实际参数进行传递。

Show(new Car());

封装

Private 权限修饰符 只用于修饰成员

私有的内容只对本类中有效

私有仅仅是封装的一种体现而已

Java_Day07

构造函数:在构建创造对象时调用的函数。(只针对对象构造,无对象,不构造)

作用:可以给对象进行初始化。

特点:

1.函数名与类名相同。(首字母大写)

2.不用定义返回值类型。

3.没有具体的返回值。

一个类中,如果没有定义过构造函数,那么该类中会有一个默认的空参数构造函数。

如果在类中定义了指定的构造函数,那么类中的默认的构造函数就没有了。

一般函数和构造函数有什么区别呢?

构造函数:对象创建时,就会调用与之对应的构造函数,对对象进行初始化。

一般函数:对象创建后,需要函数功能时才调用。

构造函数:对象创建后,会调用只调用一次。

一般函数:对象创建后,可以被调用多次。

什么时候定义构造函数呢?

在描述事物时,该事物已存在就具备的一些内容,这些内容都定义在构造函数中。

一个类中可以有多个构造函数。(多个构造函数以重载的形式出现)

Person p = new Person(“xiao”);

调用Person

首先会系统默认初始化

然后,构造函数的初始化再来一次

最后,自定义的构造函数再走一次

细节1:

Person(String n)

Public void Person(String n) //加上一个void就变成了方法

可以同时拥有

第一个是构造函数初始化,只能使用一次

第二个是方法 可以多次使用

细节2:

在方法中不可以调用构造函数,因为构造函数只针对对象,无对象,不构造

细节3:

构造函数前面加上void 变成一般函数 不再是构造函数

细节4:

构造函数中自动有return;语句

This关键字的两个使用场景

1.当成员变量和局部变量,可以用关键字this来区分。

This:代表对象。代表哪个对象呢?当前对象。

This就是所在函数所属对象的引用。

简单说:哪个对象调用了this所在的函数,this就代表哪个对象。

2.This也可以用于在构造函数中调用其他构造函数,必须在其他构造函数第一行,因为初始化动作要先执行。

即:This(name);必须在this.age=age;的上面

Static (静态)关键字 也是一个修饰符

1.static是一个修饰符,用于修饰成员。

2.static修饰的成员被所有的对象所共享。

3.static优先于对象存在,因为static的成员随着类的加载就已经存在了。

4.static修饰的成员多了一种调用方式,就可以直接被类名所调用 。 类名.静态成员 。

5.static修饰的数据是共享数据,对象中的存储的是特有数据。

成员变量和静态变量(类变量)的区别?

1.两个变量的生命周期不同

成员变量随着对象的创建而存在,随着对象的被回收而释放。

静态变量随着类的加载而存在,随着类的消失而消失。

2.调用方式不同

成员变量只能被对象调用。

静态变量可以被对象调用,还可以被类调用。

3.别名不同

成员变量也称为实例变量。

静态变量称为类变量。

4.数据存储位置不同。

成员变量数据存储在堆内存的对象中,所以也叫对象的特有数据.

静态变量数据存储在方法区(共享数据区)的静态区,所以也叫对象的共享数据.

静态使用的注意事项:

1,静态方法只能访问静态成员。(非静态既可以访问静态,又可以访问非静态)

2,静态方法中不可以使用this或者super关键字。

3,主函数是静态的。

时间: 2024-12-11 07:02:32

毕向东Java视频学习笔记的相关文章

毕向东Java视频学习笔记【Day11-Day13 多线程】

Java_Day12 多线程01 进程:正在进行中的程序(直译). 线程:就是进程中一个负责程序执行的控制单元(执行路径) 一个进程中可以多执行路径,称之为多线程. 一个进程中至少要有一个线程. 开启多个线程是为了同时运行多部分代码. 每一个线程都有自己运行的内容.这个内容可以称为线程要执行的任务. 多线程好处:解决了多部分同时运行的问题. 多线程的弊端:线程太多回到效率的降低. 其实应用程序的执行都是cpu在做着快速的切换完成的.这个切换是随机的. JVM启动时就启动了多个线程,至少有两个线程

毕向东Java视频学习笔记【Day09 继承+接口+抽象类】

Java_Day09 继承+接口+抽象类 构造函数 子父类中的构造函数特点. 在子类构造对象时,发现访问子类构造函数时,父类也运行了. 为什么呢? 因为:在子类的构造函数中第一行有一个默认的隐式语句 super() 子类的实例化过程:子类中所有的构造函数默认都会访问父类中的空参构造函数. 在每个子类构造函数中,都有一个隐式的super()调用父类空参构造函数. 如果想输出22行内容,必须在29行改为super(5),这样可以访问到父类带参数的构造函数. 为什么子类实例化的时候会访问到父类的构造函

毕向东Java视频学习笔记【Day15 字符串+StringBuffer+StringBuilder类基础】

.01 string类特点 String类的特点: 字符串对象一旦被初始化就不可以被改变. 面试题 String s = "abc"; String s1 = NEW String ("abc"); System.out.println(s==s1); 输出false表示这两个字符串地址是不是相等的,为什么? 答:第一个是在字符串常量池中创建了abc字符串并且赋给了引用型变量s 第二个是在堆内存中用new的方式创建了string对象 并且在new的时候接受了一个字符

致敬毕向东java视频

大一: 转专业之前在网易云公开课看过麻省理工的线代收益颇多, 大二上学期: 在网易云上看了阿发的c,反复看了五六遍,感觉不难又总感觉少点什么,后来看了好斌(优秀的专科老师)豁然开朗,看了两遍.好斌的数据结构也是不错,因为没有这样的培训机构 后面在群里的好朋友耿彬彬(专科老师,人生第一个师傅)那里得到了王宝明(传智播客c)视频,如获至宝.看了两边,指针后面的草草结尾,可惜这个时候半年已过. 大二下学期: 开学前一周开始配java环境,深刻知道什么时间该做什么事,天下视频一大抄,但是好坏不一样,从c

JAVA基础学习笔记(2)

看了几天的视频了,都没时间来写下学习笔记,今天来写下第二次的学习笔记,前几天看的给忘记了,就写最新看到的吧 主要内容:1.类的变量与函数(方法) 2.对象的存储方式 3.新建一个对象及对象的赋值与调用 4.空对象 5.匿名对象 1.类的变量与函数(方法) class Dog      //类名 { String name;  //变量的声明 int age; String color; void bark()   //方法的定义(返回值为空,不带参数) { System.out.println(

韩顺平视频学习笔记-简易qq

1 package myclient; 2 3 import java.net.*; 4 import java.util.Date; 5 import java.text.SimpleDateFormat; 6 import java.awt.event.ActionEvent; 7 import java.awt.event.ActionListener; 8 import java.io.*; 9 import java.awt.*; 10 11 import javax.swing.*;

Android(java)学习笔记205:网易新闻客户端应用编写逻辑过程

1.我们的项目需求是编写一个新闻RSS浏览器,RSS(Really Simple Syndication)是一种描述和同步网站内容的格式,是使用最广泛的XML应用.RSS目前广泛用于网上新闻频道,blog和wiki,主要的版本有0.91, 1.0, 2.0.使用RSS订阅能更快地获取信息,网站提供RSS输出,有利于让用户获取网站内容的最新更新.网络用户可以在客户端借助于支持RSS的聚合工具软件,在不打开网站内容页面的情况下阅读支持RSS输出的网站内容. 例如如下的网易RSS订阅: 2.由于我们这

java nio学习笔记(一)

位置保留,待用 java nio学习笔记(一),布布扣,bubuko.com

java排序学习笔记

前面写了js的排序实现,总得玩玩java的哈. 同样,冒泡.选择.快速(这三个之前实现过也写过文章).堆排序,然后做比较. 主要遇到的难点: - -||想轻松点写个封装计时的逻辑,不想每调用一个排序就要写一个计时代码.想想,还是javascript写起来方便: java的话,我想到的方法是写一个抽象类:抽象出排序方法,实现一个排序计时方法(该方法调用了抽象排序,但在先后排序时加入计时代码[感觉像是aop操作]): 接着所有排序类都继承这个抽象类,并实现排序方法,调用的时候直接调用继承的排序计时方