类是什么

  1. 类和对象的使用三部曲是
    创建
    实例化
    使用
  2. 通常每个类对应一个源程序,源程序文件名等于类名* (public修饰的类和程序同名)*
  3. java语言用class关键字来创建类
  4. 类就是一种自定义的数据类型,可以用来声明变量 (Dog是自定义数据类型 小白是dog类型的变量)
  5. java语言用new关键字来创建对象
  6. 对象可以被赋值给相应类型的变量,变量即代表该对象

主类

String[] args是字符串数组参数,cmd里运行字节码Dog.class时输入java Dog aaa,就可以把aaa作为参数传进去,args.length就会变成1
现在我们用DogShow来接收参数,第一个是狗名字,第二个是叫几声

每个包都是独立命名空间,一班二班两个包就是两个命名空间,里面可以有相同的类,男生女生
也就是说不同包里类能重复

包有隔离功能
同包的类,互相可见,可以用简单类名直接访问
不同包的类,只有public修饰的,才是可见的
访问不同包的类,必须用全限定类名

导包分两步,先用public修饰再import,import了另一个包同名类自己包里的就要用全限定名了

导包能把那个包里的子包一起导进来吗??
不能默认包不推荐使用的原因是默认包没有全限定名,不能挎包

变量


为什么局部变量要有作用域呢?
限制有效区,名字是稀缺资源
变量是内存空间,一进方法这部分运行空间是一直保留,在方法结束才释放,内存利用率才会提高,所以局部变量的作用域不超过方法
循环变量也是局部变量(能用for就不用while,因为while会需要声明变量)

属性也是变量作用域是哪?
他的作用域是声明语句到大括号,可以覆盖该类的所有方法

既然属性会覆盖局部变量的作用域,怎么避免冲突呢?
就近原则,sum会取局部变量强龙不压地头蛇,要想访问属性sum要加上this.


总结一下:
1.属性,参数和局部变量,是java变量声明的三种形式
2.属性的作用范围始于声明语句,止于类的右大括号
3.不论声明在方法之前或之后,属性作用范围涵盖所有方法
4.属性与局部变量名称冲突时,局部变量优先
5.参数的作用范围涵盖方法的整个代码块
6.参数的第一次赋值发生在方法调用之时
7.只有属性有默认值,参数和局部变量都没有
8.数值类型默认0,布尔类型认false,类默认null

构造方法

用途:
1.创建实例
2.实例的初始化
全是默认值不合适,确保实例状态符合逻辑,比如一个人300岁不符合逻辑,要用到有参构造了

无参构造


我们知道Dog后面跟了()所以是个方法,也就是构造方法
new 和构造方法就是实例化代码,创建新对象
我们知道方法必须先声明后调用
编译器帮我们在字节码里夹带私货就是构造方法
java有个反编译javap.exe这个和javaxc.exe作用相反

构造方法与普通方法有啥差别
他没有返回类型,他会返回新创建的实例对象
方法名称和类名要一模一样

有参构造

初始化实例,添加限制条件
为了减少代码的重复量我们有两种方式解决
1.把重复代码提取成方法
比如验证年龄的我们可以弄成一个方法用this来指代该实例来调用LimitAge方法

在这里插入图片描述


这样一来要修改限制就只需要改一个地方了


2.第二种方法是构造方法互相调用,专门解决构造方法代码重复问题

挑一个最最通用的构造方法

把全部参数有效性代码都放到这个最最通用的构造方法

这个this呢看起来像方法名其实是关键字,this后面跟着()代表本类的构造方法,是种特殊的写法
这个时候性别用的固定的字面值true代表是公的
** 构造方法的调用语句必须在第一句**
这是关于面向对象编程的

总结:
1.构造方法可以用来初始化新创建的实例
2.构造方法可以用来为新创建的实例做准备工作
3.this关键字指代本实例,用来区分属性,参数和局部变量
4.重复代码容易导致bug,增加维护工作量,要尽量避免
5.可将重复代码提取为一个万法,以解决代码重复问题
6.构造万法可以互相调用,格式是this关键字加小括号
7.一个通用构造方法,可以避免构造方法中的代码重复
8.对构造方法的调用,必须是第一条语句

访问控制

