2020.8.6_Java学习日记

数据类型 
    1.java 没有任何无符号(unsigned)形式的int、long、short、或byte类型。
常量
    2.关键字final这个变量只能被赋值一次,一旦赋值之后就不能再更改了,习惯上,常量名使用全是大写。参考C++中的const。
        而const是java保留的关键字,但是不免并没有使用,再java中,必须使用final来定义常量,如果希望某个常量可以在一个类的多个方法中只用,通常将这些常量称为:类常量,使用关键字static final来设置一个类常量。
        类常量的定义位于main方法的外部,所以在一个类的其他方法中也可以使用这个常量。
 
运算符:
    1.java中,没有幂运算,因此需要借助Math类的pow方法。
字符串
    2.Java类标准库中提供了一个预定义字符串类,叫做String,每个用双引号括起来的字符串都是String类的一个实例。

    3.String类的substring方法可以从一个较大的字符串中提取出一个子串。
        String greeting="hello";
        String s=greeting.substring(0,3); 
        ===>  hel
    4.java中可以使用"+"来实现字符串的拼接。
    5.使用equls方法来检测字符串是否相等 
        s.equls(t),返回值为true或false
        检测是否相等而不区分大小写可以使用equlsIgnoreCase方法
    6.空串""长度为0,null串表示目前没有任何对象与该变量关联
    7.String API(核心技术卷I第50页)

输入输出
    1.要想通过控制台进行输入,首先需要构造一个Scanner对象,并与“标准输入流”System.in关联
        Scanner in=new Scanner(System.in);
        int age = in.next();
控制流程
    1.与C++不同,java提供了一种带标签的break语句,用于跳出多重嵌套的循环语句。(有点像goto)
*/
/*
8.04
数组
    1. int a[]; 这个语句只是声明了变量a,若要将a初始化为一个真正的数组,需要int[] a =new int[100];
    2. 若要实现指定数组大小并进行输入:
        int n = in.nextInt();
        int[] a = new int[n];
        for (int i:a) {
            System.out.printf("input a[%d]", i);
            a[i] = in.nextInt();    
        }
    3.java中一种功能很强的循环结构,用来依次处理数组中的每个元素,不必指定下标值。 (其实和C++中的一样)  
        for(int element :a)
            System.out.println(element);
    4.java数组与C++中的指针数组int *p[n]一样,
        int[] a=new int[100]; ->java 
        int* a=new int[100];->C++     二者等同
    
    5.在Java应用程序的main方法中,程序名并没有存储在args数组中,
        例如:java Message -h world
        其中的args[0]是“-h”而不是“Message”或者"Java"
    
    6.数组排序,使用Arrays类中的sort方法。
*/
/*
8.05
Arrays类的几个常用方法
    1.toString 返回数组中数据元素的字符串
    2.copyOfRange 返回与a类型相同的一个数组
    3.sort 快排
    4.BinarySearch 二分查找值V
    5.fill 将数组所有元素值设为v
    6.equals 两数组是否相等,bool
多为数组与不规则数组:
    Java中其实没有多维数组,因为Java中的一维数组其实是指针数组,多维数组就可以理解为数组的数组。

对象与类
    1. 如果将一个方法应用于一个值为null的对象上,会产生运行时错误,局部变量不会自动初始化为Null,
        必须通过调用new或者将它们设置为null进行初始化。
        Date birthday=new Date();
        birthday= null;
        String s= birthday.toString();//err 
    2.Java对象变量与C++的引用类似,但是C++中没有空引用,并且引用不能被赋值,Java对象变量相当于C++的对象指针。
        Date birthday ==> Date* birthday
    3.Java构造器的工作方式与C++一样,但Java对象是在堆中构造的,而且构造器总是伴随着new操作符一起使用。
    
    4.构造器中不能定义与实例域重名的局部变量
    5.Java允许重载任何方法,并不只是构造器方法,因此,要完整描述一个方法,就需要指出方法名以及参数类型,
        这就叫做方法的签名。
    
    6.变量的分类:成员变量与局部变量
        a.在方法体外,类体内声明的变量称为成员变量。
        b.在方法体内部声明的变量称为局部变量。
            成员变量:1.实例变量(不以static修饰)
                     2.类变量(以static修饰)
*/
/*
继承
    1.Java中,所有的继承都是公有继承,而没有C++中的私有继承和保护继承  
*/
 
