我的第一篇博客

我的第一篇博客----学计算机的感受,永远都不要说自己不行!

因为我经常喜欢逛知乎,看到很多的IT技术很厉害的人,都说写博客是一个很好的习惯,可以加深对知识点的巩固,对于计算机我接触还是比较晚的,真的可以算是超级小白了,起步十分困难,但是我还是坚持下来了,中间真的经历了很多艰辛,一次一次的失败,一次一次的受打击,很多很多的事情也在渐渐改变我,渐渐的我习惯了,内心越来越坚强,女生同样也可以学好计算机,相信自己,也许我会慢,但是我不会停!

马上就临近期末考试了,老师给了很多问题,叫我们课下去查查了解,第一篇博客就发这个吧!对于很厉害的,可能有点简单,希望大家可以提意见,我肯定会虚心接受的。
1、java语言特性
( 1)平台无关性,(2)安全性,(3)面向对象(将数据封装与类中,利用类的优点,类的封装性,继承性等有 关对象的特性,使程序代码只需一次编译,然后通过上述特性反复利用)(4)分布式,Java建立在扩展TCP/IP网络平台上。库函数提供了用HTTP和FTP协议传送和接受信息的方法。这使得程序员使用网络上的文件和使用本机文件一样容易。(5)健壮性,java自己操纵内存,减少了内存出错的可能性
2、java中注释语句类型
( 多行注释// 单行注释// 文档注释/ */)
3、java的编码方式:理解:翻译的过程就是编码,比如计算机只能理解英语,当我们使用汉语与计算机交流,计算机肯定听不懂,所以要进行翻译,也就是编码
翻译方式:计算中提拱了多种翻译方式,常见的有 ASCII、ISO-8859-1、GB2312、GBK、UTF-8、UTF-16 等。它们都可以被看作为字典,它们规定了转化的规则,按照这种规则可以让计算机正确表示我们的字符
(1)、ASCLL码:一共有128个,用一个字节的低7位表示,031是控制字符如换行,回车,删除等等,32126是打印字符,可以通过键盘输入并且能够打印出来
(2)、ISO-8859-1:ISO组织在ASCLL码基础上又进行了扩展,它是双字节编码,总的编码范围是 A1-F7,其中从 A1-A9 是符号区,总共包含 682 个符号,从 B0-F7 是汉字区,包含 6763 个汉字。
(3)、UTF-16:Unicode编码,一个字节是8个bit位,2个字节是16个bit位,UTF-16 用两个字节来表示 Unicode 转化格式,这个是定长的表示方法,不论什么字符都可以用两个字节表示
(4)、UTF-8: UTF-8 采用了一种变长技术,每个编码区域有不同的字码长度。不同类型的字符可以是由 1~6 个字节组成,节省了内存空间,因为不是每一个字符都是由2个字节组成的,有的字符是用1个字符组成的,这是种比较巧妙的设计,如果一个字节的第一位是0,则这个字节单独就是一个字符;如果第一位是1,则连续有多少个1,就表示当前字符占用多少个字节,中文汉字在utf-8中到底占几个字节,一般是3个字节,最常见的编码方式是1110xxxx 10xxxxxx 10xxxxxx

字节
字节,说白了就是byte,二进制数据,Unicode中一个汉字=2个英文字母=2字节
通常在读取图片、声音、可执行文件需要用字节数组来保存文件,在下载文件也是用byte数组来做临时的缓冲器接收文件内容。
UTF规定:如果一个符号只占一个字节,那么这个8位字节的第一位就为0。如果为两个字节,那么规定第一个字节的前两位都为1,然后第一个字节的第三位为0,第二个字节的前两位为10,然后如果是三个字节的话,那么第一个字节的前三位为111,第四位为0,剩余的两个字节的前两位都为10。
Eg:由于utf-8规则天然占用字节前几位,若与Unicode同样用2字节16位表示一个中文字符,则utf-8除去规则占用,只剩余16-5=11位,无法表示。
那么看下面“1字符=3字节” 这段,除去规则占用,还剩余8x3-8=16位,恰好符合16位=1中文字符这一Unicode规则。

字符
机器只知道字节,而字符却是语义上的单位,它是有编码的,一个字符可能编码成1个2个甚至3个4个字节。这跟字符集编码有关系,英文字母和数字是单字节,但汉字这些自然语言中的字符是多字节的。一个字节只能表示255个字符,不可能用于全球那么多种自然语言的处理,因此肯定需要多字节的存储方式。

那么在文件的输入输出中,InputStream、OutputStream它们是处理字节流的,就是说假设所有东西都是二进制的字节;而 Reader, Writer 则是字符流,它涉及到字符集的问题;按照ANSI编码标准,标点符号、数字、大小写字母都占一个字节,汉字占2个字节。按照UNICODE标准所有字符都占2个字节。
4、java继承的相关概念:理解为一个类从另一个类中获取方法和属性的过程,如果类B继承与类A,那么类B就拥有类A的属性和方法,使用extends关键字表示,
(1)、子类可以覆盖父类中的方法。
(2)、子类可以覆盖父类除private修饰的以外的所有成员。
(3)、构造方法不能被继承。
(4)、如果一个类没有显式的继承一个父类,那么这个类的默认父类就是Object类,Object类是所有类的父类。

单继承性:Java允许一个类仅能继承一个其他类,即一个类只能有一个父类,这个限制被称为单继承性,而接口允许多继承,弥补了Java类只能单继承的缺陷

5、访问权限相关概念(public private protect 友好,default包的访问)
注:所谓的访问,有两种方式,直接访问和通过对象访问。

6、常用实用类Math,Object,System.String
Math类
Math.sqrt();计算平方根
Math.cbrt();计算立方根
Math.pow(a,b);计算a的b次方
Math.max(,);计算最大值
Math.min(,);计算最小值
Math.abs(,);计算绝对值
Math.ceil(): 天花板的意思,就是逢余进一
Math.floor() : 地板的意思,就是逢余舍一
Math.rint(): 四舍五入,返回double值。注意.5的时候会取偶数
Math.round(): 四舍五入,float时返回int值,double时返回long值
Math.random(): 取得一个[0, 1)范围内的随机数
**【注意】**这里有一个非常需要注意的一点是:这里所有进位的方法的入参都要保证是float或者double类型,否则进位方法将毫无意义。例如如下我们经常犯的错误:
int a = 1300, b = 1000;
System.out.println(Math.ceil(a / b)); // 1 表达式A(错误使用)
System.out.println(Math.ceil(a / (float)b)); // 2 表达式B(正确使用)
看上去表达式A和表达式B没有什么区别,可仔细分析可知:a / b = 1 ,而 a / (float)b = 1.3, 实际上表达式A的Math.ceil()根本起不了任何作用。
Object类
Object类存储在java.lang包当中,是所有java类的终极父类,当然,数组也继承了object类,然而,接口是不继承object类的,接口是不继承object类的
7、引入语句import的应用(指示编译器导入一个包)
8、异常相关概念,异常处理模块的作用,try-catch-finally
抛出异常:Java程序的执行过程中如果出现异常,可以生成一个异常类对象,该对象封装了异常事件的信息。并将其交给Java运行系统,这个过程称为抛出异常。
try{
//可能会出现异常的语、 一但出现异常,跳到catch块
}catch(…){
//出现异常类型与指定类型相兼容,则处理
}finally{
// 无论是否出现异常,都必须要做的语句。即使前面有 return
}
9、java多线程调度的时间单位是什么?
操作系统的调度:因为在现代的操作系统中,同时运行着多个应用程序,而cpu的资源是有限的,如何高效的运行应用程序,并为其分配系统资源(包括硬件资源和软件资源等),就是操作系统的调度。
现代的操作系统包括了进程和线程这两种调度单位。进程是指程序中正在运行的一个应用程序。线程是系统分配处理器时间资源的基本单位。对于操作系统而言,其调度单元是线程。一个进程至少包括一个线程,通常将该线程称为主线程。

操作系统的最小调度单位是线程。

计算机资源:CPU+存储器+IO
无非就是二种:计算资源,存储资源,

计算资源:CPU是计算单元,它就像是一个黑盒,只对输入的指令和数据进行计算,然后输出结果,它不负责管理计算那些“指令和数据”,换句话说,cpu只提供计算能力,但是不负责分配计算资源。计算资源是由操作系统来分配的,也就是常说的操作系统的调度模块,由操作系统按照一定的规则来分配什么时候由谁来获得CPU的计算资源,比如时间分片

存储资源:就是内存,磁盘这些存储设备的资源。从缓存原理的角度来说,把内存作为磁盘的缓存。进程是面向磁盘的,为什么这么说呢,进程表示一个运行的程序,程序的代码段,数据段这些都是存放在磁盘中的,在运行时加载到内存中。所以虚拟内存面向的是磁盘,虚拟页是对磁盘文件的分配,然后被缓存到物理内存的物理页中。
10、java标识符命名规则(由字母下划线数字和美元符号组成 要以字母或下划线开始)
(1).java中能用作标识符的有:26个英文字母(大、小写),数字,下划线,美元符号$。
但是不能以数字开头。
(2).类名首个字母必须大写,多个单词组成的,每个单词首字母都要大写。
(3).方法名一般首个字母小写(构造方法例外),多个单词组成方法名,后面单词首字母大写。
(4).变量命名规则同方法名。
注意:不能使用java中的关键字做标识符。

11、多线程中常用方法:wait(),sleep(),start(),run(),notify()
详解notify();与notifyAll();
一、先说两个概念:锁池和等待池
锁池:假设线程A已经拥有了某个对象(注意:不是类)的锁,而其它的线程想要调用这个对象的某个synchronized方法(或者synchronized块),由于这些线程在进入对象的synchronized方法之前必须先获得该对象的锁的拥有权,但是该对象的锁目前正被线程A拥有,所以这些线程就进入了该对象的锁池中。
等待池:假设一个线程A调用了某个对象的wait()方法,线程A就会释放该对象的锁后,进入到了该对象的等待池中
二、然后再来说notify和notifyAll的区别
如果线程调用了对象的 wait()方法,那么线程便会处于该对象的等待池中,等待池中的线程不会去竞争该对象的锁。当有线程调用了对象的 notifyAll()方法(唤醒所有 wait 线程)或 notify()方法(只随机唤醒一个 wait 线程),被唤醒的的线程便会进入该对象的锁池中,锁池中的线程会去竞争该对象锁。也就是说,调用了notify后只要一个线程会由等待池进入锁池,而notifyAll会将该对象等待池内的所有线程移动到锁池中,等待锁竞争,优先级高的线程竞争到对象锁的概率大,假若某线程没有竞争到该对象锁,它还会留在锁池中,唯有线程再次调用 wait()方法,它才会重新回到等待池中。而竞争到对象锁的线程则继续往下执行,直到执行完了 synchronized 代码块,它会释放掉该对象锁,这时锁池中的线程会继续竞争该对象锁。
综上,所谓唤醒线程,另一种解释可以说是将线程由等待池移动到锁池,notifyAll调用后,会将全部线程由等待池移到锁池,然后参与锁的竞争,竞争成功则继续执行,如果不成功则留在锁池等待锁被释放后再次参与竞争。而notify只会唤醒一个线程。
有了以上的这些理论基础,后面的notify可能会导致死锁,而notifyAll则不会的例子也就可以解释了

12、构造方法的相关概念及特点
构造方法特点
1、构造方法名一定与类同名
2、构造方法无返回类型(void也不可以)
3、构造方法可以没有(默认一个无参的构造方法),也可以有多个构造方法,他们之间构成重载关系
4、如果定义有参的构造函数,则无参的构造函数将被自动屏蔽
5、构造方法不能被继承
6、构造方法不能手动调用,在创建类实例的时候自动调用构造方法
构造方法的作用与使用场合
1、当我们创建类实例时,就想给他的私有字段赋初
2、简化我们为类字段赋值的代码

13、java常用包的作用:
( 一)、java.awt:java.awt是一个软件包,包含用于创建用户界面和绘制图形图像的所有分类,在AWT术语中,诸如按钮或滚动条之类的用户界面对象称为组件Conponent类是所有AWT组件的根。当用户和组件交互时,一些组件会激发事件。
(二)、java.lang,(是Java语言的核心,它提供了java中的基础类)
(三)、java.util(java的集合框架为程序提供了一种处理对象组的标准方式。设计了一系列标准泛型接口,包含集合框架、遗留的 collection 类、事件模型、日期和时间设施、国际化和各种实用工具类(字符串标记生成器、随机数生成器和位数组、日期Date类、堆栈Stack类、向量Vector类等)。集合类、时间处理模式、日期时间工具等各类常用工具包)
(四)、java.io (提供了全面的io接口,包括:文件读写,标准设备输出等,java中io是以流为基础进行输入输出的,所有数据被串行化写入输出流,或者从输入流读入)
(五)、java.applet(小程序)就是用java语言编写的一些小应用程序,
1、他们可以直接嵌入到网页中,并能够产生特殊的效果,包含Applet的网页被称为Java-Powered页,可以称其为Java支持的网页
2、当用户访问这样的网页时,Applet被下载到用户计算机上执行,但前提是用户使用的是支持Java的网络浏览器
3、在Java Applet中,可以实现图形绘制、字体和颜色控制、动画和声音的插入、人机交互及网络交流等功能.Applet还提供各种名为抽象窗口工具箱 (Abstract Window Toolkit,AWT)的窗口环境开发工具,但AWT的设计是存在缺陷的,取而代之的Swing技术为Java GUI组建的轻量组建.它们利用用户计算机的GUI元素,可以建立标准的图形用户界面,如窗口、按钮、滚动条等。目前,在网络上有非常多的Applet范例来生动地展现这些功能。
(六)、java.rmi(图形):提供RMI包,RMI指的是远程方法调用。它是一种机制,能够让在某个 Java虚拟机上的对象调用另一个 Java 虚拟机中的对象上的方法。可以用此方法调用的任何对象必须实现该远程接口。
什么是RMI
  远程方法调用是一种计算机之间对象互相调用对方函数,启动对方进程的一种机制,
  使用这种机制,某一台计算机上的对象在调用另外一台计算机上的方法时,使用的程
  序语法规则和在本地机上对象间的方法调用的语法规则一样。
14、怎么构造多线程
理解多线程:我们继续以word2016 来举例说明线程。可以看到在运行的过程中,word只有一个进程,但是却可以同时执行不同的功能。这是因为word2016 的进程中,有多个线程,如 有一个线程在接收键盘输入的字并以适当的格式显示在屏幕上,而另一个线程在“读取”我们输入的字符或者文本,然后分析并标记错误的部分。
这就和我们以前运行java程序的时候形成对比了。以前我们运行java程序的时候,是从mian函数从上往下按顺序执行的,当调用函数的时候,也要等调用的函数执行完了,才能继续往下执行。而如果在我们的程序里加入多线程,就可以不用等函数调用完成,可以继续往下执行下面的语句。

实现线程的二种方法:
1、创建一个类,并继承(extends)Thread类
2、重载父类Thread的run()方法(即把你想要在这个线程中执行的代码放入run()方法里)
3、实例化(new)该线程的一个对象
4、调用对象的start()方法启动线程
线程启动后自动执行run()方法里的内容,执行完毕后,线程进入终止的状态
15、instanceof运算符的主要作用(双目运算符 左面是操作元对象、右面是操作元类 当左面的对象时右面的类或子类所创建的对象时instanceof的运算结果为true)
instanceof运算符是用来在运行时指出对象是否是特定类的一个实例。instanceof通过返回一个布尔值来标识该对象是否为特定类或者它的子类的一个实例
该运算符是二目运算符,左边的操作元是一个对象,右边是一个类,当左边的对象是右边的类或子类创建的对象时,该运算符运算的结果是true,否则是false

class instanceOfDemo{
public static void main(String []args){
instanceOfDemo t=new instanceOfDemo();
if(t instanceof instanceOfDemo){ t是对象,后面的那个是类
System.out.println(“t是instanceOfDemo的实例”);
}
}
}

16、实现继承的关系关键字:实现接口的关键字extends implements
17、方法重载与覆盖的相关概念:在Java中,同一个类中的多个方法可以有相同的方法名称,但是有不同的参数列表,这就称为方法重载,参数列表又叫参数签名,包括参数的类型,参数的个数,参数的顺序,只要有一个不同就叫参数列表不同

18、static关键字,类成员变量和类方法的相关概念(类型前有static的为类成员变量或者类成员方法,类成员变量和方法使用时可以直接用类名调用)

19、接口的相关概念(接口可以抽象出重要的行为标准,接口中的方法为abstract类型 接口中只有常量)
20、线程相关关键字throw, synchronized (同步的)
throws关键字和throw关键字的区别主要在于:
1.throws关键字在方法的声明上使用,表示此方法在调用的时候必须处理异常
2.throw关键字指的是在方法中,人为的抛出一个异常(这个异常对象可能是自己实例化,或者是抛出已经存在的)throw new exception(“自己定义的异常”),exception英文意为例外
21、java源文件扩展名,字节代码文件扩展名(.java .class)
22、常用窗口容器的默认布局管理器(BorderLayout()边界布局) 面板默认的布局为(FlowLayout()流布局)

以后要坚持在力扣上每天坚持做3道算法题,做一个自律的人,自律对一个来说真的很重要,不仅仅是在学习上,它贯穿我们生活的方方面面!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值