zoukankan      html  css  js  c++  java
  • JAVA学习笔记(一)

    JDK :给Java开发人员使用的工具包,包括Java的开发工具,也包括JRE。其中开发工具中包括编译工具(javac.exe)、运行工具(java.exe)、打包工具(jar.exe)等。
    JRE :Java的运行环境,包括Java虚拟机和Java程序运行所需的核心类库。
    JVM :Java虚拟机。
    两者之间的关系:
    JDK=JRE+开发工具
    JRE=JVM+核心类库

    JAVA配置jdk环境变量
    JAVA_HOME C:Program FilesJavajdk1.7.0_21
    Path %JAVA_HOME%in;

    使用jar包时要这样使用“ java –cp test.jar Test”
    记住Java程序中很容易犯的第一个错误:java.lang.NoClassDefFoundError
    – 初学者经常会遇到这个错误,而遇到这个错误,99.9%的情况,是因为你在CLASSPATH中忘
    掉了需要的jar包
    – 所以,遇到这个错误,回头去找齐你所有的jar包,然后再到java社区去问问题

    关键字中所有字母都为小写;
    Java的命名规范:
    包名:多单词组成时所有字母都小写,域名倒着写(com.***.www)
    类名接口名:多单词组成时,所有单词首字母大写
    变量名和函数名:多单词组成时,第一个单词首字母小写,第二个单词开始每个单词首字母大写
    常量名:所有字母都大写,多单词时每个单词用下划线连接

    Java数据类型:
    byte 1个字节 (8位) -2^7------2^7-1 =-128 到127
    short 短整型 2个字节 (16位) -2^15------2^15-1 3W多
    int 整型 4个字节(32位) -2^31------2^31-1 上亿
    long 长整型 8个字节(64位) -2^63------2^63-1 (后面加L)
    float 4个字节 (32位) 单精度(后面加f)
    double 8个字节(64位) 双精度
    char 2个字节
    boolean 1个字节 true false
    强制类型转换:(byte)(a+10)--将a+10强制转换为byte
    字符与数字计算会转化为ASCII码数字与数字计算
    switch函数表达式中,java 1.6(包括)以前,只是支持等价成int 基本类型的数据:byte ,short,char,int(其他的都不可以)。1.7加入的新特性可以支持String类型的数据。
    方法(函数):
    注意:
    1)方法不能定义在另一个方法里
    2)方法可以调用另一个方法
    3)方法没有返回值就不用写return 方法的声明要写void ,有就写return
    4)方法不调用不执行
    方法命名规则:如果是一个单词要全部小写,如果是二个单词,第二个单词首字母大写
    什么是重载:在同一个类中,如果方法名相同,参数的类型及参数的个数不同即可,注意与返回值无关。

    内存分析:
    栈(stack)内存:用于存储局部变量,当数据使用完,所占空间会自动释放。方法运行时调入栈内存中,不再使用时,只删除栈内存中的方法,方法区内的方法依然保留。
    堆(heap)内存:数组和对象,通过new建立的实例都放在堆内存中;每一个实体都有内存地址值;实体中的变量都有默认初始化值;实体不再被使用,会在不确定的时间内被垃圾回收器回收,存储全局变量。
    方法区(数据区):用于存放方法,分为静态方法区和非静态方法区。

    注意:int [][] arr= new int[10][];一维必须有值才能正确建立二维数组。

    数组的特点:
    1)创建时就给定大小(可以给0但,用打印或赋值时会报运行时错)
    2)数组初始值: int型默认0 float型默认0.0f boolean 型默认false
    char型默认’u0000’ 相于当 ‘ ’(空字符)
    3)数组有下标,且从0开始
    4)得到数组大小的属性:数组名.length

    求最大值:
    int maxElement = a[0];
    for (int x = 1; x < a.length; x++) {
    if (a[x] > maxElement) {
    maxElement = a[x];
    }
    }
    return maxElement;
    选择排序:
    for (int i = 0; i < arr.length - 1; i++) {
    for (int j = i + 1; j < arr.length; j++) {
    if (arr[i] > arr[j]) {
    int min = arr[j];
    arr[j] = arr[i];
    arr[i] = min;
    }
    }

    冒泡排序:
    for(int i=0;i<arr.length-1;i++){ //控制比较的次数 -1: 因为是二二比较,比较的次数比数组长度要小1
    for(int j=0;j<arr.length-1-i;j++){//-1:因为是二二比较;-i: 每比较一次,最后值一定是在最后面的,所以最大值就不用比较了。
    if(arr[j]>arr[j+1]){//小的放前面,大的放后面
    int temp=arr[j+1];
    arr[j+1]=arr[j];
    arr[j]=temp;
    }
    }
    二分查找法:
    int min=0;
    int max=arr.length-1;
    int mid = (min+max)/2;
    while(arr[mid] != key){
    if(key>arr[mid]){
    min=mid+1;
    }
    else if(key< arr[mid]){
    max=mid-1;
    }
    if(max<min){
    return -1;
    }
    mid=(max+min)/2;
    }
    return mid;

    数组的排序:
    Arrays.sort()方法:对数组进行从小到大排序,需要引入包 java.util.Arrays
    数组的查找:
    java.util.Arrays.binarySearch(object [] arr ,object key)//一个是数组 一个是要查的数
    有返回值: 如果找到返回下标,没找到返回-1
    注意:此方法底层用的是二分查找法(折半查找法),所以用此方法之前先排序
    数组的拷贝:
    Java.lang.System.arraycopy(源数组名,源数组起始位置,目标数组,目标数组插入位置,要拷贝的长度)
    没返回值
    注意:如:源数组里有6个,我们要拷贝出7个到目标数组,就会数组下标越界异常。

    面向过程:
    每一步都由我们自已亲自去完成,缺点,效率低,不容易维护,复用性差

    面向对象的特点:使复杂的事件变简单
    由执行者变成了指挥者
    效率高,容易维护,复用性好。

    注意:类名.方法名()
    对象名.方法名()的区别?

    类名.方法名() 方法名加了static
    对象名.方法名() 方法名没加static
    一个类文件可以有多个类,但是类文件名所对应的类前面必须是public,一个类只有一个类名是public的
    一个类中没有main()方法是可以的,但是不能被JVM所调用。

    注:
    类名 变量名 = new 类名 ();
    变量名 =null;
    变量名.属性=值。
    变量名.方法(); 会报空指针异常

    局部变量和全局变量的区别?
    1.全局变量定在类中,整个类都可以用
    局部变量定义在方法中,代码块中,语句中,只有所属的区域有效
    2.全局变量存在堆(heap)中,局部变量存在于栈(stack)中
    3.全局变量随着对象的创建而存在,随着对象的消失而消失。
    局部变量随着所属区域执行而存在,执行结束而消失。
    4.全局变量都是有默认初始值的,不给值能用
    局部变量没有默认初始值的,不给值不能用

    局部变量与全局变量重名
    重名先在所在区域中找变量,如果所在区域没有去全局中找,如果都有就用所在区域中的变量

    类类型(引用型)当参数:对象中的属性相同我们可以把他们共同的属性写在一个方法里

    匿名对象:没有名字的对象 new Ren();
    匿名对象特点:如果这个对象里的方法或属性,只被调用一次,那么就可以用匿名对象它主要的功能是为了简化程序员书写代码。

    基本数据类型当参数:方法的参数是一个数值
    引用数据类型当参数:方法的参数是一个地址

    Java权限访问修饰符
    1.public:公共权限 修饰类、属性、方法。可以被任意类访问。
    2.protected:受保护的权限 修饰属性、方法。可以被同包类访问,如果不是同包类,必须是该类的子类才可以访问。
    3.default:同包权限 修饰类、属性、方法。 只能被同包类访问。
    4.private:私有权限 修饰属性、方法。 只能在本类中访问。

    封装:是指隐藏对象的属性和实现细节,仅对外提供公共访问方式。
    好处:将变化隔离、便于使用、提高重用性、提高安全性。
    封装原则:将不需要对外提供的内容都隐藏起来,把属性都隐藏,提供公共方法对其访问。
    封装主要使用private
    用Myeclipse来写set() get()
    在类右键-----》source---> getters and setters
    注意:private私有是封装的一种体现,私有是封装,但封装不单单指的是私有。

    构造方法是干嘛用的?
    是为了创建对象用的。
    构造方法的分类?
    默认构造方法和自定义构造方法
    构造方法特点:
    类名和方法名相同,访问权限修饰符和类的访问权限修饰符相同(可省略)。
    构造方法没有返回值,且不用void 。
    默认构造方法和自定义构造方法的区别?
    1)默认构造方法是无参的。自定义构造方法是有参的。
    2)自定义构造方法可以有多个,多个构造方法是以重载的形式存在的,
    默认构造方法只有一个。
    3)默认构造方法在类中默认(不写)存在。
    4)类中如果有自定义构造方法,但不写出默认构造方法,那默认构造方法就消失。

    什么时候用自定义构造方法?
    在创建对象时,想让对象一创建出来就带有一些指定的值,用自定义构造方法。
    如果带默认值用默认构造方法。

    构造方法和普通方法的区别?
    1.构造方法:对象创建时,就会自动构造方法,对类进行初始化。
    普通方法:对象创建后,才能调用普通方法
    2.对象创建时,构造方法只会调用一次
    普通方法:对象创建后,可以被调用多次
    注意:构造方法和赋值方法不冲突

    this:代表当前对象
    this如何用?
    1.当参数名和全局变量相同时,在赋值时用this!!!!!!(必须),
    2.对象调用属性时用this(不是必须,可省略)
    3.对象调用方法时用this(不是必须,可省略)
    4.默认构造方法调用自定义构造方法: Book3(,,)
    1)默认构造方法中this(,,),必须放在当前构造方法的第一行
    2)自定义构造方法调用默认构造方法 Book3()
    自定义构造方法this(),必须放在当前构造方法的第一行
    注意:用this在调用构造方法时,不要出现死循环。

    static : 静态的。可以修饰属性,方法,代码块。
    属性:
    1)通过类名.属性名
    2)被所有对象共享
    方法:通过类名.方法名 -----》对象名.方法名()
    代码块:在类加载时就执行,且执行一次
    静态代码块 > 构造代码块 > 构造方法

    static代码块
    随着类的加载而加载,只执行一次
    用于给类进行初始化
    构造代码块(构造方法给对象初始化)
    { }
    static代码块和构造代码块同时出现时优先级
    静态代码块>构造代码块>构造方法
    static使用时间:
    static修饰属性:这个属性如果被所有对象共享。
    static修饰方法:该方法是访问对象中的静态变量的。

    static方法只能访问static变量;非static方法能访问static和非static变量。
    static方法不能使用this关键字,局部变量不能用static来修饰。

    非静态变量和静态变量的区别?
    二个变量的生存周期不同
      非静态变量随着对象的创建而存在,随着对象的回收而释放
      静态变量随着类的加载而存在,随着类的消失而消失
    调用方式不同
      非静态变量只能被对象调用
      静态变量可以被对象,还可以被类调用
    别名不同
      非静态变量称为实例变量
      静态变量称为类变量
    数据存储位置不同
      非静态变量存储在堆内存的对象中,也称为对象的特有数据
      静态变量数据存储在方法区(数据区)的静态区中

  • 相关阅读:
    Anaconda设置虚拟环境并打包exe
    [转]Anaconda, conda, pyenv, virtualenv的区别
    [闲记]2020-2-13
    集合笔记
    Python_列表(list)
    LeetCode 1711. 大餐计数 做题小结
    LeetCode 242. 有效的字母异位词 做题小结
    GitHub Actions教程 使用selenium自动化
    LeetCode 5641. 卡车上的最大单元数 做题小结
    git 批量删除文件夹和文件
  • 原文地址:https://www.cnblogs.com/lm970585581/p/6844782.html
Copyright © 2011-2022 走看看