四、JAVA基础(个人向)

JAVA基础(个人向)

1.方法的形式参数和返回值问题研究(引用数据类型)

方法的形式参数如果是一个具体类,在调用该方法时,实际参数如何传递呢? 需要创建当前具体类对象进行传递
方法的形式参数如果是一个抽象类,在调用该方法时,实际参数如何传递呢? 需要抽象类多态:创建抽象类的子类对象
方法形式参数如果是一个接口,调用该方法,实际参数如何传递? 需要通过接口多态,定义接口子实现类,通过创建子类类对象

返回值问题:
如果一个方法的返回值是一个具体类,需要返回的? 返回的当前类具体对象
如果方法返回值是一个抽象类:需要返回的是当前抽象类的子类对象
如果方法返回值是一个接口:需要返回的是接口的子实现类对象

2.内部类

  • 内部类:
    成员内部类
    如果成员内部类是一个非静态的,通过外部类直接访问内部类的成员方法?
    外部类名.内部类名 对象名 = 外部类对象.内部类对象;
    外部类名.内部类名 对象名 = new 外部类名.内部类名() ;
    如果成员内部类是静态的,当前内部类的成员方法访问外部类的成员变量,只能访问静态的变量
    局部内部类

3.权限修饰符的优先级

私有修饰符private: 只能在当前类中 (范围最小)
默认修饰符: 在同一个包下/同一个包下子类
protected:受保护的 在同一个包下/同一个包下的子类/不同包下的子类
public:共公开的 任何情况下都访问

4.Object类的toString方法以及equals方法

public String toString():对象的字符串表现形式,结果应该简明扼要,易于读懂的表达式(成员信息表达式)
需要建议子类重写这个方法,否则如果直接输出对象名称,打印出来是一个"地址值",没有意义
Student s = new Student(“文章”,35,“男”) ;
如果不重写Object的toString()
直接输出s---->等价于s.toString()
---->this.getClass().getName()+"@"+Integer.toHexString(this.hashCode())

重写toString()-->alt+ins--->toString()	  类名{[name="文章",age=35,sex="男"]}				

public boolean equals(Object obj)
==和equals
==:如果连接的基本数据类型:比较数据值是否相同
==:如果连接的引用数据类型:比较的是对象的地址值是否相同
Student s1 = new Student(“文章”,35,“男”) ;
Student s2 = new Student(“文章”,35,“男”) ;
s1.equals(s2) ; false
equals:如果不重写Object的equals,它默认比较的是两个对象的地址值是否相同…
return (this == obj) ;

建议子类重写equals方法的同时,还需要重写hashCode()(对象不同,哈希码值是不同的)
alt+ins---->equasl and hashCode()--->idea default
重写之后:s1.equals(s2) ;          true

String类型---底层已经对Object的equals重写了,所以String的equals就比较的是字符串内容是否相同!

5.局部内部类访问局部变量,针对局部变量要求

/*
jdk7版本:
 局部内部类访问局部变量,局部变量此时必须手动显示给出final关键字
 JDK8版本后(包含jdk8)
 此时 局部内部类访问局部变量,局部变量不需要显示给出final,jvm做优化了,通过反编译工具查看局部内部类
  外部类名$内部类名.class
     当前局部变量--->已经加入了final关键字
     
加入final关键字:此时变量是常量
*/

class Outer{
    public void method(){
       //final int num = 20 ;//JDK8以后:不需要加入final   
        class Inner{
            public void show(){
                System.out.println(num) ;//使用num
            }
        }
        Inner inner = new Inner() ;
        inner.show() ;
    }
}
/*
	局部变量随着方法调用而存在,随着方法调用结束而消失,但是当前局部内部类同对象名访问show()方法,
	inner对象不会立即显示,局部内部类中的成员还在使用这个num变量,此时该变量必须为常量,否则就冲突了
*/

6.方法的形式参数和返回值如果是抽象类或者接口,匿名内部类使用

//形式参数是一个抽象类
abstract class Person{
    public abstract void work() ;
}
interface Love{ //接口
    void love() ;
}
class StudentDemo{
   // public void method(Person person){	
      public void method(Love l){
        //person.work() ;
          l.love() ;
    }
}
class Test{
    public static void main(String[] args){
        //创建StudentDemo类对象
        StudentDemo sd  = new StudentDemo() ;
        /*
        sd.method(new Person(){  //抽象类的匿名内部类
            @Override
            public  void work(){
                //....
            }
        }) ;
        */
        sd.method(new Love(){
            public void love(){
                //...
            }
            
        }) ;
    }
}