变量的分类:成员变量与局部变量
        a.在方法体外,类体内声明的变量称为成员变量。
        b.在方法体内部声明的变量称为局部变量。
            成员变量:1.实例变量(不以static修饰)
                        2.类变量(以static修饰)
 局部变量:1.形参 2.方法局部变量 3.代码块局部变量
 
成员变量与局部变量的区别
成员变量
  1. 成员变量定义在类中,整个类都可以被访问
  2. 成员变量分类类成员变量和实例成员变量,实例变量存在于对象所在的堆内存中。
  3. 成员变量有初始化默认值。
  4. 成员变量的权限修饰符可以根据需要选择任意一个。

局部变量

  1. 局部变量值定义在局部范围内,如:方法内,代码块内等。
  2. 局部变量存在于栈内存中。
  3. 作用的范围结束,变量空间会自动释放。
  4. 局部变量没有默认初始化值,每次必须显式初始化
  5. 局部变量声明时不指定权限修饰符。

匿名对象

  不定义对象的句柄,直接调用这个对象的方法,这样的对象叫做匿名对象。

  如:new Person().showInfo();

    经常将匿名对象作为实参传递给一个方法调用。

类的访问机制

  1.在一个类中的访问机制:类中的方法可以直接访问类中的成员变量。(例外:static方法访问非static的成员变量,编译不通过。)

   2.在不同类中的访问机制:先创建要访问类的对象,再用对象访问类中定义的成员。

面向对象思想“落地”法则之一

  1. 关注类的的设计,即设计类的成员:属性、方法。
  2. 类的实例化,即创建类的对象。
  3. 通过“对象.属性”、“对象.方法” 执行。

方法的重载

在同一个类中,允许存在一个以上的同名方法,只要它们的参数个数或者参数类型不同即可。

重载的特点:

 与返回值类型无关,只看参数列表,且参数列表必须不同。(参数个数或参数类型),调用时,根据方法参数列表的不同来区别。

方法的可变个数参数:

  用数组的方式来传递可变个数的参数 (String[] args)

  用Java特有的...方式来传递可变个数的参数,这种参数在使用时与数组的使用方式相同。(String ... args)

  注意:日过一个方法有多个的形参,可变的形参(...这种的参数)一定要放在所有的参数最后。

       printInfo(String s,int d,String ... args)

Java的实参值如何传入方法?

  Java里方法的参数传递方式只有一种,值传递。

方法的参数传递

  1. 如果方法的形参是基本数据类型,那么实参(实际的数据)向形参传递参数时,就是直接传递值,把实参的值复制给形参
  2. 如果方法的形参是对象,那么实参(实际的对象),向形参传递参数的时候,也是把值给形参,这个值是实参在栈内存中的值,也就是引用对象在堆内存中的地址

  基本数据类型都是保存在栈内存中,引用对象在栈内存中保存的是也引用对象的地址,那么方法的参数传递是传递值(是变量在栈内存中的值)。

包(package)

  关键字—package,其格式为:package 顶层包名.子包名

  等同于文件夹的概念,包和文件夹一样可以有多级,也就是包下可以有包和文件,多级的包使用的.分隔,例如

  com下的cn的test包,写法就是com.cn.test

信息的隐藏和封装

  Java中通过数据声明为私有的(private),再提供公共(public)方法:getXxx()和setXxx()实现对属性的操作,以实现下述目的:

  1. 隐藏一个类中不需要对外提供的实现细节。
  2. 使用者只能通过实现定制好的方法来访问数据,可以方便的加入控制逻辑,限制对属性的不合理操作。
  3. 便于修改,增强代码的可维护性。

 

posted @ 2020-08-07 08:00  Stephen_A  阅读(141)  评论(0编辑  收藏  举报