Java教程

Java随笔

本文主要是介绍Java随笔,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

常用名词:Java ee(企业版)、Java se(标准版)、Java me(微型版)

1.Java修饰符

Default:类在同一包内可使用,适用对象:类、接口、变量、方法;
Private:在同一类中可见,不能修饰类;
Public:对当前工程下所有类可见。适用对象:类、接口、变量、方法。文件中公有类名必须与文件名一致,且文件中只能有一个公有类;
protected:对同一包内的类(可以不是子类)和所有子类(可以不同包)可见。使用对象:变量、方法。不能修饰类(外部类)。
null、false、true不是关键字

访问控制

按照权限大小进行排序:public>protected>default>private

小总结

Java主要有两类修饰符:
访问控制修饰符 : default, public , protected, private
非访问控制修饰符 : final, abstract, static, synchronized
其中final是可以修饰类的,这样的类不可以被继承,在jdk中用final修饰的类有String、几个封装类
备注:eclipse当中,可以用快捷键Ctrl+shift+t查找工程中的类源码,Ctrl+shift+r查找自定义的类

2.接口和抽象类的区别

接口是对行为的抽象,而抽象类是对类(事物)的抽象
例子:
飞机和鸟是不同类的事物,但是它们都有一个共性,就是都会飞。那么在设计的时候,可以将飞机设计为一个类Airplane,将鸟设计为一个类Bird,但是不能将 飞行 这个特性也设计为类,因此它只是一个行为特性,并不是对一类事物的抽象描述。此时可以将 飞行 设计为一个接口Fly,包含方法fly( ),然后Airplane和Bird分别根据自己的需要实现Fly这个接口。然后至于有不同种类的飞机,比如战斗机、民用飞机等直接继承Airplane即可,对于鸟也是类似的,不同种类的鸟直接继承Bird类即可。从这里可以看出,继承是一个 "是不是"的关系,而 接口 实现则是 "有没有"的关系。如果一个类继承了某个抽象类,则子类必定是抽象类的种类,而接口实现则是有没有、具备不具备的关系,比如鸟是否能飞(或者是否具备飞行这个特点),能飞行则可以实现这个接口,不能飞行就不实现这个接口。

其他区别

接口只能使用public修饰符,不能有构造器,且一个类可以实现多个接口,但只能继承一个抽象类,除了不能实例化抽象类之外,它与其他类没有任何区别。同时,接口中所有方法必须都是抽象的,不能有非抽象的方法,但抽象类中可以。

可以使用抽象类声明上转型对象,成为子类对象的上转型对象,该对象可以调用子类重写的方法。

接口体中包含常量的声明(没有变量)和抽象方法两部分。接口体中只有抽象方法,没有普通的方法,所有常量访问权限一定都是public,而且是static常量,(允许省略public、final和static修饰符)所有的抽象方法一定都是public(允许省略public、abstract修饰符)。

3.Java命名规则

类名
对于所有的类来说,类名的首字母应该大写。如果类名由若干单词组成,那么每个单词的首字母应该大写,例如 MyFirstJavaClass 。
方法名
所有的方法名都应该以小写字母开头。如果方法名含有若干单词,则后面的每个单词首字母大写。

4.源文件声明规则

一个源文件只能有一个public类。
一个源文件可以有多个非public类,且源文件命名应与public类的类名保持一致。
如果一个类定义在某个包中,那么package语句应该放在源文件的首行。
如果源文件包含import语句,那么应该放在package语句和类定义之间。如果没有package语句,那么import语句应该在源文件中最前面。
import语句和package语句对源文件中定义的所有类都有效。同一源文件中,不能给不同的类不同的包声明。

5.Java基本数据类型

包含内置数据类型和引用数据类型

5.1内置数据类型

包含六种数字类型:四个整数型、两个浮点型。
以及一种字符类型,一种布尔类型。
具体是byte(有符号、单字节8位)、short(有符号、2字节16位)、int(有符号、4字节32位)、long(有符号、8字节64位)、float(有符号、单精度32位浮点数、7位有效数字)、double(有符号、双精度64位浮点数、15或16位有效数字)。
char,内码(运行内存)的char使用UTF16的方式编码,一个char占用两个字节,但在c/c++中只占1个字节。
boolean,Java没有明确定义其大小,**一说1字节**,一说4字节,c++定义1字节,C语言没有bool类型变量。