访问是什么为什么要控制
还用dog类,有姓名年龄和性别,可以对该类的业务逻辑进行限制,比如年龄不超过200
我们发现调用构造语句可以很好的限制Dog的年龄,一旦AccessDemo里的语句染指了Dog
类的实例aHuang,(这个行为就叫访问,AccessDemo访问了Dog类)
他可以1.读属性2.写属性3.调用方法4.创建实例也就是读写属性调用方法
Demo代码里如何访问Dog类
它第一条语句是第一次访问调用了Dog类的构造方法创建了实例aHuang
第二条语句调用了阿黄的自我介绍方法
第三条语句第三次访问写了阿黄的属性值
第四条语句再次调用自我介绍方法
我们可以禁止AccessDemo类写Dog的属性,就可以解决了


把Dog类的age属性变成private(私有的不足为外人道也)
这样别的类写属性就会发现age属性不可见,但Dog类自己还是可以作,写一句this.age=300
private(私有的不足为外人道也)是最严格的,外人甚至连读属性的权利都被剥夺了
private放在方法前,自我介绍方法就是私有的了,别的类不能调用
private放在构造方法前,Dog类变成私用,别的类连调用构造方法创建实例都不能了
private这样的修饰符(modifier)用于修饰访问权限

总结:
1.访问是指一个类操作另一个类的实例的属性或方法
2.访问的万式包括,创建买例,读写属性,和调用万法
3.访问控制是指一个类限制别的类对自己的访问
4.访可控制是田访可控制修饰符来实施的
5.public修饰符允许同包和不同包的类进行访问
6.protecd和default修饰符只允许同包的类进行访问
7.private修饰符不允许任何类进行访问
8.访问控制的自的,是确保实例状态符合业务逻辑

java为何引入模块概念,pubilic允许所有包访问有点放太开,能不能允许有些包访问禁止一些包访问

private在禁止写入的时候把读取也禁止了,我们在Dog方法里对属性进行操作,把gatAge设为public读取就没问题了,这种读取器可以把属性写成private把读取器设为public即可

假设查查科技负责开发一个Tai国猫咪模拟游戏
顾客可以从商店买各种各样猫给猫取名字
可以请求兽医给猫咪作变性手术
在Tai国询问猫咪性别是不礼貌的,另外法律规定猫咪的捕鼠记录是国家机密
要四个类,猫咪,兽医,商店,顾客
我们先看看能不能把他放到一个包里?
我们知道兽医要知道猫的性别年龄
猫是主要的类所以要列一张访问需求表,访问控制不能细化到某一个类只能细化到某一个包
所以把猫类和兽医类放到一个包里,把性别设置成default,这样一来只有兽医能访问







我们可以发现顾客可以自己拥有宠物而不通过宠物店

总结
1.public,default和private三级访问控制,略显粗糙
2.public级对所有包都开放,不能选择对部分包开放
3.private修饰属性时,既禁止读也禁止写,不能分别控制
4.getter设计模式可以单独实现对私有属性的读访问控制
5.setter设计模式可以单独实现对私有属性的写访问控制
6.做项自时应综合考虑访问控制策略和包的划分规则

静态属性

比如我们给dog类增加属性,leg狗狗的这个属性是不随实例变化是固定的
如果有人问狗狗几条腿你可以打印任意一个实例的腿数
这种公共特性就是static静态属性,这种属性会影响所有属性
增强了java语言表达能力,之前想知道狗有几条腿我们得获得狗狗的实例比如旺财
但是如果没有实例你就无法知道狗狗有几条腿了
这不符合逻辑因为我们要在实例化Dog之前就要知道狗类有4条腿(能访问Dog类的leg属性)
静态属性就能做到这一点
点操作前不是实例了而是Dog类

拿到Dog类就能访问static属性,静态属性是Dog类公共属性与实例没有关系

静态属性VS普通属性(实例属性)

静态属性是类这一级别是全局的,而普通属性是得实例化通过实例来访问是实例这一级别的,个别的
原理上说也可通过实例获取静态属性
但这样会降低可读性
要是有人接手你代码

阿黄腿断了两个,程序员看到你通过某个实例去访问实例就会以为这是个实例属性
写个aHuang.legs=2;会让所有狗的腿都断掉
通过任何实例修改了静态属性的值都会传到所有实例
所有静态属性最好通过类来访问
总结:
1.用静态修饰符static修饰的属性,称为静态属性
2.未经static修饰的属性,称为实例属性
3.静态属性的值,田所有实例共享
4.实例属性的值,由各个实例单独享有
5.静态属性应通过类名而非实例去访问,以免造成误会
6.对静态属性值的修改,会自动传导给所有实例

