毕向东Java视频学习笔记

Posted ACMer_Shadow

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了毕向东Java视频学习笔记相关的知识,希望对你有一定的参考价值。


201666日开始学JAVA

本文所有学习笔记均来自毕向东JAVA学习视频

博主会不断更新完善

 

 Java_Day01

JVM:虚拟机

JREJAVA运行环境  (JVM+类库)

JDKJAVA开发工具包(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 修改pathhahaha dos不关闭 一直使用环境变量

set path=   为空 删除path

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

 

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

 

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

则改变classpathclass环境变量

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进制位中的32进制位 为一个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类型4int类型

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

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

b1如果是127 b2111 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占用的内存就释放了 节省内存 优化空间

 

Ifswitch的应用

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

 

为什么要构造无参构造函数

每个类至少要有一个构造函数,如果你自己构建了一个带有参数的构造函数而没有再显示的写出无参的构造函数也是可以的,不过当你尝试通过一个无参的构造函数来构建(new)时,此时编译器才会报错,因为找不到这个无参的构造函数。也就是说当一个类你没有给他构造函数,则编译器会自动补上一个无参的,若有的话就不会,你需要显示将此无参的构造函数写出来。

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

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

特点:

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,主函数是静态的。 





 

主函数特殊之处:

1.格式是固定的。

2.被JVM识别和调用。

 

public:因为权限必须是最大的。

static:不需要对象的,直接用主函数所属类名调用即可。

void:主函数没有具体的返回值。

main:函数名,不是关键字,只是一个jvm识别的固定的名字。

String[] args:这是主函数的参数列表,是一个数组类型的参数,而且元素都是字符串类型。

 

静态什么时候用?

1.静态变量

a) 当分析对象中所具备的成员变量都相同时,这时这个成员可以被静态修饰。

b) 只要这个数据在对象中是不同的,就是对象的特有数据,必须存储在对象中,是非静态的。

c) 如果是相同的数据,对象不需要修改,只需要使用即可,不需要存储在对象中,定义成静态的。

2.静态函数

a) 函数是否用静态修饰,就参考一点,就是该函数功能是否有访问到对象中的特有数据。

简单点说,从源代码看,该功能是否需要访问非静态的成员变量,如果需要,该功能 就是非静态的。

如果不需要,就可以将该功能定义成静态的。

 

当然,也可以定义成非静态,但是非静态需要被对象调用,而仅创建对象调用非静态 的没有访问特有数据的方法,该对象的创建是没有意义。


class Demo
{
	int age ;
	static int num = 9;
	Demo(int age)
	{
		this.age = age;
	}

	public static  void speak()
	{
		System.out.println(num);
	}
	public void show()
	{
		System.out.println("haha");//这时调用Demo.show()是无意义的 最好将								//show方法改成静态的
	}
}

静态代码块:(没有静态的构造函数,只有静态代码块)

随着类的加载而加载,而且只执行一次

作用:

用于给类进行初始化

(般静态代码块出现在全是静态方法的类中)

class StaticCodeDemo 
{
	static
	{
		System.out.println("a");
	}
	public static void main(String[] args) {
		System.out.println("aaa");
	}
}
//这个时候会先输出a 在输出aaa 因为静态代码块随着类的创建而执行


构造代码块:

可以给所有对象进行初始化。

而 构造函数:

是给对应的对象进行针对性的初始化。

 

 

 

2016618

JAVA有静态构造函数吗?

JAVA中构造函数一般是用来创建对象的,主要是通过new这个关键词来创建对象,如果用static的构造函数,那还需要new吗?



以上是关于毕向东Java视频学习笔记的主要内容,如果未能解决你的问题,请参考以下文章

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

Java基础知识_毕向东_Java基础视频教程笔记(13)

Java基础知识_毕向东_Java基础视频教程笔记(5-10)

Java基础知识_毕向东_Java基础视频教程笔记(22-25 GUI 网络编程 正则)

致敬毕向东java视频

毕向东_Java基础视频教程第21天_IO流