• Java包(访问修饰符的范围)、String字符串、StringBuilder类、基本类型和引用类型


    包:是Java对类进行组织管理、划分类命名空间的机制,解决类名冲突问题

    包的优点:

      分类管理类,便于类的查找与使用

      通过访问修饰符,可以对数据安全性进行管理

    包名:纯小写(域名.项目名.模块名······)点代表文件夹分层,每个点分开的都是文件夹,系统会自动生成

    包的声明:new——package

    包的使用:

      Java默认情况下访问Java.lang包中的数据

      访问Java.lang包以外的数据需要导入该包

      使用import包名.*导入包中所有数据

      使用import包名.类名导入保重指定的类型

    访问修饰符的范围:

      默认不加任何修饰符是当前包中可以访问

      public 表示项目中所有地方都能访问

      protected 表示当前包和子类(不管在不在本包中)中都能访问

      private 表示仅在当前类中

    a包中要调用b包中的数据

    a包中

    packa com.igeek.a;
    import com.igeek.b.ClassB;
    public class ClassA{
      public void methodA(){
        //将B类进行实例化,因为B类在b包中,所以要导入
        ClassB classB=new ClassB();
        //调用classB对象中的methodB
        classB.methodB();
      }
    }

    b包中

    package com.igeek.b;
      public class Class{
      int a;//默认
      public int b;//public在项目中都能访问
      protected int c;//protected在当前包中和子类都允许访问
      pricate int d;//private 仅在当前类中允许访问
        public void methodB(){
      }
    }

    String字符串:

    String类型:字符串是由多个单字符构成的类型

    public void Demo{
      public static void main(String[] args){
        //直接创建字符串
        String s1="hellogeekhome";
        //创建对象的方式创建字符串
        String s2=new String("hellogeekhome");
        //字符串连接的方式创建字符串
        String s3="hello"+"geekhome";
        //和S2同样的方式
        String s4=new String("hellogeekhome");
    
        //进行比较
        System.out.println(s1==s2);
        System.out.println(s1==s3);
        System.out.println(s2==s3);
        System.out.println(s2==s4);
      }
    }

    s1和s3都是方法区中常量池内的值,s2和s4都是在堆中创建出来的对象

    ==对比的是地址,所以只要地址不同,字符串比较的结果就是错误的

    s1==s2:fault,因为1是在方法区中,2实在堆中
    s1==s3:true,因为1和3都是常量池中的数据,且字符串就是单个字符连接的,所以即使是连接的方式创建字符串地址也是相同的
    s2==s3:fault,和1与3比较的原因相同
    s2==s4:fault,虽然两者都是通过创建对象的方法进行创建字符串,且都是存储在堆中,但是每次创建新对象结果都是不同的,所以对象的地址是不同的

     获得字符串的长度:length()  返回值为int

    判断字符串是否相等:equals()  返回值为boolean

              equalsIgnoreCase()    不区分大小写,返回值为boolean

    统一字符大小写:

      统一大写:toLowerCase

      统一小写:toUpperCase

    判断字符是否相同的例子

    String course1="Java";
    Stringcourse2="JAVA"//直接进行比较会因为大小写得到结果为false
    course1.equals(course2)
    //用忽略大小写的方法得到结果为true
    course1.equalsIgnoreCase(course2)
    //将两个字符都进行统一大小写得到结果为true
    course1=course1.toLowerCase;
    course2=course2.toLowerCase;
    course1.equals(course2)

    判断字符串是否以指定内容开头:startWith(String)  返回值为boolean

    判断字符串是否以指定内容结尾:endsWith(String)  返回值为boolean

    prefix参数中的字符串在将来可以写入正则表达式规则

    字符串检索的相关方法:

      indexOf(String):检索内容在源字符串的索引位置(只会查到第一个出现改内容的位置)

      indexOf(String,int):从指定索引检索内容在源字符串中索引位置

      lastIndexOf(String):从源字符串末端检索内容的索引(该索引还是从前往后开始数的)

      charAt(int):检索指定索引对应的字符

    字符串修改的相关方法:

      subString(int):从指定位置截取至随后

      subString(int,int):从起始索引截取至结束索引  //结束的索引都是至截取到这个位置为止,不包含该索引

      trim:去除字符串首尾的空格

      replaceAll(String,String):对字符串内容进行替换(第一个参数是需要替换的,第二个是要替换成的内容)

    通过索引查询字符,通过字符查找索引

    String s="hellogeekhome";
    //结果是8
    int index=s.indexOf("k");
    //结果是0
    int index=s.indexOf("h");
    //结果是6:因为查的位置是在源字符串中的位置
    int index2=s.indexOf("e",3);
    //结果是9
    int index3=s.lastIndexOf("h");
    //结果是G
    char ch=s.charAt(5);

    将字符串的字符一个个打印出来

    for(int i=0;i<s.length;i++){
      System.out.println(s.charAt(i));
    }

    验证输入的用户名只能由字母构成

    Scanner sc=new Scanner(System.in);
    Sys.out.println("请输入用户名:");
    String name=sc.next();
    for(int i=0;i<name.length();i++){
      char ch=name.charAt(i);
      //a=97,z=122;A=65,B=90
      if(!(ch>='a'&&ch<='z')||!(ch>='A'&&ch<='Z')){
        System.out.println("用户名输入非法,只能由字母构成!")
      }
    }

    截取字符串

    String s="helloGeekhome";
    //得到Geekhome
    s=s.subString(5);
    //得到loG
    s.subString(3,6);

    输入一个邮箱地址,如tom@qq.com,要求打印显示邮箱用户名和邮箱类型

    String email="jack@qq.com";
    //截取名字,同时确定位置并截取,截取到@不包括此索引
    String name=email.subString(0,email.indexOf("@"));
    //截取邮箱类型,从@符的后一位开始截取,截至最后一位
    String emailaName=email.subString(email.indexOf("@")+1)

    例子:编写一个方法用来判断字符串(source)中是否多次出现所查的字符串(searchStr)

    两种方法:

      方法一:第二次查找是从第一次查找到的地方进行查找

      方法二:分别从头、从尾开始查找

    //查找是否出现第二次的方法
    public boolean validateDouble(String source,String searchStr){
      //查找有没有出现第一次
      int index=source.indexOf(searchStr);
      //如果出现了第一次则再查第二次
      if(index!=-1){
        //source.indexOf(searchStr,index+1)!=-1表示查找到了第二次
        //第二次从第一次查找到的索引的后一位开始查找
        if(source.indexOf(searchStr,index+1)!=-1){       //如果出现第二次       return true;     }   }   //如果没有出现第二次   return false; }
    //查找是否出现第二次的方法
    public boolean validateDouble(String source,String searchStr){
      //从头开始查找第一次出现的位置
      int index=source.indexOf(searchStr);
      //从尾开始查找第一次出现的位置
      int index1=source.lastIndexOf(searchStr)
      //如果从头和从尾查到的位置是一样的,则只出现了一次
      if(index==index1){
        return false;
      }
      //如果从头和从尾查到的位置不一样,则出现了至少两次
      else{
        return true;
      }
    }

    StringBuilder类:是一个可变的字符串

    StringBuilder的值将会再缓冲区内进行修改

    StringBuilder与String的方法几乎相同(不同的地方就在StringBuilder能够对字符串进行修改:追加、插入、删除、替换)

    StringBuilder与String可相互转换

    StringBuilder是非线程安全(非线程安全性能较高)

    StringBuffer是线程安全(线程安全性能较低)

    创建StringBuilder:创建StringBuilder的过程就是将字符串转换成StringBuilder的过程

    StringBuilder str=new StringBuilder(String);

    public static void main(System[] args){
      //创建StringBuilder   StringBuilder str
    =new StringBuilder("hello");   System.out.peintln(str); }

    StringBuilder的toString()方法可以转换为String,java中的所有类型都可以通过toString()方法转换成字符串

    String s=str.toString();

    StringBuilder和String不同的方法:

    追加内容:str.append(string);

    插入内容:str.insert(index,string);

    删除内容:str.delete(startIndex,endIndex);

    根据指定的索引范围替换内容:str.replace(startIndex,endIndex,str);

    StringBuilder str=new StringBuilder("hello");
    //再末尾添加新字符串
    //hellogeekhome
    str.append("geekhome");
    //第一个参数表示插入的位置,第二个参数表示插入的内容
    //hXellogeekhome
    str.insert(1,"X");
    //第一个参数表示删除开始的位置,第二个参数表示删除结束的位置,不包含该索引自身
    //hllogeekhome
    str.delete(1,3);
    //第一个参数是替换开始的位置,第二个参数是替换结束的位置(不包含该位置),第三个参数是需要替换成的内容
    //abclogeekhome
    str.replace(0,2,"abc");

    基本类型和引用类型的区别:

    1.基本类型再传递时,传递的是对应的值,当传入的基本类型再方法中修改值时,是不会对原变量的值造成影响的

    2.引用类型再传递时,传递的是其对象地址,因此再方法中对传入的引用类型数据进行变更时,将会对原数据造成影响

     例子:

    User类

    public class User{
      String name="tom";
    }

    带有方法的Demo类

    public class Demo{
      public void method1(int a,int b){
        int c=a;
        a=b;
        b=c;
      }
      public void method2(User user){
        user.name="jack";
      }
      public void method3(StringBuilder a,StringBuilder b,StringBuilder c){
        //将a原值添加了A(a=AA;b=B;c=C)     a.append(
    "A");
        //将b换了个新对象,原b对象不动(a=AA;b=B;新的b=BB;c=C)     b
    =new StringBuilder("BB");
        //将新对象添加了B(a=AA;b=B;新的b=BBB;c=C)     b.append(
    "B");
        //将C重新换了指定的新对象,原c对象不动(a=AA;b=B;新的b=BBB;c=AA)     c
    =a;
        //c现在指定的是a所以是将a添加了C(a=AAC;b=B;新的b=BBB;c=AAC)     c.append(
    "C");   } }

    调用方法:

    public static void main(System[] args){
      Demo demo=new Demo();
      int a=10,b=20;
      demo.method(a.b);
      //打印出来a=10,b=20,虽然调用了方法,但是原值不变
      System.out.println("a是"+a+"b是"+b);
    
      User user=new User();
      System.out.println("修改前名字是:"+user.name);
      demo.method2(user);
      //调用方法后类user类进行修改,姓名原值就发生了改变
      System.out.println("修改后名字是:"+user.name);
    
      //对abc通过调用方法进行修改   StringBuilder a
    =new StringBuilder("A");   StringBuilder b=new StringBuilder("B");   StringBuilder c=new StringBuilder("C");   demo.method3(a,b,c);   System.out.println(a);   System.out.println(b);   System.out.println(c); }

  • 相关阅读:
    Quartz学习——Spring和Quartz集成详解(三)
    Quartz学习——Quartz简单入门Demo(二)
    Quartz学习——Quartz大致介绍(一)
    Quartz学习——SSMM(Spring+SpringMVC+Mybatis+Mysql)和Quartz集成详解(四)
    使用spring+quartz配置多个定时任务
    quartz定时任务时间设置
    Hibernate事务与并发问题处理(乐观锁与悲观锁)
    Oracle体系结构之参数文件管理
    Oracle体系结构之密码文件管理
    LINUX RHEL AS 4 + ORACLE10G安装详解
  • 原文地址:https://www.cnblogs.com/gfl-1112/p/12688778.html
Copyright © 2020-2023  润新知