5.2引用数据类型

在Java中,引用类型的变量非常类似于C/C++的指针。引用类型指向一个对象,指向对象的变量是引用变量。这些变量在声明时被指定为一个特定的类型,比如 Employee、Puppy 等。变量一旦声明后,类型就不能被改变了。
Java常量
在 Java 中使用 final 关键字来修饰常量,声明方式和变量类似。
隐含强制类型转换
1.整数的默认类型是 int。
2.小数默认是 double 类型浮点型,在定义 float 类型时必须在数字后面跟上 F 或者 f。
封装类

Byte、Shot、Integer、Long、Float、Double、Character

6.常见编码

 1. Unicode 统一码、万国码
 2. GBK

7.Java字符串与基本类型之间的转换

一个原则:转换成什么类型就要调用什么类
其他类型转换成String:调用String.valueOf()
字符串转换成其他类型:调用 其他类型的包装类.parse包装类(),例如:Double.parseDouble(String s):将s转换成double

8.Java常用方法

Character.isDigit()

8.1 String类

/*endsWith()和startsWith()是判断当前String对象的字符序列前缀(后缀)是否是参数指定的String对象的字符序列*/
String s=new String("Hello,this is a test!");
		System.out.println(s.endsWith("t!"));
		System.out.println(s.startsWith("he"));
		System.out.println(s);
    
/*replaceAll(String regex,String replacement)方法使用给定的参数replacement替换字符串所匹配给定的正则表达式的子字符串,字符串中含有具有特殊含义的元字符,例如,"\\dcat"中的\\d就是具有特殊意义的元字符,代表0~9中的任何一个。String 对象调用public boolean matches(String regex)方法可以判断当前String 对象的字符序列是否和参数regex指定的正则表达式匹配*/
/*在正则表达式中,可以用方括号括起若干个字符来表示一个元字符,该元字符代表方括号中的任何一个字符。例如String regex="[159]ABC",那么"1ABC"、"5ABC"、"9ABC"都是和正则表达式regex匹配的字符序列。*/


9.Java编程规则

9.1 类中方法与方法之间要有空行
9.2Java的代码风格可以自定义,位置是Windows-->preferences-->java-->fomatter
9.3 注释
单行或多行注释快捷键 Ctrl+shift+c、Ctrl+?
文档注释 alt+shift+j  

10.Java数组

10.1数组在定义时有三种形式如下
Java支持三种赋值初始化的方式:

int [] array1=new int[5];
int [] array2=new int[]{1,2,3,4,5};
int [] array3={1,2,3,4,5};
//第三种方式只有在定义时可以使用,其他时候不可使用。

11.Java循环

Java增强for循环
结构:

for(声明语句 : 表达式 ){
	代码块;
}

其中声明语句是声明新的局部变量,其类型要与迭代地数组元素类型一致,作用域是循环体,其值与此时数组元素的值相等。
表达式是数组名或返回数组的函数。

12.集合

课堂记录

遍历过程中删掉元素:
采用增强型,报错,错误原因?
采用一般for循环,i++,需要添加i--语句;
采用for循环逆序遍历,i--,最正确;
采用迭代器,便利时删除,正确运行;
//Collections Map、LIst、HashMap    哈希存储就是散列存储
//排序

常用集合

Hash、Linked、Array、Tree、Entry
Collections、Map、List、Set、Vector
多为以上的组合。
其中较为重要的有:HashMap
集合体系概述
主要以Collection和Map接口为核心进行扩展
Collection中又包含3个接口:List、Set、Queue
其中List有序,可重复
	Set无序,唯一
而这三个接口又拓展了大量集合类型,具体情况如下:

 - List,实现该接口的有:ArrayList、Vector、LinkedList
 - Set,实现该接口的有:HashSet、TreeSet、LinkedHashSet
 - Queue,实现该接口的有:LinkedList间接实现  有一个Deque中间接口

