java基础知识1.0

java的特点

使用简单
面向对象
稳健性
安全性
高性能
多线程
跨平台

java基本数据类型(共8种)

boolean 布尔类型 布尔值:true false 多使用在程序的流程控制语句中,默认false
char    字符型   26个拼音字母,每个字母都是一个字符 
         字符型数据类型标识单一的字符
         java中的字符属于unicode编码 
int     整型     在java中,一共有四种整数类型,分别是byte short int long
         每种类型所占的空间分别是1 2 4 8 个字节
float   单精度浮点型(浮点型)
double  双精度浮点型(浮点型)
         二者区别在于双精度浮点型比单精度浮点型取值范围大,有更高的精度
         拥有大的取值范围和精度的同时,也占用了大的内存空间

数据类型转换
隐式数据类型转换 自动由低优先级到高优先级数据的转换赋值
显示类型转换      由优先级高的类型向优先级低的类型进行转换,需要手动强制类型转换

运算符表达式
算术运算符及表达式
+ - * / 
关系运算符表达式
 > < >= <= == !=
逻辑运算符表达式
& 逻辑与 | 逻辑或 ! 逻辑非 && 逻辑与 || 逻辑或 ^ 异或
&& || 与 & | 的区别:&& || 是短路逻辑操作,若操作符左边的boolean值就能推知整个
            表达式的结果,就不会再计算操作符右边的boolean值了.
            & | 就是无论如何都要把两边的值都计算出来

位运算符及表达式 (知道就行)
>> 位右移 << 位左移 >>>无符号位右移运算符 & 按位与 | 按位或 ^ 按位异或 ~ 按位取反

赋值运算符及表达式 只有一个 = 

数组 [] 用来存放具有相同数据类型的数值的数据结构
创建数组
数据类型[] 数组名;(*)
数据类型 数组名[];

数组初始化

数据类型[] 数组名 = {元素1,元素2,...};
数据类型[] 数组名 = new 数据类型[数组长度];

数组的使用
数组的复制
新数组名 = 数组名;
将一个数组变量复制给另一个,这时数组类型变量都会指向同一个数组 ;

数组排序
选择排序法: 
基本思路:对一个长度为x的数组进行x遍遍历,第一遍遍历出最大(小)的元素将
    与数组中的第一个元素交换位置,然后在进行第二遍遍历,将最大(小)
    的元素与第二个元素进行交换,如此n遍之后,就会将所有的元素从大到小
    排列出来
冒泡排序法(交换排序法):
    把数组元素中比较小的元素看作是重量较轻的,让她上浮,并且依次
    从底部进行该操作
多维数组():
    数组中的数组,就是在一维数组中的元素还是一个数组.

字符串 String
字符串不属于基本数据类型
声明字符串   和  创建字符串:
String 变量名 = "字符串";
String 变量名 = new String{"字符串"};
字符串操作
equals() 比较两个字符串的内容是否相等,返回boolean类型
equalsIgoreCase() 忽略大小写,比较两个字符串的内容是否相等,返回boolean类型
compareTo() 按照字典顺序进行比较,返回int类型
注意: 比较字符串时:不能使用 == ,使用 == 比较对象时,实际上比较的是是否为
      同一个对象.如果内容相同,不是同一个对象,其返回值也是false,也就是说
      对象的不是同一个内存地址.
连接字符串
concat() 
复制字符串
copyValueOf()
变更字符串的内容
replace()
replaceAll()
replaceFirst()
获取字符串的长度
length()
分割字符串
split()

StringBuffer 
StringBuffer和String不同,String对象的长度是不可变的,而StringBuffer的长度是
可以改变的,如果使用String频繁的进行字符串拼接操作,会产生很多对象,用StringBuffer
类就可以解决这些问题
StringBuffer类中的一些方法:
    length() 返回字符串的长度
    insert() 在字符串的中间插入,
    append() 在字符串的尾部追加字符串
    setCharAt(int index,char ch) 设置知道索引位置的字符
    toString()返回字符串

程序控制语句
if(boolean表达式){
    //语句1
}

if(boolean表达式){
    //语句1
}else{
    //语句2
}