//返回值问题:也可以使用匿名内部类
//需要在控制台输出"helloworld"
interface Inter{
    void show() ;
}
class Outer{
    
    //补全代码
    public static Inter method(){
        return new Inter(){
           	public void show(){
                System.out.println("helloworld") ;
            } 
        } ;
    }
}
class Test{
    public static void main(String[] args){
        Outer.method().show() ;
        //   Outer.method().show() ;Outer.method()-->具有返回值的方法
    }
}

7.String类

7.1 String类的特点

String:字符串是一个常量,一旦被赋值,其值不能被更改;和StringBuffer最大区别:后者支持可变的字符序列,前者是一个不可变的字符序列
String str = “abc” ;

7.2 String类的equals方法

String类底层已经针对Object的equals和hashCode方法进行了重写
hashCode():String对象的哈希码值是否相同,哈希码值相同的不一定内容就相同,所以它需要覆盖equals方法
比较的字符串内容是否相同.
String s1 = “hello” ;
String s2 = new String(“hello”) ;
s1 ==s2—> false
s1.equals(s2) ---->true

7.3 String类的获取功能

char charAt(int index) {} //返回指定索引处的字符
String[] split(String regex){} //String类的拆分功能,通过特定字符串将字符串—转换成String数组
String concat(String anotherStr){}//字符串类的拼接功能
int indexOf(String str/char ch){} //查询某个字符或者子字符串第一次出现的索引值
int length() {}//获取字符串长度的功能
String subString(int beginIndex){}//从指定位置处默认截取到末尾
String subString(int beginIndex,int endIndex){}//从指定位置截取到指定位置结束(endIndex-1)

7.4 String类型作为引用类型,且为形式参数,其特点

形参的改变不会实际参数—基本类型的效果一致

7.5 String类型的转换功能

编码的过程:将字符串转换成字节数组
byte[] getBytes(){}
解码:String类构造方法
String(byte[] bytes){} //String s = new String(字节数组) ;
将字符串转换成字符数组
char[] toCharArray(){}
将字符数组---->String
方式1:String类的构造方法
String(char[] chs){}
方式2:Arrays:针对数组操作的工具类: 将任何类型的数组(包括对象数组:Object[] )
//Student[] students = new Student[5] ;
public static String toString(int[]/char[]/double[]/float[]/long[]/Object[] a)
Arrays.toString(数组对象)----StringBuffer
StringBuffer(String str)

7.6 String类型的按照字典顺序比较compareTo方法

String类型—内置一个属性: char[] value
1)字符串底层---->字符数组 s1和s2—>转换字符串数组 获取长度 5 和 3
2)通过Math的min方法(5,3) —>获取最小值 int lim = 3 ;
3) 创建两个数组对象 char[] c1 = {‘h’,‘e’,‘l’,‘l’,‘o’}
char[] c2 = {‘h’,‘e’,‘l’} ;
4)判断 定义统计变量 k = 0
while(k < lim){
if(c1[k] != c2[k]){
return 对应的字符值进行相减
return ‘h’ - ‘a’ = 104 - 97 = 7
}

 		k ++ ; //统计变量++
 }
 
 return  字符串的长度相减(字符数组长度相减)

8. StringBuffer

8.1 StringBuffer和StringBuilder的区别

共同点:
两个都都是字符串缓冲区,支持可变的字符序列!
不同点:
StringBuffer:线程安全的类---->同步的(多线程:同步锁:源码几乎所有的方法都是同步方法 synchronized)
执行效率低
StringBuilder:线程不安全的类---->不同步----->执行效率高
单线程程序中,只考虑执行效率不考虑安全,所以StringBuilder类用作StringBuffer的简易替换
多线程环境中,要考虑安全问题只能使用StringBuffer,

线程安全的类:StringBuffer,Vector(List接口的子类)

8.2 StringBuffer和数组的区别

共同点:都是容器,都可以存储任意类型的元素 , 可以存储基本类型,也可以存储引用类型
数组---->同一种类型的元素 长度是固定的
如果需求中长度是不断变化的,那么数组用不了,考虑:StringBuffer/集合