应当注意到,一个类是可以实现多个接口的,比如LinkedList既实现了List,又实现了Deque

下面详细介绍各集合的特点:

ArrayList:
  • 排列有序,可重复
  • 底层使用数组,顺序存储
  • 存取速度快,增删慢,getter()和setter()方法快
  • 线程不安全
  • 当容量不够时,ArrayList变为当前容量的1.5倍加1
Vector:
  • 排列有序,可重复
  • 底层使用数组
  • 存取速度快,增删慢
  • 线程安全、但效率低,只在要求线程安全时使用,但此时也可被synchronized(控制线程安全)关键字所替代
  • 当容量不够时,Vector默认扩展一倍容量
LinkedList:
  • 排列有序,可重复
  • 底层使用双向循环链表数据结构
  • 查询速度慢,增删快,add()和remove()方法快
  • 线程不安全
HashSet:
  • 排列无序,不可重复
  • 底层使用Hash表实现
  • 存取速度快
  • 内部内部是HashMap
TreeSet:
  • 排列无序,不可重复
  • 底层使用二叉树实现
  • 排序存储
  • 内部是TreeMap的SortedSet
LinkedHashSet:
  • 采用哈希表存储,并用双向链表记录插入顺序
  • 内部是LinkedHashMap
Queue:
  • 它是两端出入的List,所以也可以用数组和链表实现

13.浅拷贝与深拷贝

浅拷贝是复制值,深拷贝是复制内容并重新开辟空间,其值并不相同

14.面向对象编程

14.1 子类与父类

实例化过程

子类在实例化时,从上而下进行实例化,上从最顶层父类开始,向最底层子类逐渐实例化。extend只能继承成员变量和成员函数而不能继承父类中的构造函数,在子类中必须调用父类中的构造函数,如果不调用则系统自行辅助调用,即直接加上一句话,super进行调用   ---super 如果调用不为空的构造函数则super()不执行,如果想调用父类中其他的构造函数,那么就在super()括号中写上需要调用的参数即可。

重写原则

(一) 父类方法的参数列表必须完全与被子类重写的方法的参数列表相同,否则不能称其为重写而是重载。
(二) 父类的返回类型必须与被子类重写的方法返回类型相同,否则不能称其为重写而是重载。
(三) Java中规定,被子类重写的方法不能拥有比父类方法更加严格的访问权限。

在这里插入图片描述

重载原则

被重载的方法必须改变参数列表; 
被重载的方法可以改变返回类型; 
被重载的方法可以改变访问修饰符; 
被重载的方法可以声明新的或更广的检查异常; 
方法能够在同一个类中或者在一个子类中被重载。

上转型对象

Father f=new Son();
f是变量,类型是Father类型,空间大小貌似是Son这么大。
重写的只能是父类的方法,变量不变。
在这里插入图片描述

a   instanceof   b  //该关键字  看b所创建的对象能否对a赋值

任务清单

Java线程安全的概念 Vector
   在拥有共享数据的多条线程并行执行的程序中,线程安全的代码会通过同步机制保证各个线程都可以正常且正确的执行,不会出现数据污染等意外情况。
   非线程安全是指多线程操作同一个对象可能会出现问题。而线程安全则是多线程操作同一个对象不会有问题。线程安全必须要使用很多synchronized关键字来同步控制,所以必然会导致性能的降低。所以在使用的时候,如果是多个线程操作同一个对象,那么使用线程安全的Vector;否则,就使用效率更高的ArrayList。ArrayList、LinkedList是非线程安全的,Vector是线程安全的;HashMap是非线程安全的,HashTable是线程安全的;StringBuilder是非线程安全的,StringBuffer是线程安全的。
   线程安全必须要使用很多synchronized关键字来同步控制,所以必然会导致性能的降低。所以在使用的时候,如果是多个线程操作同一个对象,那么使用线程安全的Vector;否则,就使用效率更高的ArrayList。
非线程安全!=不安全

String常用类和方法、递归、集合
群里的百度网盘文件
Ctrl+1 快速生成声明类型
Java面试题大全

这篇关于Java随笔的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!