02java基础
1.類的定義
/*定義類:使用類的形式,對現實中的事物進行描述事物: 屬性,方法屬性: 變量方法: 這個事物具備的功能格式:public class 類名{屬性定義修飾符 數據類型 變量名 = 值方法定義修飾符 返回值類型 方法名(參數列表){}}*/ #Car.java package cn.jxufe.java.chapter2;/** 類的方式,描述現實中的事物 小汽車* * 小汽車 屬性和功能* 屬性: 顏色 輪胎個數 變量定義* 功能: 跑 方法* * 屬性和方法,都屬于類的成員* * 屬性, 成員變量* 方法, 成員方法*/ public class Car {// 定義Car類的屬性// 定義顏色屬性 String color;// 定義輪胎個數int count;// 定義跑的功能public void run() {System.out.println("小汽車在跑 ..." + color + "..." + count);}}?
#TestCar.java package cn.jxufe.java.chapter2;public class TestCar {public static void main(String[] args) {// TODO Auto-generated method stubCar c = new Car();// 對象.調用類中的屬性和方法c.color = "無色";c.count = 5;c.run();}}2.成員變量和局部變量對比
/** 成員變量和局部變量的區別* * 1. 定義位置上的區別* 成員變量,定義在類中,方法外* 局部變量,方法內,語句內* * 2. 作用域不同* 成員變量,作用范圍是整個類* 局部變量,方法內,語句內* * 3. 默認值不同* 成員變量,有自己的默認值* 局部變量,沒有默認值,不賦值不能使用* * 4. 內存位置不同* 成員變量,跟隨對象進入堆內存存儲* 局部變量,跟隨自己的方法,進入棧內存* * 5. 生命周期不同* 成員變量,跟隨對象,在堆中存儲,內存等待JVM清理 , 生命相對較長* 局部變量,跟隨方法,方法出棧 生命相對較短*/3.方法參數是基本數據類型和引用數據類型的區別
#Person.java package cn.jxufe.java.chapter2.demo2;public class Person {String name; } # TestPerson package cn.jxufe.java.chapter2.demo2;/** 方法的參數類型,是基本數據類型,引用數據類型*/ public class TestPerson {public static void main(String[] args) {int a = 1;function(a);System.out.println(a);Person p = new Person();p.name = "張三";System.out.println(p.name);function(p);System.out.println(p.name);}/** 定義方法,參數類型是引用數據類型 參數是Person類型 p接受的是一個內存的地址 main 中的* 變量p function 中的變量p 保存的地址是一樣的*/public static void function(Person p) {p.name = "李四";}/** 定義方法,參數類型是基本數據類型*/public static void function(int a) {a += 5;} }4.實例變量和類變量、常量、方法
?
package cn.jxufe.java.chapter2.demo8;public class TestCircleWithStaticMembers {public static void main(String[] args) {// TODO Auto-generated method stubSystem.out.println("before creating objects");System.out.println("the number of Circle objects is " + CircleWithStaticMembers.numberOfObjects);CircleWithStaticMembers c1 = new CircleWithStaticMembers();System.out.println("\nAfter creating c1");System.out.println("c1: radius " + c1.radius + " and number of Circle objects " + c1.numberOfObjects);CircleWithStaticMembers c2 = new CircleWithStaticMembers(5);System.out.println("\nAfter creating c2");System.out.println("c1: radius " + c1.radius + " and number of Circle objects " + c1.numberOfObjects);System.out.println("c2: radius " + c2.radius + " and number of Circle objects " + c2.numberOfObjects);}}使用下面的方法進行改正
package cn.jxufe.java.chapter2.demo9;public class StaticMethod {int i = 5;static int k = 2;public static void main(String[] args) {StaticMethod a = new StaticMethod();int j = a.i; a.m1(); }public void m1() {i = i + k + m2(i, k);System.out.println("i = " + i);}public static int m2(int i, int j) {return (int) (Math.pow(i, j));}}5.構造方法
#SimpleCircle package cn.jxufe.java.chapter2.demo3;public class SimpleCircle {double radius;public SimpleCircle() {// TODO Auto-generated constructor stubradius = 1;}public SimpleCircle(double radius) {this.radius = radius;}public void setRadius(double radius) {this.radius = radius;}double getArea() {return radius * radius * Math.PI;}double getPerimeter() {return 2 * radius * Math.PI;} } #TestSimpleCircle package cn.jxufe.java.chapter2.demo3;public class TestSimpleCircle {public static void main(String[] args) {// TODO Auto-generated method stubSimpleCircle circle1 = new SimpleCircle();System.out.println("the area of the circle of radius " + circle1.radius + " is " + circle1.getArea());SimpleCircle circle2 = new SimpleCircle(25);System.out.println("the area of the circle of radius " + circle2.radius + " is " + circle2.getArea());SimpleCircle circle3 = new SimpleCircle(125);System.out.println("the area of the circle of radius " + circle3.radius + " is " + circle3.getArea());}}6.private關鍵字
描述人。Person
屬性:年齡。
行為:說話:說出自己的年齡。
?
#Person.java package cn.jxufe.java.chapter2.demo4;public class Person {int age;String name;public void show() {System.out.println(" age= " + age + " name " + name);} } #TestPerson.java package cn.jxufe.java.chapter2.demo4;public class TestPerson {public static void main(String[] args) {// 創建Person對象Person p = new Person();p.age = -20; // 給Person對象賦值p.name = "人妖";p.show(); // 調用Person的show方法 } }通過上述代碼發現,雖然我們用Java代碼把Person描述清楚了,但有個嚴重的問題,就是Person中的屬性的行為可以任意訪問和使用。這明顯不符合實際需求。
可是怎么才能不讓訪問呢?需要使用一個Java中的關鍵字也是一個修飾符 private(私有,權限修飾符)。只要將Person的屬性和行為私有起來,這樣就無法直接訪問。
?
#Person.javapackage cn.jxufe.java.chapter2.demo5;public class Person {private int age;String name;// private是成員修飾符,不能修飾局部變量,被private修飾的成員變量,只能在該類的內容使用,超出該類的范圍都不能使用。public void setAge(int age) {if (age < 0 || age > 130) {System.out.println(age + " 不符合年齡范圍");return;} else {this.age = age;}}public void show() {System.out.println(" age= " + age + " name " + name);} } #TestPerson.java
package cn.jxufe.java.chapter2.demo5;import cn.jxufe.java.chapter2.demo5.Person;public class TestPerson {public static void main(String[] args) {// 創建Person對象Person p = new Person();p.setAge(-20); // 給Person對象賦值p.name = "人妖";p.show(); // 調用Person的show方法 } }
?總結:
類中不需要對外提供的內容都私有化,包括屬性和方法。
以后再描述事物,屬性都私有化,并提供setXxx getXxx方法對其進行訪問。
注意:私有僅僅是封裝的體現形式而已。
7.this關鍵字
局部變量和成員變量同名問題
不加this,就近原則調用
package cn.jxufe.java.chapter2.demo6;public class Person {int age;public void speak() {int age = 18;System.out.println("age = " + age);} } package cn.jxufe.java.chapter2.demo6;public class TestPerson {public static void main(String[] args) {// TODO Auto-generated method stubPerson person = new Person();person.age = 28;person.speak();System.out.println("person.age= " + person.age);}}?
加this,指明了調用的是成員變量
package cn.jxufe.java.chapter2.demo6;public class Person {int age;public void speak() {int age = 18;System.out.println("age = " + this.age);} } package cn.jxufe.java.chapter2.demo6;public class TestPerson {public static void main(String[] args) {// TODO Auto-generated method stubPerson person = new Person();person.age = 28;person.speak();System.out.println("person.age= " + person.age);}}this哪個對象調用了this所在的方法,this就代表哪個對象。
8.訪問權限
9.java庫中的類
9.1Date類
package cn.jxufe.java.chapter2.demo7;import java.util.Date;public class DateTest {public static void main(String[] args) {// TODO Auto-generated method stubDate date = new Date();System.out.println("the elapsed times since Jan 1,1970 is " + date.getTime() + " milliseconds");System.out.println(date.toString());}}9.2Random類
package cn.jxufe.java.chapter2.demo7;import java.util.Random;public class ch02RandomTest {public static void main(String[] args) {// TODO Auto-generated method stubRandom random1 = new Random(3);System.out.println("from random1:");for (int i = 0; i < 10; i++) {System.out.print(random1.nextInt(10)+ " ");}Random random2 = new Random(3);System.out.println("\nfrom random2:");for (int i = 0; i < 10; i++) {System.out.print(random2.nextInt(10) + " ");}}}10.面向對象的簡單應用
10.1貸款的例子
package cn.jxufe.java.chapter2.demo10;import java.util.Date;public class Loan {private double annuInterestRate;private int numberOfYears;private double loanAmount;private Date loanDate;public Loan() {// TODO Auto-generated constructor stubthis(2.5, 1, 1000); // 相當于直接調用下面的構造方法 }public Loan(double annuInterestRate, int numberOfYears, double loanAmount) {this.annuInterestRate = annuInterestRate;this.numberOfYears = numberOfYears;this.loanAmount = loanAmount;loanDate = new Date();}public double getAnnuInterestRate() {return annuInterestRate;}public void setAnnuInterestRate(double annuInterestRate) {this.annuInterestRate = annuInterestRate;}public int getNumberOfYears() {return numberOfYears;}public void setNumberOfYears(int numberOfYears) {this.numberOfYears = numberOfYears;}public double getLoanAmount() {return loanAmount;}public void setLoanAmount(double loanAmount) {this.loanAmount = loanAmount;}public Date getLoanDate() {return loanDate;}public void setLoanDate(Date loanDate) {this.loanDate = loanDate;}public double getMonthlyPayment() {double monthlyInterestRate = annuInterestRate / 1200;double monthlyPayment = loanAmount * monthlyInterestRate/ (1 - (1 / Math.pow(1 + monthlyInterestRate, numberOfYears * 12)));return monthlyPayment;}public double getTotalPayment() {double totalPayment = getMonthlyPayment() * numberOfYears * 12;return totalPayment;}} package cn.jxufe.java.chapter2.demo10;import java.util.Scanner;public class TestLoan {public static void main(String[] args) {// TODO Auto-generated method stubScanner input = new Scanner(System.in);System.out.println("enter annual interest rate,for example,8.25:");double annualInterestRate = input.nextDouble();System.out.println("enter number of years as an integer: ");int numberOfYears = input.nextInt();System.out.println("enter loan amount,for example,12000: ");double loanAmount = input.nextDouble();Loan loan = new Loan(annualInterestRate, numberOfYears, loanAmount);//注意此處的 printfSystem.out.printf("the loan was created on %s\n " + "the monthly payment is %.2f\n The total paymen is %.2f\n",loan.getLoanDate().toString(), loan.getMonthlyPayment(), loan.getTotalPayment());}}10.2設計棧類
package cn.jxufe.java.chapter2.demo11;public class StackOfInteger {private int[] elements;private int size;public static final int DEFAULT_CAPACITY = 16;public StackOfInteger(int capacity) {// TODO Auto-generated constructor stubelements = new int[capacity];}public StackOfInteger() {this(DEFAULT_CAPACITY);}public void push(int value) {if (size >= elements.length) {int[] temp = new int[elements.length * 2];System.arraycopy(elements, 0, temp, 0, elements.length);elements = temp;}elements[size++] = value;}public int pop() {return elements[--size];}public int getSize() {return size;}public boolean empty() {return size == 0;} } package cn.jxufe.java.chapter2.demo11;public class TestStackOfInteger {public static void main(String[] args) {// TODO Auto-generated method stubStackOfInteger stack = new StackOfInteger();for (int i = 0; i < 10; i++) {stack.push(i);}while (!stack.empty()) {System.out.print(stack.pop() + " ");}}}?
轉載于:https://www.cnblogs.com/xinmomoyan/p/10901882.html
總結
- 上一篇: C++ RAII
- 下一篇: Nginx Web服务应用