if(boolean表达式){
    //语句1
}else if(boolean表达式){
    //语句2
}

switch(表达式){
    case value1:
    处理语句1;
    break;

    case value1:
    处理语句1;
    break;

    case value1:
    处理语句1;
    break;

    case value1:
    处理语句1;
    break;

    ...
}

for(表达式1;boolean表达式;表达式2){
    //语句
}

while(boolean表达式){
    //语句
}

do{
    语句
}while(boolean)

中断控制
continue  中断当前循环,进入下一次的循环中
break     强制终止循环
return    结束当前的方法,并且返回到调用该方法的位置,return 还可以提供返回值

面向对象程序设计
面向对象时java语言的基本设计思想,类是java中最核心最基本的内容.

类是对象的一种形式,java程序的编写,就是将这些对象的共同点抽取出来,然后使用
程序语言的形式表达出来,

private 私有的 本类可见
protected 受保护的 同一个包中可见
public 整个程序可见
默认的  同一个包中可见

class 类名{
    //定义变量
    数据类型 变量名;
    int i = 10 ;
    数据类型 变量名;
    数据类型 变量名;

    //构造方法
    类名{}
    
    //方法
    权限修饰符 void(返回值) 方法名(参数列表){
        方法体
    }

    //主方法 程序入口
    public static void main(String[] args){

    }
}

变量:
成员变量 又叫 全局变量 类变量
在一个类中 成员变量是唯一的
局部变量 定义在方法中 其范围就是整个方法

this关键字
this是java中的关键字,使用this可以不通过对象引用成员变量和方法 

对象
创建对象

类名 对象名 = new 类名(参数列表);

对象行为和属性的访问
对象名.行为
对象名.属性

比较对象
用 == equals()

销毁对象
System.gc()

继承
面向对象的程序设计扩展了基于对象的程序设计.可以提供类型/子类型的关系,
子类不需要重新实现所有的特征,而是继承父类的数据成员和成员变量
什么是继承:
在程序中的继承是指一个类从另一个类派生而来,派生类自动具有了被继承类所有的特性,
其中,被继承的叫父类 继承父类的叫子类,
使用继承可以使得子类具有父类的各种属性和方法,从而不需要再次编写相同的代码,
而且,在程序中可以大大的促进软件的复用性,并且继承的形式是可以更加复杂.
子类继承父类后,也可以拥有自己的特性,可以使得子类更加具体,功能强大.


实现继承也就是创建一个类的子类,需要在类的声明中加入extends字句
基类
class 父类{
}
派生类
class 子类 extends 父类{


}

继承可分为单一继承和多重继承,
单一继承关系 一个类只继承一个父类

多重继承关系 java中 一个类只能继承一个父类 只有单一继承 没有多重继承
        但是在java中有多重继承这个概念 是通过实现接口的方法
        来达到多重继承的目的

抽象类
抽象类是java中比较特殊的类,其中只包含对方法的声明而没有具体的实现,在抽象类
中,对所有方法都只进行了声明而没有具体的实现
抽象类中的方法需要声明方法的名称,但不用指明方法体,当要对问题域进行分析和设计,
的丑抽象概念是可以使用抽象类.抽象类要比类的继承更加高级一些,是对类的抽象,
抽象类拥有未能够实现的方法,而且不能够被实例化,只能被继承扩展,
abstract class 类名{
    abstract returntype abstractMethodName(paramList);
}

abstract 关键字 表示此类是抽象类 class 关键字 表示这是一个类 
抽象类的特点:
至少含有一个抽象方法
不能被实例化
继承抽象类的子类必须实现其所有抽象方法才能被实例化,否则子类还是抽象类

final 关键字 表示常量 常量只能被复制一次
成员变量被final修饰,这个变量就是一个常量
一个方法被final修饰,这个方法不能被重写
一个类被final修饰,这个类不能被继承

Object类 
在java中,Object类是所有类的基类(祖先),这是java中存在的比较特殊的类,如果
一个类没有继承任何的类,那么默认是继承Object类的,如果它继承了一个类,那么
它的父类或父类的父类也继承与Object类. 任何类都是Object类的子类