StringBuffer---->存储不同类型的元素 append(int/char/double/Object/foat…) 长度是可变的

借助StringBuffer的功能:reverse()/append()追加----->转换成String形式体现

8.3 StringBuffer常用的一些功能

StringBuffer的反转功能:reverse()
StringBuffer的追加功能:append(xxx)
StringBuffer的删除功能:deleteCharAt(int index)
StringBuffer的截取功能:subString(int bengin,int end)
StringBuffer的截取功能:subString(int bengin)

8.4 Date和String类型转换

//java.util.Date---->String: 格式化操作
//1)创建Date对象
Date date = new Date() ;
//2)创建SimpleDateFormat对象
SimpleDateFormat sdf  = new SimpleDateFormat("yyyy-MM-dd") ;
//3)格式化的操作
String textDate = sdf.foramt(date) ; //使用textDate:日期文本字符串


//String:日期文本字符串----->java.util.Date :解析操作
//1)日期文本字符串
String source = "2021-7-29" ; //格式
//2)创建SimpleDateFormat对象
SimplDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd") ; //模式必须和String的格式一致,否则解析出错
//3)解析操作
Date date2 = sdf2.parse(source) ; //使用Date

8.5 StringBuffer和String转换

//String--->StringBuffer
String s = "hello" ;
//使用StringBuffer的有参构造方法
StringBuffer sb = new StringBuffer(s)
//或者是StringBuffer的追加功能
StringBuffer sb = new StringBuffer() ;
sb.append(s) ;

//StringBuffer--->String
//String类的构造方法 String(StringBuffer)
StringBuffer buffe = new StringBuffer("world") ;
String str = new String(buffer) ;
//第二种方式:StringBuffer的toString方法

8.6 int和String类型之间转换

//int---->String
   //integer类型的静态功能toString
   public static String toString(int i)
       
 //String--->int
  //Integer的静态功能
       public static int parseInt(String s)
       
  //String ---->Integer ---->int
       String s = "100" ;
	  Integer i = new Integer(s) ;
      int num = i.intValue() ;

8.Collection

8.1 Collection集合进行遍历的方式

//两种:
//方式1:将Collection转换成Object[]  toArray(){}
Collection<String> c = new ArrayList<String>() ;
c.add("hello") ;
c.add("javaee") ;
c.add("javaweb") ;

//直接转成对象数组
Object[] objs = c.toArray() ;
//遍历数组
for(int x = 0 ; x < objs.length; x ++){
    System.out.println(objs[x]) ;
}

//方式2:获取Collection的Iterator迭代器(在集合高效的遍历方式)

Collection<String> c2 = new ArrayList<String>() ;
c2.add("hello") ;
c2.add("javaee") ;
c2.add("javaweb") ;

Iterator<String> it = c2.iterator() ;
while(it.hasNext()){
    String  str = it.next();
    System.out.println(str);
}


8.2 Collection的功能

添加
boolean add(Object e){}
boolean addAll(Collection c)
boolean containsAll(Collection c)
boolean removeAll(Collection c)
boolean retainAll(Collection c):A集合对象.retainAll(B集合对象)
//获取交集的元素,将交集的元素保存在A集合中,返回值的意思:A集合前后元素是否发生变化,如果没有变化,则返回false,如果有变化,则返回true

删除
boolean remove(Object e)
void clear()
判断
boolean contains(Object e)
boolean isEmpty()
获取
int size()
Iterator iterator()
Object[] toArray()

9 Iterator的原理

Iterator的原理:
内部具备一个指针,当在第一次获取元素的时候,指针处在第一个元素前面的位置,不指向任何元素;当通过hasNext()判断,如果存在下一个可以迭代的元素,那么指针就会向下一个索引进行移动,并且next()获取前面的元素,依次这样操作,直到hasNext()为false的时候,没有元素了,指针就不会在移动;Iterator是一个接口,具体的移动的操作是通过
ArrayList的成员内部类Itr来进行实现;

10.List集合和Set集合

List集合有序,存储和取出一致的,可以允许元素重复
Set集合无序,存储和取出不一致,不允许元素重复(元素唯一)

每一个子实现类的特点: 通过API后面分析

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值