前言
- 时间:2021.8.9
- 内容:
- 复习Java:认真记的只记了自己不太清楚突然顿悟的一部分,还是不太清楚的一部分基本搞了链接和别人写的。
- 大数据学习路线:比较速成的辣种(我现在在学的路线
- 安装虚拟机 :以前用的VMware现在用的VirtualBox,差不多的,按照其他的教程安装就好啦~(指路链接
Java
0 随记问题
Java高级特性?
https://www.runoob.com/java/java-data-structures.html
Java的四大特性?
抽象 封装 继承 多态
Java8个基本数据类型?怎么分类的,怎么来的?
byte、short、int、long、float、double、boolean、char。String 是对象,不属于基本数据类型
4个 整数型:byte、short、int、long. 2个浮点型:float、double. 1个字符类型:char. 1个布尔型:boolean
Java定义常量时候为什么要写成静态的?
在创建类的多个对象时,用static修饰的常量在内存中只有一份拷贝。不用static修饰则可能有多份拷贝。
JDK、JRE、JVM
JavaEE、JavaSE、JavaME
1 Java修饰符
- Java修饰符大致修饰三种东西(类、变量、方法),在修饰的时候分为访问控制修饰(4种)和非访问控制修饰(n种…),为了方便记忆和描述,直接按是否为访问控制讲啦~
1-1 访问控制修饰符
-
用处(为什么要有访问修饰符这种东西呢?)
- 让客户端程序员无法触及他们不应该触及的部分 。
- 允许库设计者可以改变类内部的工作方式而不用担心影响到客户端程序员。
-
范围
范围 同类 同包的类 不同包的子类 不同包的其他类 private √ ⭐缺省(包访问性) √ √ protected √ √ √ public √ √ √ √ - 如何记忆呢?
-
private和public比较好区分,一个只能在自己的类里用,一个可以给项目里所有的类用。(用 public 修饰的域称为公共域。)由于 public 修饰符会降低运行的安全性和数据的封装性,所以一般应减少 public 域的使用。
-
缺省:有些地方叫default或者friendly之类的,但实际上Java中并没有这种命名的访问修饰符(即不能使用default或者friendly定义类或变量),只是为了方便标识缺省访问控制符的情况。
-
protected:修饰的属性或方法,允许不同包的子类中访问。访问方式是通过继承访问父类中的protected属性或方法,而不是直接通过父类实例访问protected属性或方法。
public class Animal{ protected String name; public int age; } //不同包的子类 public class Cat extends Animal{ public void print(){ /*********通过父类直接访问*********/ Animal a = new Animal(); System.out.println(a.name); //不允许 System.out.println(a.age); //允许 /*********通过继承访问*********/ System.out.println(this.name); //允许 System.out.println(this.age); //允许 }
-
- 其他需要注意的?
- 一个Java源文件(.java后缀的文件)能定义多个class,但有且仅能有一个和源文件同名的class被public修饰,这就是主类。
- 每个class内部可以有很多…(这里好像没记完…好像是关于类内部方法的public的使用)
- 为什么有这个规定,很多网上的帖子都说是为了方便JVM根据文件名找到main函数入口,个人觉得这种说法不太可信也不太合理。原因如下,JVM读取的是编译后的.class文件而不是.java源文件,而定义在一个源文件中的多个类编译后都生成了由各自类名命名的.class文件。在我看来当初java的设计者这样规定的主要目应该是为了给源码阅读提供便利,试想一下如果一个源文件中可以有多个public的class而且名字与源文件名不一致,那么当我们在阅读代码时想要了解某个引用类的定义情况应该去哪找这个类的源代码呢?当有了这个规定之后我们就可以根据import的包名和类名准确找到源文件的位置。至于源文件中的其他非public类,他们只能被本包内的类使用,使用范围有限,命名也就没有严格要求了。(摘抄)
- 如何记忆呢?
1-2 非访问控制修饰符
- 这部分基本来自网络,不是我写的。。。回来翻笔记时候要再仔细康康~~
名称 | 说明 | 备注 |
---|---|---|
static | 静态变量(又称为类变量,其它的称为实例变量) | 可以被类的所有实例共享。并不需要创建类的实例就可以访问静态变量 |
final | 常量,值只能够分配一次,不能更改 | 注意不要使用const,虽然它和C、C++中的const关键字含义一样可以同static一起使用,避免对类的每个实例维护一个拷贝 |
transient | 告诉编译器,在类对象序列化的时候,此变量不需要持久保存 | 主要是因为改变量可以通过其它变量来得到,使用它是为了性能的问题 |
volatile | 指出可能有多个线程修改此变量,要求编译器优化以保证对此变量的修改能够被正确的处理 |
- 类
- 抽象类修饰符 abstract :用 abstract 修饰符修饰的类,被称为抽象类。abstract修饰的类不能被实例化,必须被子类继承。类只要有一个抽象方法就必定是抽象类,但抽象类不一定要有抽象方法。
- 最终类修饰符 final :当一个类不能被继承时可用修饰符 final修饰为最终类。被定义为 final 的类通常是一些有固定作用、用来完成某种标准功能的类。final修饰的类不能被继承,没有子类。
- 类缺省访问控制符:如果一个类没有访问控制符,说明它具有缺省的访问控制符特性。此时,这个类只能被同一个包中的类访问或引用。这一访问特性又称为包访问性。
- 方法
- 抽象方法控制符 abstract : abstract 修饰的方法称为抽象方法。抽象方法仅有方法头,没有方法体和具体实现。
- 静态方法控制符 static :用修饰符 static 修饰的方法称为静态方法。静态方法是属于整个类的类方法;而不使用static 修饰、限定的方法是属于某个具体类对象的方法。 由于 static方法是属于整个类的,所以它不能操纵和处理属于某个对象的成员变量,而只能处理属于整个类的成员变量,即 static 方法只能处理 static的域。
- 最终方法控制符 final :用修饰符 final修饰的方法称为最终方法。最终方法是功能和内部语句不能更改的方法,即最终方法不能重写覆盖。final固定了方法所具有的功能和操作,防止当前类的子类对父类关键方法的错误定义,保证了程序的安全性和正确性。所有被 private 修饰符限定为私有的方法,以及所有包含在 final 类 ( 最终类) 中的方法,都被认为是最终方法。
- 本地方法控制符 native :用修饰符 native 修饰的方法称为本地方法。为了提高程序的运行速度,需要用其它的高级语言书写程序的方法体,那么该方法可定义为本地方法用修饰符 native 来修饰。
- 同步方法控制符 synchronized :该修饰符主要用于多线程程序中的协调和同步。
- 变量
- 公共访问控制符 public:用 public 修饰的域称为公共域。由于 public 修饰符会降低运行的安全性和数据的封装性,所以一般应减少 public 域的使用。
- 私有访问控制符 private:private 修饰的成员变量只能被该类自身所访问,不能被其它任何类 ( 包括子类 ) 访问。
- 保护访问控制符 protected:用 protected 修饰的成员变量可以被三种类所引用:①该类自身;②同一个包中的其它类;③其它包中的子类。使用修饰符 protected 的主要作用是允许其它包中的子类来访问父类的特定属性。
- 缺省默认修饰符 :没有访问控制符或者是用default修饰的成员变量可以被该类本身或同一包中的其他类访问。
2 数据类型
3 Java基础
-
接口里实现方法可以用如下的方法
public interface ViewInter { static final int age = 10; //等同于 int age = 10; public static void view(); //等同于 void view(); //接口里实现方法需要在方法前加default,仅限于jdk1.8之后的用法,用于给该接口每个实现类都加一个相同功能的情况。 default void test(){ System.out.println("---test---"); } }
-
另外在这里,这种继承工具类的用法是不规范的,不符合面向对象原则,就好比一个人说他的爹是一把锤子…
public interface ViewInter extend DbUtils{ }