静态方法

静态属性面向特征,静态方法是公共行为

要个性化就用实例属性实例方法
静态方法:通过类名调用(不同的狗也没有不同叫法)
方法体中不能访问实例属性(不能this访问实例属性)
不能调用本类实例方法(不能this调用本例实例方法)

静态方法可以访问静态属性调用静态方法


逻辑上静方法执行的时,可能还没有任何实例去哪获取实例属性值呢?

main方法是谁在调用

main是静态方法可以通过类名调用
main是程序入口,java.exe就是java的启动器软件,1.启动Java虚拟机JVM,2.加载主类,3.调用main方法
没有实例化过程,更快

1.用静态修饰符static修饰的方法,称为静态方法
2.未经static修饰的万法,称为实例万法
3.静态方法用来描述类的基础的,共性的行为
4.实例方法用来描述各实例个性的,独特的行为
5.静态万法应通过类名而非实例去调用,以免造成误会
6.静态方法中不能访问实例属性,不能调用实例方法
7.实例方法中可以访问静态属性,可以调用静态方法
8.main是静态方法,启动器无须实例化主类即可立即调用它

char


char占两字节,16位表示六万多个65535不同字符,能满足大部分需求

也可以通过字符字面值赋值


u表示unicode
后面是4位16进制数,表示UTF-16编码值
字符本身是个编码值就可以进行四则运算
因为字符编码有规律所以可以比大小啥的
可以小写变大写:用Character(String,System,Scanner,Random也类似是减轻java程序员的记忆压力的)
在Character源码的8528行
private final char value是私有的实例属性value存放的是每个实例代表的字符(UTF-16编码值)
Character每个实例相当于一个盒子包着一个字符因此也被称为char包装类
toUpperCase放大音量
总结:
1.字符类型用来表示世界各地的所有字符
2.学符是用它们的Unicode编码来表示的
3.UTF-8和UTF-16是Unicode编码的编码
4.UTF-8编码是使用最广泛的Unicode编码方案
5.Java言内部使用UTF-16编码万案来表示字符
6.学符类Character是学符类型char的包装类
7.包装类提供了大量的静态方法来实现常用操作

如何反编译




这就是构造方法,编译器会使用全限定名

在命令行窗口运行程序

1.在资源管理器中找到可执行程序
2.在可执行程序所在目录打开cmd窗口
3.在cmd窗口,输入可执行程序名,回车
由于第一步相当麻烦,所以Windows提供了Path环境变量,告诉Windows怎么找目录
如何把路径加入到path里呢,可以命令实现

编码

ANSI是GBK的马甲

内存与变量

为啥32位的系统只能装4G的内存





数据类型说明内存空间的大小
幼儿园人数如果有300,要9位才能放下,索性给16位

补码反码

负数怎么表示,十进制很简单,因为人脑比较复杂可以识别正负号,而计算机不太行,它不能够识别符号,所以应该把第一位作为符号位,0表示正的,1表示负的

cpu加法器性质决定了它做加法就是方便,减法还得另外搞个电路元件,不值得
那怎样把减法变成加法呢

很简单的一件事就是以时钟为例子,你想把他倒拨三小时完全可以把它往前拨动9h
先看计算机很gan,直接把符号位也相加了,这不对劲,正数和负数相加总是得到负数,所以我们通过反推的方法得出-5本该有的样子


我们可以得出以下结论

我们可以反推一下某不知名补码表示哪个负数


哦原来是-5


为啥负数最小是真值位全为0
所以负数最小值是多少啊?倒推行不通,我们求第二小的负数


字节码怎么看

转成16进制

浮点数


乘以二放大来转十进制
找0.5,0.25不容易,乘2乘4找一

科学计数法

精度不包含前导零,

只要存

  1. 符号
  2. 小数部分 23位(还有一个1其实是24位)
  3. 指数 8位

float





把负数偏移到正数范围
依然是12.25和-0.625

double


默认双精度


1.0f - 0.9f = 0.100000024
这么简单的运算,Java 居然会犯错,为什么?
其实主要的原因就是计算机对于浮点数的存储方式,就类似于我们现实生活中 10 ÷ 3 的问题一样。
2.0f - 0.9f = 1.1
为什么这个又是正确的?

