⑴ java中指針操作是什麼意思
眾所周知,在java裡面是沒有指針的。那為何此處還要說java裡面的「指針」呢?我們知
道在C/C++中,指針是指向內存中的地址,該地址就是存儲變數的值。該地址所存儲的變數值是「公有」的,此處的「公有」是對於擁有該地址的變數而言。它
們都可以訪問該地址的內容,並且可對其就行修改,一經修改則所有指向該地址的變數值也將改變。那麼在Java裡面何來的指針?在java裡面沒有指針的定
義。但是java裡面的「指針」無處不在。下面將進行介紹。我們知道JAVA裡面用的最多的就是對象,我們經常將一個對象傳遞給不同的變數,例如:
Student s1 = new Student();
Student s2 = s1;
此時s1和s2是指向同一個對象的,也就是s1和s2引用同一個對象,我們知道java裡面創建一個對象是存放在堆的,當我們new一個對象的時候其實是
在堆中開辟了一個存儲該對象的空間,返回是的存儲該對象在堆中的地址,所以在java中我們所謂的對象引用就是指針,只是沒有像C/C++中給出了一個明
確的定義。java是為了避免指針帶來的使用上的麻煩,所以就使用對象的引用來代替了指針。上面的例子中,當我們在s1中進行修改Student中的屬性
的時候,那麼當s2取Student中屬性的值的時候便是取得了s1修改後的值,這是因為s1和s2是指向堆中的同一塊內容,所以只要其中一個變數修改了
堆中的值,則其他的變數將取得堆中最後更新的值。所以我們可以知道,s2=s1並不是又在堆中創建了一塊內存,而只是把一個對象的地址賦給了s2,此時還
是只是創建了一個對像,而不是兩個。在實際開發中會經常碰到這些,假設創建一個Map<String,Object>類型的對象,它的
value是一個對象,而key是一個字元串,定義如下:
class Student{
private String name;
private int age;
public void setAge(int age)
{
this.age = age;
}
public Student(String name)
{
this.name = name;
}
}
Map<String,Student> studentMap = new HashMap<String,Student>();
Student s1 = new Student("張三");
Student s2 = new Student("李四");
studentMap.put(s1.name,s1);
studentMap.put(s2.name,s2);
此處是一個學生姓名對應了一個
學生,所以此處的Map的key是學生姓名,value是一個學生對象。那麼就是將一個Student對象的引用賦給了Map中key所對應的
value,所以當程序在別處改變了s1/s2的值後,不必將s1和s2的信息更新到studentMap中,studentMap就會獲得key所對應
的value最新的值,例如:在程序的某處我們將s1的age修改成了「23」,我們不必將s1的最新信息更新到studentMap
中,studentMap就會獲得s1的最新值。這是因為已經將s1對象的引用賦給了studentMap中張三所對應的value,也就是將對象在堆中
的地址賦給了value。所以只要s1一更新,studentMap就可以獲得最新的值。
有時候這種情況會影響我們程序的執行和我們想想的會有偏差,當我們需要保存一個對象在某時刻的狀態時,按照一般的理解是將此時的對象賦給一個變數來進行
存儲,但是在java裡面這樣是行不通的!因為這樣直接將該對象賦給另一個變數只是將該對象的引用賦給了此變數,該變數的值並不能保持在此刻該對象的值,
會隨著程序的執行,該對象的改變而變化。所以達不到我們的目的。下面就舉個例子來說明解決該現象:
class Student{
private String name;
private int age;
public void setAge(int age)
{
this.age = age;
}
public Student(String name)
{
this.name = name;
}
public Student(Student student)
{
this.name = student.name;
this.age = student.age;
}
}
上面還是student類,基
本和上面一樣,只是多添加了一個構造函數——Student(Student
student),為什麼要多加這樣一個函數呢?這就是為了滿足我們上面的需求(保存對象某個時刻下的狀態),我們知道直接將一個對象賦給一個變數會存在
對象的引用,不能保存對象某時刻的狀態。同時也知道要想保存一個對象就要在堆中開辟一個空間,用於存放我們的對象。其實上面的需求可以看做當我們要保存某
時刻下對象的狀態,其實就是該對象的狀態不會隨以後對象的變化而變化,所以何不將當前某時刻下對象的狀態屬性全部都復制到一個新的對象中去!這樣保存下來
的屬性就不會受以後對象的變化而變化了。就上面的例子,舉例說明:
Student s1 = new Student("王麻子");
s1.age=23;
........
//此時要保存s1此刻的狀態
Student s2 = new Student(s1);
此時s1和s2就不是指向堆中的一個地址了,因為s2不是直接將s1賦給它的,而是通過new出來的!上面說了new可以在堆中開辟一個存儲當前new的
對象的空間。這種操作可以實現將s1中的狀態全都轉移到s2中,所以在值的方面看s2和s1此時是一樣的,但是在堆中確實不一樣的,s1!=s2,因為
s1和s2的hashcode不一樣!但是s1.name.equal(s2.name)==ture,s1.age=s2.age。這不就實現了保存某
個對象某個時刻下的狀態了嗎?而切不會在受程序執行的影響!
到此已全部介紹完有關java「指針」,其實java「指針」就是對象的引用,而對象就是存放在堆中的。我們知道java中的內存分為堆內存(heap)
和棧內存(stack)。堆就是用來存放對象的,而棧則是存放一些數據基本類型的值,如int,float,double,char.......。
⑵ Java,abstract繼承,this指針指的什麼
對於java寫的指針,你可以去看,不是這么寫的
this只的是當前對象
⑶ Java中this的用法跟C++的this指針一樣嗎
Java的this是改對象的引用,通過「.」號調用對象。C++的this是指向該對象的指針,用「->」調用對象。Java 的this引用和C++this指針雖然在用法上很相似,但是有本質的區別,引用相當於與對象的索引號,它的值對於程序員沒有任何意義,而指針的值是對象的地址對程序員很有用處。
⑷ java/c++里的this->和this.有什麼不同
不知道java,java中好像沒有指針的概念,我這里說一下c++中的this指針。c++里不能用this點的,因為this是指針不是對象,在c++中this指針就是代表對象,更本質的說法就是對象的內存地址,比如class test {} ; test ob; test *p = &ob; //這時ob的值和this指針的值是一樣的。
其實你關鍵理解為什麼有this指針。在用c語言寫順序表的時候我們一般這樣寫。
struct list { int *pstart; int maxsize, last_inx;}
對於這樣的數據結構,我們要操作它的時候,比如列出裡面的所有元素。我們會有函數:
void show(list *plist) { ..... }
在c++中,因為使用了類,所以我們可以直接把數據和操作封裝在一起,比如
class list {
public:
void show(); // 注意這里,對比用c語言寫的函數,這里少了一個參數,list *plist;
private: int *pstart; int maxsize, last_inx;
};
省略的那個參數就是所謂的this指針了,在c++中我們常用list ob; ob.show()這樣調用。
它的意思就是說對於ob這個對象,或者說這塊內存,我要進行show操作……
觀樓主英俊瀟灑,風流倜儻,關注0x30網路貼吧,必成千秋大業,建不世之功。
⑸ Java中的對象就相當於C中的指針,this相當於指針的指針,這樣說對不對
雖然java沒有指針,但也可以這樣認為,this不是指針的指針,就是對象的指針,對象變數也是對象的指針,this是用在類裡面的 ,對象變數是在類外面使用的
⑹ 在java中this.start()和start()有什麼不同
Java關鍵字this只能用於方法方法體內。當一個對象創建後,Java虛擬機(JVM)就會給這個對象分配一個引用自身的指針,這個指針的名字就是 this。因此,this只能在類中的非靜態方法中使用,靜態方法和靜態的代碼塊中絕對不能出現this,這在「Java關鍵字static、final 使用總結」一文中給出了明確解釋。並且this只和特定的對象關聯,而不和類關聯,同一個類的不同對象有不同的this。
⑺ Java裡面的this關鍵字是什麼意思
this關鍵字可以簡單的理解為,誰調用this所在的方法,this就是誰。
類的構造函數與getter、setter方法常用到this關鍵字(JavaBean)
JavaBean是一種可重用的Java組件,它可以被Applet、Servlet、SP等Java應用程序調用.也可以可視化地被Java開發工具使用。它包含屬性(Properties)、方法(Methods)、事件(Events)等特性。
public class Person {
//==========靜態屬性===========
//--想學編程的可以來我這看看----
private String name; //姓名
private int age; //年齡
private String gender; //性別
//==========動態行為===========
public void readBook(String book) {
System.out.println("reading " + book);
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;//this.name就是上面的private String name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
}
官方定義
this 是自身的一個對象,代表對象本身,可以理解為:指向對象本身的一個指針。
this 的用法在 Java 中大體可以分為3種:
1.普通的直接引用
這種就不用講了,this 相當於是指向當前對象本身。
2.形參與成員名字重名,用 this 來區分:
class Person {
private int age = 10;
public Person(){
System.out.println("初始化年齡:"+age);}
public int GetAge(int age){
this.age = age;
return this.age;
}
}
public class test1 {
public static void main(String[] args) {
Person Harry = new Person();
System.out.println("Harry's age is "+Harry.GetAge(12));
}
}
希望對您有所幫助!~