没错,我就是一个大三开始学Java的渣渣。其实,本来对于Java很害怕的,因为这个语言还是比较复杂的,涉及的知识比较多。昨天开始看的,看了基础的语法发现都一样,甚至有点像js,前端狂喜。为什么转Java,主要还是学校的Java课程上完了,不得不开始自学。其次,还有一个原因,之前学了thinkPHP,日渐觉得thinkPHP出路很小,就算拿来写接口都觉得有点在查函数库一样,很是尴尬,成就感属实不高。Java的门槛其实还是比较低的,但将来的路应该不会平坦。
1.对于Java jdk5新增的数组遍历方法的理解 既然开始学了,就该拿出点干劲来。
学习过程中,遇到了一个和js比较像的数组遍历写法:
int [] arr={1,2,3};
for(int item in arr){
System.out.println(item+" ");
//需要注意的是,这里使用的item是后面遍历的数组元素,不是下标
}
需要注意的是,这里的写法是模仿了foreach的写法,就和js里面的这个一样:
let arr=[1,2,3,4];
arr.forEach((item,index)=>{
console.log("输出第"+index+"个元素:"+item);
})
在某些特别的场合(不需要下边参与的情况下),这种写法能够减少一个形参,比如:
public static void print(int [] arr){
//就不需要像原来一样还需要设置数组长度参数length了
System.out.println("输出数组的第"+i+"个元素:"+arr[i-1]);
}
2.String类与StringBuilder.
(1)基本区别分析:
| 类 | String | StringBuffer | StringBuilder |
|---|---|---|---|
| 特点 | String类接受的是字符串常量,其值是不可变的,因此每次操作之后会重新在堆区开辟新的内存用来存储参与更改的中间量,效率低且浪费内存。 | StringBuffer属于可变类,其实例化对象有一定的缓冲容量,当容量不足会增加自动容量。 | 同样是可变类,并且变化速度快 |
| 可变性 | 不可变 | 可变 | 可变 |
| 安全性 | 线程安全 | 线程不安全 |
由于StringBuilder更新速度较快,因此使用更加普遍,但是对于某些线程并发场景,只能使用StringBuffer(可以简单理解成多个线程操作同一个字符串)。
(2)相互转换
//String 转换成StringBuilder————利用StringBuilder的构造函数实现
String str1="test";
StringBuilder str2=new StringBuilder(str);
//StringBuilder转换成String————利用toString函数实现
StringBuilder str3=new StringBuilder("test");
String str4=str3.toString();
(3)StringBuilder应用场景
//StringBuilder的应用场景还是比较多的,主要还是源于期快速可变性 //1.reverse()反转一个给定的String String str="test"; System.out.ptintln(new StringBuilder(str).reverse()); //2.字符串拼接 StringBuilder str=new StringBuilder();3.ArrayList基础用法[] arr=new (); arr.add(1); arr.add(2); for(int item : arr){ str.append(item); //说明:str返回值为本身,对于数据的操作都是在原内存区操作,而String需要新开内存单元 }
(1)简介
ArrayList是底层采用数组实现,外部表现为能够实现内存的动态可变性。
(2)定义
ArrayListarrList=new ArrayList (); //Type: 泛型数据类型,用于设置 arrList 的数据类型,只能为引用数据类型。 //右边的Type可以省略
(3)基本用法
ArrayList4.对于Java修饰符的总结arrList=new ArrayList(); arrList.add(value);//添加元素,在元素后面追加 arrList.add(index,value);//在指定元素前插入内容 arrList.remove(index);//删除指定下标的元素 arrList.set(index,value);//修改指定位置元素 arrList.isEmpty();//不携带参数,检测列表是否为空 arrList.clone();//直接拷贝序列,注意浅拷贝 //还有和js形似的lastIndexOf、size、get、sort、foreach等函数。
首先,需要明确Java中的修饰符一共有4类:private、默认、protected、public。
| 修饰符 | 同一个类中 | 同一个包中的子类或无关类 | 不同包中的子类 | 不同包的无关类 |
|---|---|---|---|---|
| private | √ | |||
| 默认 | √ | √ | ||
| protected | √ | √ | √ | |
| public | √ | √ | √ | √ |
(1)关于继承,Java不支持多继承,但是支持多层级继承。另外,需要明白继承也有其缺点,继承虽然能够带来代码的复用,但是可能后续由于实际需求需要修改父类,那么子类重写的父类方法都需要更改,这便体现耦合带来的弊端,因此需要防止继承的泛滥。
(2)子类对于父类方法的继承,需要明确,子类不能重新给父类的private方法;此外,子类重写父类方法的访问权限不得低于父类。
(3)super(超类)可以用来在子类中访问父类的属性或者方法。实际上,在子类的构造方法中,第一行会存在一个super()方法,用来构造整个父类。
(4)对于继承,如果在继承中重新构建了一个有参构造方法,那么将会导致子类产生冲突(改有参构造方法覆盖了原来的默认构造方法)。解决方法有两种:补上构造一个无参构造方法,另外还可以在子类中利用超类调用该有参构造方法:
public class Father {
Father(String name){
this.name=name;
}
}
//利用超类解决因构造函数产生的冲突
public class Son extends Father{
Son(){
super("");
}
}
参考文献
(1)String、StringBuffer与StringBuilder之间区别



