zoukankan      html  css  js  c++  java
  • Java基础知识点笔记整理

    废话不多说,直接上干货:
    1、两个容易搞混的C盘文件夹
    2、常用基础DOS命令(Windows+R打开命令)
    题外话:如果大家在学习过程中遇到什么问题,或者缺乏相关的Java学习资料,可查看右侧公告栏获取,有问题随问随答,还有我这段时间整理的一些Java学习手册,面试题,开发工具,PDF文档书籍教程,需要的话都可以免费分享给大家。下面继续
    3、Java语言的三大组成块
    4、 关于Java的环境(JDK)
    SDK、JDK、JRE、JVM图解:
    在JDK的安装目录下有一个jre目录,里面有两个文件夹bin和lib,可以这么认为bin里的运行程序就是jvm,lib中是jvm工作所需要的类库,jvm和lib合起来就称为jre。(javac.exe 编译命令java.exe 运行命令)   JVM是不能够单独安装的,如果开发就安装JDK,只做测试可以只安装JRE。
    java中运行的都是.class字节码文件。 调用方法是栈的形式指向的,当调用方法的时候,方法进栈,调用结束,方法出栈。
    JVM的类加载原理:
    5、关于Java的环境变量配置
    如果要求在任一盘符任一位置都可以使用 --> 需要配置环境变量,使其在电脑的任意位置都可以使用。   (在系统变量中添加变量JAVA_HOME,值为JDK路径,在系统变量的path变量中添加:%JAVA_HOME%in%JAVA_HOME%jrein)
    计算机环境变量设置分为两种:
    1. 设置(Administrtor的)用户变量 --> 配置路径 -> 只有通过管理员用户登录进来才可以使用
    2. 在系统变量中配置 --> 配置成功后不管哪个用户登录都可以使用
    配置path变量成功后 --> 在不同盘符路径下使用javac命令的话,首先会先在当前路径目录下找,找不到 --> 再去path路径找 —> 所有path路径都找不到 --> 就会报错 注意:当环境变量配置成功后,则必须将之前的DOS命令窗口关闭才能生效
    6、关键字、标识符、编码、变量
    关键字(在Java中具有特殊意义的,全部小写 如:class、public、static、void等)
    标识符以字母、下划线_或$ 开头,其后可以是字母、数字、下划线_或$,区分大小写,不能使用关键字)   变量名称、方法名称、参数名称采用驼峰命名法(除了第一个单词小写,其后单词首字母大写,标识符的长度最好不要超过15个字符)
    字符编码:按某种格式某种规定将数据存在计算机中 常用字符编码:
    • ASCII:(‘a’ = 97 ‘b’ = 98 ‘A’ = 65 ‘0’ = ‘48’ ’ ’ = 32)
    • iso8859-1:西欧语言编码,兼容ASCII(不能存储中文,乱码显示
    • GBK/GB2312:中文编码,不论中文还是英文存储都是双字节(2byte)
    • Unicode:为每种语言中的每个字符设定了统一并且唯一的二进制编码(数字编号),统一码,常用的有以下三种:
     
    1. UTF-8:使用变长字节表示,使用的字节个数从1到4个不等。比如英文字母,UTF-8编码和ASCII码是相同的(单字节)
    2. UTF-16:使用变长字节表示,编号在U+0000到U+FFFF的字符(常用字符集),直接用两个字节表示;编号在 U+10000到U+10FFFF之间的字符,需要用四个字节表示。
    3. UTF-32:是字符所对应编号的整数二进制形式,四个字节。这个就是直接转换
     
    变量
    • 按声明位置(作用范围)分为:局部变量(在方法中声明),成员变量(在类中声明)
    • 按数据类型分为:基本数据类型在内存中存放真正的值)和引用数据类型(在内存中存放地址(引用)【常量池中存放值,引用数据类型的变量指向该地址,比如String)
    7、关于内存(堆、栈、方法区)
    内存包含三部分:
    • :存放方法对象
    • :存放方法以及方法中的局部变量
    • 方法区:(也叫共享区)存放代码片段、静态属性、常量池(比如常量池中存放字符串的值)
    堆和栈的区别 1)栈区(stack)— 由编译器自动分配释放,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。 2)堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由垃圾回收器gc回收。
    关于字符串常量(String str=”李四”)的声明 变量声明时,字符串常量(String str=”李四”)先在方法区的常量池中找,若存在,则不再分配空间,str直接指向常量池中的“李四”值的地址空间,否则,在常量池中开辟空间存储该值(“李四”),并将str指向该空间。
    static修饰的静态属性(静态属性/类属性),存放在方法区(共享区中) 比如:   当有多个重复引用变量,通过添加static静态属性,存储到方法区(共享区)中,以节省空间---- ->[例如:Student学生类中有属性school学校,同一学校的学生的school属性值都相同,则应该通过在属性school前添加static修饰,以存放在方法区(共享区)中]
    java程序运行时,在内存中JVM会自动分配空间 在编译时,是不分配空间的。 引用数据类型(在内存中存放地址(引用)【常量池中存放值,引用数据类型的变量指向该地址,比如String类型) (比如:String str = “字符串”,String是一个引用数据类型,值"字符串"存放在常量池中,str变量只是存放一个指向"字符串"这个值得引用/地址)
    8、数据类型,类型转换,运算符
    八大基本数据类型
    所有引用数据类型的默认值都是null。
    类型转换:
    • 自动类型转换(隐式类型转换):精确度不发生变化。从取值范围小的向取值范围类型大的转换 / 精确度低的向精确度高的转换。
    • 强制类型转换(显式类型转换):精度会有损失,大小可能发生改变。取值范围大的类型赋给取值范围小的类型时,高精度(double)向低精度赋值(float)
    数据类型转换的5条规则:
     
    1. 基本数据类型中除了boolean类型以外,剩余7种类型可以进行相互转换。
    2. byte -> short -> char -> int -> long -> float ->double (取值范围变大),从前往后是自动类型转换,从后往前是强制类型转换(取值范围小的类型赋给取值范围大的类型是自动类型转换,强制类型转换相反
    3. 对byte、short、char类型赋值的时候,如果没有超出该类型取值范围则可以直接赋值(用数字赋值)
    4. 当对byte、short、char类型进行混合运算时,会自动先转为int类型然后再进行计算
    5. 当多种数据类型进行混合运算时,则先转换为取值范围大的类型,然后再进行计算
    6. 当做减法运算时,必须保证两个操作数都是数值类型
     
    ++和–,前置和后置的区别
    • 前置++:将++编写在变量名称前面,先自身加1,然后再做其他运算(++a)
    • 后置++:将++编写在变量名称后面,先做其他运算,然后再自身加1(a++)
    int a = 6,b = 8; int c = a-- /2; //结果是:a=5,c=3,先算a/2得到c,再a-- int d = --a * b++; //结果是:a=5,b=9,d=40,先算a自减少,a=5,再算a*b等于40,也就是d=40,再算b++ ,b=9
    运算符
    • 优先级别: 算术运算符 > 关系运算符 > 赋值运算符。
    • 扩展赋值运算符(+=,-=,*=,/=,%=)运算时,变量最终的数据类型没有发生改变。
    逻辑运算符:   逻辑与&    逻辑或|    逻辑异或^    逻辑非!   短路与&&    短路或|| 优先级别: 算术运算符 > 关系运算符 > 逻辑运算符
    短路与(&&)和逻辑与(&),短路或(||)和逻辑或(|) 的区别
    • 短路与(&&)和逻辑与(&),都表示并且,两条件都成立为true是才为true,他们之间最大的区别是:(是否需要对条件2进行逻辑判断)   比如:条件1 && 条件2条件1 & 条件2 短路与(&&)条件1为false,则结果直接为false,不需要判断条件2的真假,而逻辑与(&)不管条件1的真假,都需要对条件2进行真假判断 建议使用短路与(&&),可能减少不必要的运算
    • 短路或(||)和逻辑或(|)两条件有一个为true,结果就为true 短路或(||)条件1为true,不需要对条件2进行判断,直接返回true,逻辑或(|),不管条件1如何,都需要对两个条件进行逻辑判断
    9. 循环
      在for循环中,三个表达式都可以省略,但是分号必须编写,否则会出现死循环也叫做无限循环,解决办法:按ctrl + c强行终止程序运行。   switch case表达式中参数值可以是byte、short、int、char,在JDK7.0及以后还可以是String类型,枚举。   当方法是无返回类型时,则可以在方法体中编写return,但是必须编写为return;
     
     
    10. 参数传递
    1. 基本数据类型的参数传递(值传递)
    传递的是真正的值,通过方法改变基本数据类型变量的值,对另一个方法中变量的值没有任何影响,各自变量是相互独立的。 比如main方法中有 int x=10, y=20; 通过调用方法change(x,y)对x、y值进行修改为15和30,但是main中的xy值是不变的。
    1. 引用数据类型作为参数传递(引用传递,地址传递)
    传递的是地址引用,也就数说共用指向同一个对象(指向同一地址空间),当方法对引用数据类型的值修改时,则所有引用的值都 发生修改。
    11. static关键字
    static关键字修饰的属性和方法,叫静态属性/ 方法,有以下特性:
     
    1. static修饰的存储在方法区(共享区)中,并且所有对象都可以访问
    2. 与类同生死,也就是说类存在(类在内存中存在)时static修饰的属性就存在
    3. 可以使用类名.属性名称,也可以使用引用名称.属性名称()对象.属性)
    4. 类优先于对象,也就是说类的生命周期比较长
    5. 静态方法中只能访问静态属性,静态属性/方法在类加载的时候,就已经分配内存空间了,非静态方法要实例化对象后才分配内存空间。 注意:当创建类的对象后,将对象的值赋为null时,也可以访问静态属性/方法,不会出现空指针异常,只是不能访问对象中的变量,但是能够访问共享区中的变量【当创建对象之后,static属性就存在】
     
    12. 封装、继承、多态
    封装:   通过private隐藏类的内部信息,不允许外部程序直接访问,而是通过方法进行操作。   一个类中,当局部变量和成员变量同名时,并且访问成员变量则必须使用this。(this表示当前这个对象,也就是说当前谁调用这个方法,则这个对象就是谁,this调用先在子类中找,找到调用,没找到再去父类中找)
    继承:   继承就是如果多个类有相同的属性和方法,就单独抽取出来,编写为一个类(父类),然后其他类(子类)继承这个父类,并添加自己独有的属性和方法。
      继承的好处:减少代码的冗余性(重复性)   继承的注意事项:
     
    1. 当一个类没有指名继承具体哪个父类时,则默认继承object【Object类是所有类的父类(超类)】
    2. 子类继承父类,但是不能继承父类的构造方法,只能够调用
    3. 继承满足is a关系。(如:猫 是 动物,西瓜 是 水果)
    4. java中只支持单继承(也就是类的单根性)
    5. 子类继承父类的时候,子类必须调用父类的构造函数。(如果父类没有重写构造方法,就默认无参构造方法,子类默认调用无参,如果父类重写构造函数没有无参构造函数,子类必须调用父类的无参构造函数)
    6. 关于私有成员变量的问题:*无论父类中的成员变量是私有的、公共的、还是其它类型的,子类都会拥有父类中的这些成员变量。*但是父类中的私有成员变量,无法在子类中直接访问,必须通过从父类中继承得到的非private方法(如getter、setter方法)来访问。
    7. 关于被子类覆盖的成员变量:无论父类中的成员变量是否被子类覆盖,子类都会拥有父类中的这些成员变量。
    8. 关于静态成员变量:无论父类中的成员变量是静态的、还是非静态的,子类都会拥有父类中的这些成员变量。 总之,子类除了不继承父类的构造方法之外,拥有父类的一切。
     
    多态:   多态是同一个行为具有多个不同表现形式或形态的能力。(多个对象调用同一个方法,得到不同的结果,就是覆盖重写方法)   多态的语法格式:父类类名 引用名称 = new 子类类名(); 多态调用时,该引用名称只能访问父类中的属性和方法【不能访问子类中的属性和方法】,但是优先访问子类重写以后的方法
    多态存在的三个必要条件: 1. 子类必须继承父类   2. 子类重写父类的方法(override也叫做覆盖)   3. 父类引用指向子类对象 父类类名 引用名称 = new 子类类名();
    关于重写(覆盖override)满足的条件:(就是方法的所有都要和父类的一致)
    1. 子类方法名称必须与父类方法名称一致
    2. 参数列表要一致
    3. 返回类型一致或父类方法返回类型的子类类型
    4. 修饰符不能缩小范围
     
    使用多态实例化子类时的注意事项:【***】
     
    1. 先执行父类的构造方法,然后再执行子类的相匹配构造方法
    2. 如果子类构造方法中没有指明则默认调用父类无参构造方法()默认super())
    3. 如果子类构造方法中指明调用父类哪个构造方法,则先执行父类相匹配的构造方法,然后再执行子类相匹配构造方法
    建议:当手动编写构造方法时,先编写无参构造方法,再编写所需要的构造方法,父类都要写无参构造方法,子类构造方法会默认调用super()父类无参构造方法
    多态中的两种类型转换
    1. 向上转型【子类—>父类】也叫做自动类型转换。父类类型 引用名称 = new 子类类名();
    2. 向下转型【父类 --> 子类】,也叫做强制类型转换。
    进行向下转型时,建议先进行类型判断,通过instanceof关键字,否则可能出现类型转换异常java.lang.ClassCastException
    重载和重写
    方法的重载和重写都是实现多态的方式,区别在于重载实现的是编译时的多态性,而重写实现的是运行时的多态性。   所谓的重载是编译时多态性,就是根据实际的参数列表,在编译的时候就能够确定执行重载方法中的哪一个了。   所谓的重写是运行时多态性,就比如父类对象引用子类实例时,调用方法只有在运行时才知道到底执行了哪个方法。 重载发生在一个类中同名的方法如果有不同的参数列表( 参数类型不同、参数个数不同或者二者都不同)则视为重载;(重载对返回类型没有特殊的要求,只考虑参数列表) 重写发生在子类与父类之间(需要继承),重写要求子类被重写方法与父类被重写方法有相同的返回类型,比父类被重写方法更好访问,不能比父类被重写方法声明更多的异常( 里氏代换原则)。
     
  • 相关阅读:
    嵌入式系统移植三部曲 王晓峰
    嵌入式系统移植三部曲 李炎朔
    ser and client.c 王晓峰
    李炎朔 编程分析
    嵌入式系统移植三步曲 赵晓晓
    嵌入式系统移植三步曲 孟明明
    现在 搞技术确实越来越不值钱了
    Linux C局域网通信程序 刘志卿
    Firefox全面兼容中国银联“在线支付”
    Linux常识型试题
  • 原文地址:https://www.cnblogs.com/lcywuwuwu/p/14035735.html
Copyright © 2011-2022 走看看