day2重拾java基础

<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">1、abstract class 和 interface的区别</span>

interface是抽象类的一种特例,接口中所有的方法都必须是抽象的。接口中方法的定义默认为public abstract类型,接口中的成员变量类型默认为public static final

package com.pp;
/*
 * 变量初始化的顺序
 * 静态方法和变量先加载且只加载一次
 */
public class Cc {

	int radius = prt("初始化radius");
	int t= prt("初始化t");
	static int s = prt("初始化s");
	{System.out.println("初始化块");}
	
	static{
		System.out.println("静态初始化块");
	}
	
	public Cc(){
		System.out.println("构造方法加载");
	}
	
	
	private static int prt(String string) {
		System.out.println(string);
		return 0;
	}
	
	public static void main(String[] args) {
		Cc cc1= new Cc();
		Cc cc2= new Cc();
	}

}

打印结果为

初始化s
静态初始化块
初始化radius
初始化t
初始化块
构造方法加载
初始化radius
初始化t
初始化块
构造方法加载

2、构造方法不一定是public 

package com.shape;

import com.oo.tuXing;

public class Circle implements tuXing{
	private double radius;
	
	private static Circle circle;
	
	public Circle() {
	}
//	
//	private Circle(){
//		
//	}
//	
	// 
	public static Circle getInstance(){
		if(null==circle)
			circle = new Circle();
		return circle;
	}
	
	@Override
	public double cacuArea() {
		return Math.PI*Math.PI*radius;
	}
		
	@Override
	public double cacuCircle() {
		return 2*Math.PI*radius;
	}
	
	
	public void setRadius(double radius) {
		this.radius = radius;
	}

	public double getRadius() {
		return radius;
	}

	
}
这里getInstance是只创建了一个对象,存在线程上的不安全

3、String和StringBuffer的区别

package com.test;

import java.util.Date;
/**
 * 用StringBuffer的append方法效率高于字符串连接+
 *
 */
public class Test02 {
	public static void main(String[] args) {
		//
		Date date1 = new Date();
		long begin1 = date1.getTime();
		String str = "0 ";
		for (int i = 1; i < 10000; i++) {
			str += i+" ";
		}
//		System.out.println(str);
		Date date1_2 = new Date();
		long end1 = date1_2.getTime();
		System.out.println("时间1:"+(end1 - begin1 )+" ");
		
		Date date2 = new Date();
		long begin2 = date2.getTime();
		StringBuffer stringBuffer = new StringBuffer();
		for(int i=0;i<10000;i++){
			stringBuffer.append(i+" ");
		}
		
		Date date2_2 = new Date();
		long end2 = date2_2.getTime();
//		System.out.println(stringBuffer);
		System.out.println("时间2:"+(end2 - begin2 )+" ");
		
	}
}

运行结果如下

时间1:469 
时间2:0 

由此可见,StringBuffer的效率更高些,那原因是什么呢。很简单,因为只创建了一个StringBuffer

对象,而str被创建了10000次,每次用+连接时,str都被创建因为指向了不同的对象。

4、面向对象的一些理解

如下表达式: A a1 = new A(); 
它代表A是类,a1是引用,a1不是对象,new A()才是对象,a1引用指向new A()这个对象。 在JAVA里,“=”不能被看成是一个赋值语句,它不是在把一个对象赋给另外一个对象,它的执行过程实质上是将右边对象的地址传给了左边的引用,使得左边的引用指向了右边的对象。JAVA表面上看起来没有指针,但它的引用其实质就是一个指针,引用里面存放的并不是对象,而是该对象的地址,使得该引用指向了对象。在JAVA里,“=”语句不应该被翻译成赋值语句,因为它所执行的确实不是一个赋值的过程,而是一个传地址的过程,被译成赋值语句会造成很多误解,译得不准确。 再如: A a2; 
它代表A是类,a2是引用,a2不是对象,a2所指向的对象为空null; 再如: a2 = a1; 
它代表,a2是引用,a1也是引用,a1所指向的对象的地址传给了a2(传址),使得a2和a1指向了同一对象。 
综上所述,可以简单的记为,在初始化时,“=”语句左边的是引用,右边new出来的是对象。 在后面的左右都是引用的“=”语句时,左右的引用同时指向了右边引用所指向的对象



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值