二幔欧、變量
定義:
- 1.變量是程序中最基礎(chǔ)的存儲單元,其要素包括變量名娜遵、變量類型和作用域蜕衡;
- 2.變量其實(shí)是內(nèi)存中的一小塊區(qū)域,使用變量名來訪問這塊區(qū)域设拟,因此慨仿,每一個(gè)變量使用前必須先申請(聲明),然后必須進(jìn)行賦值(填充內(nèi)容)纳胧,才能使用镰吆;
分類:
- 1.按聲明的位置劃分:
1)、局部變量(方法體外跑慕,類體內(nèi))鼎姊;2)、成員變量(方法體內(nèi)部)
- 2.變量類型:
基本類型和引用類型
- 3.局部變量和成員變量的區(qū)別:
成員變量不用初始化相赁,Java會默認(rèn)初始化相寇,而局部變量不行
三、面向?qū)ο?/h3>
- 面向?qū)ο笏季S:
1钮科、考慮的是有哪些類哪些對象唤衫;2、這些類和這些對象绵脯,應(yīng)該具有哪些屬性和方法;3佳励、類和類之間的關(guān)系
- 類和對象的關(guān)系:
1、關(guān)聯(lián)關(guān)系蛆挫;2赃承、繼承關(guān)系;3悴侵、聚合關(guān)系瞧剖;4、實(shí)現(xiàn)關(guān)系可免;5抓于、多態(tài)
1钮科、考慮的是有哪些類哪些對象唤衫;2、這些類和這些對象绵脯,應(yīng)該具有哪些屬性和方法;3佳励、類和類之間的關(guān)系
1、關(guān)聯(lián)關(guān)系蛆挫;2赃承、繼承關(guān)系;3悴侵、聚合關(guān)系瞧剖;4、實(shí)現(xiàn)關(guān)系可免;5抓于、多態(tài)
3.1.類的定義
1.類的組成:成員變量和方法
2.對象的創(chuàng)建和使用
2.1、new創(chuàng)建對象
2.2浇借、使用對象(引用).成員變量或引用對象的成員變量
2.3捉撮、使用對象(引用).方法(參數(shù)列表)來調(diào)用對象的方法
2.4、同一類的每個(gè)對象有不同的成員變量存儲空間
2.5妇垢、同一類的每個(gè)對象共享該類的方法巾遭。
3.2.類的對象的關(guān)系
3.3.構(gòu)造方法(構(gòu)造函數(shù))
1. 使用new+構(gòu)造方法肉康,創(chuàng)建一個(gè)新的對象
2. 構(gòu)造函數(shù)是定義在Java類中的一個(gè)用來初始化對象的函數(shù);
3. 構(gòu)造函數(shù)與類同名且沒有返回值灼舍;
4. 當(dāng)你創(chuàng)建一個(gè)類時(shí)迎罗,如果不寫構(gòu)造方法,系統(tǒng)會默認(rèn)給一個(gè)參數(shù)和方法休都為空的構(gòu)造方法片仿,如果你自己寫的構(gòu)造方法纹安,系統(tǒng)就不會再有默認(rèn)的構(gòu)造方法
public class GouZaofunction {
public static void main(String[] args) {
// TODO Auto-generated method stub
Persion tom = new Persion(18, "tom");//這里new一個(gè)對象的時(shí)候,其實(shí)就是調(diào)用它的構(gòu)造方法來new砂豌;
System.out.println(tom.name);
}
}
class Persion {
int age;
String name;
//下面是構(gòu)造方法
public Persion(int _age,String _name) {
age = _age;
name = _name;
}
//如果沒有上面的構(gòu)造方法時(shí)厢岂,系統(tǒng)會默認(rèn)的創(chuàng)建一個(gè)Persion(){}
}
3.4.方法重載
一個(gè)類中可以定義有相同名字,但參數(shù)不同的多個(gè)方法阳距。調(diào)用時(shí)塔粒,會根據(jù)不同的參數(shù)選擇對應(yīng)的方法。
構(gòu)造方法的重載筐摘,跟普通方法一樣
public class TestOverLoad {
public static void main(String[] args) {
// TODO Auto-generated method stub
Persion tom = new Persion(18, "tom");
Persion ken = new Persion("ken");//這是在調(diào)用重載的構(gòu)造方法
System.out.println(tom.name);
}
}
class Persion {
int age;
String name;
//下面是構(gòu)造方法
public Persion() {
// TODO Auto-generated constructor stub
}
//下面是構(gòu)造方法重載
public Persion(String _name) {
name = _name;
}
public Persion(int _age,String _name) {
age = _age;
name = _name;
}
}
3.5.this關(guān)鍵字
1. 在類的方法定義中使用的this關(guān)鍵字代表使用該方法的對象的引用
2. 當(dāng)必須指出當(dāng)前使用方法的對象是誰時(shí)要使用this卒茬;
3. 有時(shí)使用this可以處理方法中成員變量和參數(shù)重名的情況;
4. this可以看作是一個(gè)變量咖熟,它的值是當(dāng)前對象的引用
public class TishTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
Leaf leaf = new Leaf(100);
leaf.increament().increament().print();
}
}
class Leaf {
int i=0;
public Leaf(int i) {
// TODO Auto-generated constructor stub
this.i = i;
}
Leaf increament(){
i++;
return this;
}
void print(){System.out.println(("i="+i));}
}
3.6.static關(guān)鍵字
1. 在類中圃酵,用static聲明的成員變量為靜態(tài)成員變量,它為該類的公用變量馍管,在第一次使用時(shí)被初始化郭赐,對于該類的所有對象來說,static成員變量只有一份
2. 用static聲明的方法為靜態(tài)方法确沸,在調(diào)用該方法時(shí)捌锭,不會將對象的引用傳遞給它,所以在static方法中不可訪問非static的成員罗捎。
3. 可以通過對象引用或類名(不需要實(shí)例化)訪問靜態(tài)成員
public class CatStatic {
private static int sid; //很明顯一般做計(jì)數(shù)用
private int id;
private String name;
public CatStatic(String name) {
// TODO Auto-generated constructor stub
this.name = name;
id = sid ++;
}
public void info() {
System.out.println("My name is"+name+"NO.:"+id);
}
public static void main(String[] args) {
// TODO Auto-generated method stub
sid = 100;//直接用观谦,不用創(chuàng)建對象后再用
CatStatic mini = new CatStatic("mini");
CatStatic pipi = new CatStatic("pipi");
mini.info();
pipi.info();
}
}
3.7.訪問控制和類的繼承
1. Java權(quán)限修飾符public protected private 置于類的成員定義前,用來限定其他對象對該類對象成員的訪問權(quán)限桨菜。
![image](http://upload-images.jianshu.io/upload_images/4277233-c7ad609c5d70f404?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
2. 對于class的權(quán)限修飾只可以用public和default
1).public類可以在任意地方被訪問
2).default類只可以被同一個(gè)包內(nèi)部的類訪問
1. java中使用extends關(guān)鍵字實(shí)現(xiàn)類的繼承機(jī)制豁状,語法規(guī)則:<modifier>class<name>[extends<superclass>]{... ...}
2. 通過繼承,子類自動(dòng)擁有父類(superclass)的所有成員(成員變量和方法)
3. Java只支持單繼承雷激,不允許多繼承
//繼承的權(quán)限控制
class Parent{
private int n_private = 1;
int n_default = 2;
protected int n_protected = 3;
public int n_public = 4;
}
class Child extends Parent {
public void f(){
n_private = 100 //會報(bào)錯(cuò)替蔬,父母的成員變量雖然可以繼承,但不能訪問屎暇,private只能自己類本身來訪問
n_default = 200 //正常,下面的幾個(gè)都是正常
}
}
3.8.方法的重寫
1. 重寫是對子類來說驻粟,對父類的方法進(jìn)行重寫
2. 重寫方法必須和被重寫的方法名稱根悼、參數(shù)凶异、返回類型都相同
3. 重寫方法不能使用比被重寫方法更嚴(yán)格的訪問權(quán)限
public class ExtendsTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
Person person = new Person();
person.setAge(18);
person.setName("tom");
person.getInfo();
Child child = new Child();
child.setName("jam");
child.setAge(19);
child.setSchool("中山大學(xué)");
child.getInfo();
}
}
class Person{
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String _name) {
name = _name;
}
public int getAge() {
return age;
}
public void setAge(int _age) {
age = _age;
}
void getInfo(){
System.out.println("Name is "+ name+"\n"+"age is "+age);
}
}
class Child extends Person {
private String school;
public String getSchool() {
return school;
}
public void setSchool(String _school) {
school = _school;
}
void getInfo(){
System.out.println("Name is "+getName()+"\n"+"age is "+getAge() +"\n"+"school is "+getSchool());
}
}
3.9.super關(guān)鍵字
super關(guān)鍵字,是在繼承里面挤巡,指的是父類對象的引用
public class SuperTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
ChildClass child = new ChildClass();
child.f();
}
}
class FartherClass{
public int value;
public void f() {
value = 100;
System.out.println("Farther's value is "+ value);
}
}
class ChildClass extends FartherClass{
public int value;
public void f() {
super.f();//執(zhí)行的是父類的方法
value = 200;//對子類的value賦值
System.out.println("Child's value is "+ value);
System.out.println(value);//子類的value
System.out.println(super.value);//父類的value
}
}
3.10.繼承中的構(gòu)造方法
1. 子類的構(gòu)造方法必須調(diào)用其父類的構(gòu)造方法
2. 子類可以在自己的構(gòu)造方法中使用super(argument_list)調(diào)用其父類的構(gòu)造方法
2.1.使用this(argument_list)調(diào)用本類的另外的構(gòu)造方法
2.2.使用super剩彬,必須寫在子類構(gòu)造方法的第一行
3. 如果子類的構(gòu)造方法中沒有顯式的調(diào)用父類的構(gòu)造方法,則系統(tǒng)默認(rèn)調(diào)用父類的無參數(shù)的構(gòu)造方法
4. 如果子類既無顯式調(diào)用父類的構(gòu)造方法矿卑,而父類又沒有無參數(shù)的構(gòu)造方法喉恋,則編譯出錯(cuò)
3.11.多態(tài)
1. 定義:是指在執(zhí)行期間(非編譯期)判斷所引用對象的實(shí)際類型,根據(jù)其實(shí)際類型調(diào)用其相應(yīng)的方法
2. 必要條件:2.1).要有繼承 母廷;2.2).要有重寫轻黑;
2.3).父類引用指向子類對象
public class Test {
public static void main(String[] args) {
Animal a = new Animal("a");
lady l1 = new lady("li",a);
Cat c = new Cat("c","blue");
Dog d = new Dog("d", "yellow");
//動(dòng)態(tài)的,根據(jù)程序運(yùn)行時(shí)琴昆,傳的什么來決定運(yùn)行哪個(gè)方法
l1.myenjoy(a);//叫聲%%%%%%%%%%%%%
l1.myenjoy(c);//貓叫聲.......
l1.myenjoy(d);//狗叫聲Cケ伞!R瞪帷6独埂!O夏骸L铩!O旅妗向臀!
}
}
class lady {
private String name;
private Animal pet;
public lady(String name,Animal pet) {
// TODO Auto-generated constructor stub
this.name = name;
this.pet = pet;
}
public void myenjoy(Animal a) {
a.enjoy();
}
}
class Animal {
private String name;
public Animal(String name) {
// TODO Auto-generated constructor stub
this.name = name;
}
public void enjoy() {
System.out.println("叫聲%%%%%%%%%%%%%");
}
}
class Cat extends Animal {
private String eyesColor;
public Cat(String name,String eyesColor) {
super(name);
this.eyesColor = eyesColor;
// TODO Auto-generated constructor stub
}
public void enjoy() {
System.out.println("貓叫聲.......");
}
}
class Dog extends Animal {
private String color;
public Dog(String name,String color){
super(name);
this.color = color;
}
public void enjoy() {
System.out.println("狗叫聲!V钕痢H颉!Q庇觥G郾颉!2媛J姘铩!");
}
}
3.12.final關(guān)鍵字
1. final的變量的值不能被改變
2. final的方法不能被重寫
3. final的類不能被繼續(xù)
四陡叠、異常
1. 程序運(yùn)行期間發(fā)生的一些錯(cuò)誤事件玩郊,用try..catch去捕獲
2. 異常分類,根異常Trowable 下面分兩種Erro(不能處理)和Exception(能處理)枉阵,Exception再分兩種译红,RuntimeException和其它,RuntimeException可以不處理兴溜,但除了這個(gè)其它的都要處理
public class TestEx {
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println("異常的catch侦厚。耻陕。。刨沦。");
try {
System.out.println(2/0);
} catch (Exception e) {
// TODO: handle exception
System.out.println("系統(tǒng)出錯(cuò)了诗宣!");
e.printStackTrace();
}
}
}
五、數(shù)組
- 一維數(shù)組二維數(shù)組多維數(shù)組
public class TestArray {
public static void main(String[] args) {
// TODO Auto-generated method stub
Date[] days = new Date[3];
for (int i = 0; i < days.length; i++) {
days[i] = new Date(2017, 6, i);
days[i].pintDate();
}
}
}
class Date{
private int year,month,day;
public Date(int y,int m,int d) {
// TODO Auto-generated constructor stub
year = y;
month = m;
day = d;
}
public int getDay() {
return day;
}
public int getMonth() {
return month;
}
public int getYear() {
return year;
}
public void pintDate() {
System.out.println("日期是:"+getYear()+"-"+getMonth()+"-"+getDay());
}
}