![87949a4a48021cf22ff0f83a18e2ece1.png](https://i-blog.csdnimg.cn/blog_migrate/058ea75566ab8102be3ae1a361438bab.jpeg)
如果一个类的构造方法被私有化了,那么是否可以在其他的类创建该类对象。
如果可以?采用什么方法实现?
在类中定义个静态的方法,在静态方法中创建对象,并返回。
接口的设计一定要慎重
假如设计了一个接口,然后很多的子类进行了实现,突然发现我要对接口进行修改,
是否存在其他的方案,即使对已有的接口进行修改,现有的实现的子类也不会进行相应的更新??
package com.bjsxt.test0605;
public class Test {
public static void main(String[] args) {
// int[] arr;
// int arr1[];
//
// int[][] arr2 = new int[2][];
// arr2[0] = new int[10];
// arr2[1] = new int[12];
//
// int[][] arr3 = {
// {1,3,45,6,43,3},
// {3,45,67,45,3,32},
// {56,5,3432,34,56,76}
// };
// System.out.println(arr3[1]);//[I@
// System.out.println(arr3[2][2]);//3432
//
// System.out.println(getNumber());
//
test();
int i=10;
test2(i);
System.out.println(i);
String str = "123";
test3(str);
System.out.println(str);
}
//0
// public static int getNumber(){
// int i = 0;
// try {
// return i;
// } catch (Exception e) {
// e.printStackTrace();
// }finally {
// i++;
// System.out.println(i);//1
// }
// return i;
// }
static void test(){
String s0 = "a";
String s1 = "b";
String s2 = "ab";
String s3 = "a" + "b";
String s4 = s0+s1;//new StringBuilder(s0).append(s1);
String s5= "a" + s1;
String s6 = new String("ab");
//允许在运行期动态的往字符串常量池添加常量的,返回的是常量池的地址。
String s7 = new String(s0+s1+s4).intern();
System.out.println(s7=="abab");
System.out.println(s2 == s3);//true
System.out.println(s2 == s4);//false
System.out.println(s2 == s5);//false
System.out.println(s2 == s6);//false
System.out.println(s2 == s7);//true
}
static void test2(int i){
i ++;
}
static void test3(String str){
str = "456";
str += 1;
}
}
class A{
private static A a =new A();
private A(){}
public static A getNewInstance(){
return new A();
}
public static A getCacheInstance(){
return a;
}
}
interface AA{
void a();
void b();
void c();
void d();
}
//骨架类
abstract class AAAAA implements AA{
@Override
public void a() {
}
@Override
public void b() {
}
@Override
public void c() {
}
@Override
public void d() {
// TODO Auto-generated method stub
}
}
class AAA extends AAAAA{
@Override
public void a() {
}
}
java.util.Arrays:数组工具类
sort binarysearch copyof….toString
多维数组
int[] arr;
int arr1[];
int[][] arr2 = new int[2][];
arr2[0] = new int[10];
arr2[1] = new int[12];
int[][] arr3 = {
{1,3,45,6,43,3},
{3,45,67,45,3,32},
{56,5,3432,34,56,76}
};
System.out.println(arr3[1]);//[I@
System.out.println(arr3[2][2]);//3432
异常:异常的继承体系、异常的分类、异常的处理方式、
Object
--Throwable
---Error 比较严重的问题。
---Exception
---RuntimeException
---IOException
---……
2大类:
1:运行时异常,有一个公共的父类 RuntimeException
NullPointerException:空指针异常。使用了没有初始化的对象。
2:编译期异常 checked 异常 以Exception 为父类。
IOException
处理方式:
编译期异常:必须处理,要么抓,要么抛
Try-catch finally
//0
public static int getNumber(){
int i = 0;
try {
return i;
} catch (Exception e) {
e.printStackTrace();
}finally {
i++;
System.out.println(i);//1
}
return i;
}
throw :在方法体内使用,后面跟的是异常对象,只能有一个异常对象。
Throws: 在方法名和参数列表之间使用,后面跟的是异常的类型,可以是多个异常类型,使用逗号 分隔。
String
static void test(){
String s0 = "a";
String s1 = "b";
String s2 = "ab";
String s3 = "a" + "b";
String s4 = s0+s1;//new StringBuilder(s0).append(s1);
String s5= "a" + s1;
String s6 = new String("ab");
//允许在运行期动态的往字符串常量池添加常量的,返回的是常量池的地址。
String s7 = new String(s0+s1+s4).intern();
System.out.println(s7=="abab");
System.out.println(s2 == s3);//true
System.out.println(s2 == s4);//false
System.out.println(s2 == s5);//false
System.out.println(s2 == s6);//false
System.out.println(s2 == s7);//true
}
String 类对象 特点:
字符串对象一旦创建,就不能被更改。底层使用char[] values 实现。
可能会造成在内存中存在大量的被抛弃的字符串对象。
因为不可变,所以多个线程访问同一个字符串对象的时候,是安全的。
StringBuilder StringBuffer
增强的可变的String 类。
相同点:API 完全一致。
不同点:StringBuffer 是线程安全的,效率低,StringBuilder 是线程不安全的,效率高。StringBuilder出现的目的是在线程安全的环境下对StringBuffer 的替代。
java.util.Date
--1:从日期对象到 指定格式的字符串对象的转换
SimpleDateFormate String format(Date date)
--2:从一个日期字符串对象转换为日期Date
Date parse(String dateStr)
月份从0开始, 星期从0开始的。 星期日à0
包装类:
Integer:提供了一些操作int 数据的方法: 提供了 int 类型和 String 类型之间的相互转换。
Int—>String Integer.toString(int i);
Stringàint Integer.parseInt(String str);
特点:对象一旦创建就不能更改。
方法调用的传参的问题
基本数据类型传值
引用数据类型传引用