多态是面向对象编程的三个重要的特性之一.在java中,多态性可以通过综合应用来
继承覆盖,以及通过向上转型来实现.

一个类可以通过继承来产生一个新类,新的类记错了父类所有的成员变量和方法,并且
继承这些方法和变量的同时,也具有了自己特有的行为,如果父类中一些方法不能满足
新的要求,就可以在子类中修改从父类 中所继承过来的方法,并可以同时定义自己的方法

在子类继承父类后,在子类中经常都会修改父类中的方法,重写的目的在于,一方面修改
父类中的方法,另一方面对父类中的方法进行扩展,或者在子类中定义具体的 特定的行为

父类中的方法也不是在任何情况下可以重写的,如果父类中的方法访问修饰符设置为private
,该方法只能被自己的类访问,不能被外部类访问,如果父类中方法访问控制符这是为public,
而子类该方法设置为private,则编译时会报错.

重载
重载和重写是两个完全不同的概念
重载指的是同一个类中有两个或者更多个方法可以使用一个相同的名称,不同的是它们
的参数.

在调用重载方法是,到底调用哪一个方法是基于参数的.

绑定
绑定就是在对象引用于对象实例之间建立联系.绑定分为动态绑定和静态绑定.
静态绑定(前期绑定),在编译期建立的联系,
动态绑定(后期绑定),是在运行时建立的绑定.

静态绑定就是在编译期就决定了变量的值或者应该调用那个类的方法,由于这种联系是在
编译期时就建立的,所以其性能好,可以提高代码的运行速度.
java中属于静态绑定的有以下以下内容:
类属性
构造方法
声明为static的静态方法
声明为final的方法,将其另列为一个项目.
使用关键字super调用的方法

静态绑定的优点:能够提高程序的运行效率.

动态绑定

动态绑定是指在运行时,根据对象引用所指向的具体实例决定执行什么样的方法,由于
在运行时有jvm完成的,因此会减慢程序的运行速度.

动态绑定的好处:提高了程序设计的灵活度,降低了耦合性


接口
接口是java语言中为解决无法实现多继承而提供的一个解决方案.接口中没有实际的
方法实现,只定义了一些空壳,一个类可以通过实现接口来实现多重继承关系.

接口就是一种特殊的抽象类,接口中只提供了方法的原型,但没有具体的方法实现,子类
必须提供父类中的抽象方法的实现方式,接口和抽象类一样.也可以定义抽象方法,并且在
接口中只能够包含抽象方法和常量,不能有变量,初始化块和构造函数.

interface

implement

内部类
就是定义在类内部的类.
内部类是一种非常有用的机制,通过内部类的定义,程序员将一些逻辑上相关的类组织在一起
,并且通过内部类的使用可以很好的控制内部类的可见性

public class Outer {

	String out = "String in Outer";//设置在外部类的变量
	void useIner(){//设置外部类的方法
		Iner iner = new Iner();
		iner.print();
	}
	
	//创建内部类
	class Iner{
		void print(){//内部类定义的方法
			System.out.println("Iner.print();");
			//内部类访问外部类的变量
			System.out.println("in iner 访问 Outer的变量"+out);
		}
	}
	
	public static void main(String[] args) {
		//测试
		Outer outer = new Outer();
		outer.useIner();
	}
}


匿名内部类
就是没有名字的内部类

interface Inner1{
	public void getInner1();
}

public class Inner2 {

	public void getInner2(){
		System.out.println("class Inner2 getInner2()");
	}
}

public class Outer2 {

	public void Outer2Method1(){
		System.out.println("外部类方法1");
		new Inner1() {
			
			@Override
			public void getInner1() {
				// TODO Auto-generated method stub
				System.out.println("class Inner1 getInner1()");
			}
		}.getInner1();
	}
	
	public void Outer2Method2(){
		System.out.println("外部类方法2");
		Inner2 inner2 = new Inner2();
		inner2.getInner2();
	}
	
	public static void main(String[] args) {
		Outer2 outer2 = new Outer2();
		outer2.Outer2Method1();
		outer2.Outer2Method2();
		
		
	}
}


如果匿名内部类所继承或实现的接口,只有带参数的构造方法,没有无参构造,
怎么创建匿名内部类

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值