转载

Java学习笔记

1、读输入

Scanner in=new Scanner(System.in);//in这个对象做读入下一行的操作
System.out.println(in.nextLine());//System.out这个对象打印下一行

2、数组

其中所有的元素都具有相同的数据类型
int []s=new int[maxn];//数组定义  new创建的数组会得到默认的0值 创建maxn个int型数组
int []s={1,2,3,4};//直接初始化数组 可以不用给出大小
有成员函数length可直接使用
    
    数组变量是  !**数组的管理者**!而非数组本身!
    
    数组必须创建出来交给数组变量管理,数组变量之间的赋值是**管理权限**的赋予,
    数组变量之间的比较是判断**是否管理同一个数组**
    eg.   s是有maxn个元素的数组的管理者

3、包裹类型

基础类型       包裹类型
        boolean       Boolean
        char          Character
        int           integer
        double        Double

可以通过包裹类型获取该类型的最大最小值,判断是否是字母什么的 可以有更多的功能扩展

4、Math类

Math.abs(-12);//12
    Math.pow(2,3);//8.0 浮点运算
    Math.random();//生成0~1之间的随机数  可以*100 获取0~100之间的随机数
    Math.round();//四舍五入

5、字符串

字符串变量并不存放字符串,也不是字符串所有者,它是**字符串的管理者**
    Java的字符串是”不可变“对象,所有对字符串的操作都是产生一个新的字符串,
    而不是对原来的字符串进行修改
    
    String的变量是对象的管理者
    eg.    String s=new String("a string");//创建了一个String的对象,并初始化
            //创建了这个对象的管理者s 让s管理这个对象
    输入字符串,in.next;//读入一个单词,以空格为界  in.nextLine();读入一整行
    
    字符串的比较:
    if(input=="bye")  比较的是 是否指向的是同一个String对象 很大可能return false
                       因为input和"bye"是两个不同的字符串
    if(input.equals("bye") 才是比较内容是否相同
    
    对字符串的操作:
    s.charAt(index);//返回在index上的单个字符 0~length()-1
    //注意 不能用for-each循环来遍历字符串  for(char c:s){}不行
    //for-each只适合于数组或者可枚举类型
    s.substring(n);//得到从n号位置到末尾的全部内容
    s.substring(b,e);//b号位置到e号位置之前的内容 左闭右开
    s.indexOf(c);//得到c字符所在位置,-1表示不存在
    s.indexOf(c,n);//从n号位置开始找
    s.indexOf(t);//找到字符串t所在位置 返回值为子串开始的index
    s.lastIndexOf();//从右边开始找
    
    eg.要找一个串中的第二个3  String s="0123453";
       int loc=s.indexOf('3');
       s.indexOf('3',loc+1);
    
    s.startsWith(t);//s是否是以字符串t开头的
    s.endsWith(t);
    s.trim();//把字符串两端的空格删掉
    s.replace(c1,c2);//所有的c1换成c2
    s.toLowerCase();//所有字符都变成小写
    s.toUpperCase();

6、 本地变量不会被自动初始化 有可能会报错,所以要记得初始化

本地变量:定义在函数内部,作用域和生存期都在函数内部,
而成员变量(自动初始化为0或null)的生存期是对象的生存期,作用域是类内部的成员函数

7、类和对象

VendingMachine v=new VendingMachine();//对象变量是对象的管理者

Java学习笔记

v.insertMoney()中使用的成员变量是v的成员变量实际上**是通过this实现的**

this:

this是成员函数的一个特殊的固有的**本地变量**,它表达了调用这个函数的 **那个对象**
在成员函数内部直接调用自己的其他函数,也可以通过this来实现(通常会省略)

一个类的成员变量可以是其他类的对象

8、封装:把数据和对数据的操作放在一起,并且用这些操作把数据掩盖起来 (面向对象核心概念)

直接手段:
    类的所有成员变量必须是private的
    所有的public的函数,只是用来实现这个类对象或类自己要提供的服务的,而不是用来直接访问数据。

private(类所私有的)只能用于成员变量和成员函数:

public class Display{
    private int num;
    private int getValue(){    };//不可以在getValue函数中定义变量的时候使用private
}

注意:

  • 只有这个 类内部(类的成员函数和定义初始化) 可以访问
  • 这个限制是对类的,而不是对对象的
    //private定义的变量,限制其他类的对象访问本类对象的这个变量,但不限制本类的其他对象访问奔雷的private数据
public class Fraction{
    private int a;
    private int b;
    public Fraction plus(Fraction r)
    {
        int fenzi=a*r.b+r.a*b;//这个完全可以实现哦,因为private的限制不是对对象的,他们都在Fraction类里
        int fenmu=b*r.b;
        return new Fraction(fenzi,fenmu);
    }
}

9、包

10、类变量和类函数

  • 类是描述,对象是实体
  • 在类中所描述的成员变量,实际上是位于这个类的 各自的对象 中的
  • 但是如果某个成员由static关键字修饰,它就变成了属于 整个类 的了
  • 每个对象都可以访问到这些类变量和类函数并且可以 直接通过名字调用
  • 类函数不属于任何对象,无法建立与调用他们的对象的关系,也就不能直接访问任何非static的成员变量和成员函数,必须要 通过对象进行调用
  • this表示当前本对象,类函数和对象没有任何关系,所以 类函数没有this
  • 通过一个类的对象对static变量进行了修改,那么其他对象中的这个变量的值也都被修改了,因为这个变量是类的,而不是单独某一个对象的
  • 可以通过 类.static型变量 对该变量进行访问
  • static变量只能被初始化一次,在第一次类的装载的时候被初始化

11、对象容器

究竟把什么放进容器里了?对象的管理者.

泛型类:eg. ArrayList 这种泛型类是一种容器

无限放东西,计算机有容量就能一直放,数组无法实现,要用容器实现

容器类有两个类型:容器的类型(ArrayList)、元素的类型(String)

import java,util.ArrayList;
public class NoteBook{
    private ArrayList<String> notes=new ArrayList<String> ();
    //ArrayList类中常用成员函数
    //notes.add(s);  notes(location,s);//把s放在原来location前面,即放在location位置,原来location位置以后的东西顺序后移
    //notes.size();
    //notes.remove(index);
    //notes.toArray(a);//把这个ArrayList里的元素都复制到a数组中,然后进行输出
}

12、对象数组

当数组的元素的类型是类的时候,数组的每一个元素都只是对象的管理者而非对象本身,

仅仅创建数组并不意味着创建了其中的每一个对象,String[] a=new String[10],此时对象还没有创建出来,如果是int,则会产生a[0]=0;

for-each循环

for(int k:ia){  k++;  }//没有任何用,因为这里的k只是原数组的复制品
对于对象数组却有所不同
因为 数组管理的那块东西 和 for-each循环里那个东西管理的 是同一个东西,会实现修改

13、集合容器

原文  https://segmentfault.com/a/1190000019421263
正文到此结束
Loading...