https://www.iteye.com/blog/ezerg-1072848

因为阶数不同要对阶数

0.9f取反+1得补码


十六进制:0x3DCCCCD0

可以通过 Float.intBitsToFloat() 方法转换为十进制浮点数

将结果还原为十进制为: 0.100000024

指数位全0或者全1

指数位全0

用作他用表示∞或0.0
0.0有什么特殊,他的二进制也是0.0没办法弄成1.叽叽叽的样子
这样用到了指数位全0
此时小数位不再表示1.叽叽叽的叽叽叽
而是表示0.xxx的xxx
(有效数的整数部分不再是一个一,而是一个0)
同时指数值不用偏置了,规定为-01111110(-126)
这样表示的就是

为啥是-126因为负126,能让1EEE754表示的小数范围是连续的,不断档,这个我们后面会看到
这样一来

指数位全0,小数位全0

指数位全0,小数位全1


指数位全1

指数位全1小数位全0

正负∞

表明计算结果溢出了
比如大数相乘超过float范围

指数位全1小数位不是全0

不管小数位多少都表示NAN


算浮点数有效范围

单精度为例小数

指数


单精度

双精度

https://blog.csdn.net/liyang_nash/article/details/104527239

为什么float比int表示的范围更大呢??
对于为二进制编码,所能表示的不同的数据最多有2^n个,因此,浮点数虽然表示范围扩大了,但与定点数相比,并没有能够表示更多的数。实际上,只是这些数在数轴上朝正负两个方向在更大的范围内散开,在数轴上的分布变稀疏了。定点数分布是等距且紧密的,而浮点数分布是不等距且稀疏的,越远离原点越稀疏。

https://wenku.baidu.com/view/d6b2da4224d3240c844769eae009581b6bd9bdbe.html

运算法则

1.整数运算只留整数
2.整溢无声浮溢无穷
3.范围混合,小向大升
4.整数溢出悄无声,浮点溢出无穷大
取余%用于浮点数要小心

1.“与”运算,两个都为1,结果才是1 (找1用)
2.或”运算,任何一个为1,结果就是1
3.“异或”运算,两个值不同,结果才是1
4.非”运算,0变1,1变0
5.“带符号右移”运算,低位移出,高位补符号
6.“左移”运算,高位移出,低位补0

逻辑表达式

输入Scanner


Scanner用法三部曲:创建,使用,关闭

break cotinue

for循环的结束,是指条件表达式的求值结果变为false,for循环寿终正寝
而for循环的终止,是指在条件表达式的求值结果仍然是true的情况下,把for循环弄死(break)
跳出循环

终止循环

continue




while



do while VS while

while先判断条件再执行

do while无论如何都会先执行
老板心情好不好都要发工资,但是心情随着发钱降低

总结:
凡是需要执行1到n次的任务,适合用do while语句
凡是需要执行0到n次的任务,适合用while语句

break可以让dowhile一次循环也循环不了

continue这次循环跳过继续下次循环

循环语句相互嵌套

找三个质数

switch

利用switch击穿

lambda表达式

switch比if好
为什么呢
System.currentTimeMiLlis();
long endTime1 System.currentTimeMiLlis();
System.out.println(endTime1 startTime1);
这个毫秒值是从1970年1月1日零点开始计数的,直到这个方法被调用那一刻
它表示丛1970年1月1日零点开始,到当前时刻,总共经过了多少毫秒

switch根据选择器的值选择对应的case标签
switch有新l旧两种语法,新语法更简洁方便
switch只适用于在有限的几个值中进行选择

数组

冒泡





1.冒泡排序算法通过逐次比较相邻元素实现排序
2.当相邻元素的顺序不对时,将它们交换一下
3.第一轮排序决出最大的数,第二轮次大的,依此类推
4.n个数排序,最多需要n-1轮比较
5.当某轮比较未发生交换时,排序提前完成

大四开始学java b站java人话相关推荐

  1. java调用webservice_笃学私教:Java开发网站架构演变过程-从单体应用到微服务架构详解...

    原标题:笃学私教:Java开发网站架构演变过程-从单体应用到微服务架构详解 Java开发网站架构演变过程,到目前为止,大致分为5个阶段,分别为单体架构.集群架构.分布式架构.SOA架构和微服务架构.下 ...

  2. JAVA鸡汤------一个牛人给java初学者的建议

    给初学者之一:浅谈java及应用 学java不知不觉也已经三年了 从不知java为何物到现在一个小小的j2ee项目经理 虽说不上此道高手,大概也算有点斤两了吧 每次上网,泡bbs逛论坛,没少去java ...

  3. 学弟学妹要的Java学习路线我终于写完了

    目录 学Java有哪些就业方向? 数据结构和算法 设计模式 计算机基础 Java 入门 Java 高手进阶 基础框架(SSM) 微服务框架 常用中间件 数据库 分布式架构 必须掌握的工具软件 学习资源 ...

  4. 机械转嵌入式还是it?学嵌入式好还是java好?

    我嵌入式单片机开发10年了,刚开始主要走软件路线,后面熟悉了基本上软硬件都做. 我们在设计电路板的时候经常会跟一些做外壳,做机械的兄弟打交道. 工作之余,我们也会扯扯其他私事,各自吐槽下自己的行业. ...

  5. 学妹问我Java枚举类与注解,我直接用这个搞定她!

    很多人问我学妹长什么样,不多说 上图吧! 学妹问我Java枚举类与注解,我直接一篇文章搞定! 一.枚举类 ① 自定义枚举类 ② enum关键字定义枚举类 ③ enum 枚举类的方法 ④ enum 枚举 ...

  6. java transferto_小六六学Netty系列之Java 零拷贝

    前言 文本已收录至我的GitHub仓库,欢迎Star:https://github.com/bin392328206/six-finger种一棵树最好的时间是十年前,其次是现在 我知道很多人不玩qq了 ...

  7. python和java哪个好学-Java和Python去学哪个好

    原标题:Java和Python去学哪个好 Python和Java是两种截然不同的编程语言,但两者对于现在的程序员来说都是十分有用的工具.就学习强度来说,Python相对于Java来说比较好学一些,跟直 ...

  8. 转行学Java怎么样?Java培训机构有什么避雷的要点?

    避雷一:说Java程序员对学历没有门槛 Java程序员的岗位,大部分企业是要求计算机技术或相关专业的本科生. 一是,Java岗位对专业素质有一定的要求,科班出身会更了解基本的互联网知识,以及简单的Ja ...

  9. 比較好的JAVA網站

    1. The Source for Java Technology Collaboration(JAVA开发的官方网站) http://www.java.net/ - 外文 2. jGuru: FAQ ...

最新文章

  1. 规格表管理之查询获取规格表列表数据
  2. 多路径配置udev_ASM磁盘多路径及udev配置
  3. 如何绕过浏览器的弹窗拦截机制
  4. 处女座和小姐姐(三)
  5. promise 和 Observable 的区别
  6. linux之睡眠函数(my_sleep)
  7. 使用labview读取一副位图,并进行BCG校准(或修改其BCG)程序解析
  8. 一个完整的c语言的单链表代码,单链表完整C语言纯代码.docx
  9. 用户一片哀嚎!三星手机系统突遇大面积崩溃:现黑屏、重启、乱码
  10. python中stacked_python – Django管理员StackedInline定制
  11. docker 容器 增删改查
  12. Bailian4123 马走日【DFS】
  13. python编程软件哪个好-Python开发工具哪个好?好用的Python开发工具排行榜推荐下载...
  14. Exchange Server 2010高可用性配置
  15. Volley 源码分析
  16. C#泛型-小心使用静态成员变量
  17. 用nodejs框架Ghost快速搭建自己的网站
  18. 电子厂计算机维修周记,关于电子厂实习周记范文
  19. php解决商品超卖,商品超卖问题,你用PHP如何解决?
  20. 怎么把m2ts改成mp4

热门文章

  1. 知道表格文字识别哪个好吗?三招教你轻松表格文字识别
  2. 易语言做mysql登录器_易语言制作数据库登录器 易语言数据库教程
  3. 黑鸟每日安全资源推送​第26期(求关注转发,良心推送)
  4. AD原理图设计、STM32+W5500网络通信
  5. 凌讯消防装备云装备管理系统可视化数据平台
  6. 长文 | 盘点 YOLOv4 这些鲜为人知的特性!
  7. ⭐openGauss数据库源码解析系列文章—— 角色管理⭐
  8. 工行python面试题目和答案_迟到的面经,谢谢努力谢谢你
  9. vcard通讯录格式及手机名片制作
  10. 圣诞节教你如何用Html+JS+CSS绘制3D动画圣诞树