|
Java форум JavaTalks форум программистов
|
|
|
|
| Предыдущая тема :: Следующая тема |
| Автор |
Сообщение |
pozitiv : 6 Новичок
|
Янв 30, 2012 23:26 |
|
|
всем привет!
я новичок. Вот столкнулся с проблемой.
есть два класса. мейн и второй, работа с файлами.
обратить внимание на переменную correct
Main
| Код: |
public class Main {
public static void main(String[] args) {
String fileName="H:\\Java\\test\\filewhere2find.txt";
boolean correct=true;
FileWork.checkCorrect(fileName,correct);
if (correct) {
//do smth
}else FileWork.print("Файл не найден или ошибка чтения");
}
} |
и:
| Код: |
import java.io.*;
public class FileWork {
public static void print(String s) {
System.out.println(s);
}
public static void checkCorrect(String fileName,boolean b1) {
File fl = new File(fileName);
if (fl.canRead()) {
System.out.println("it is all ok, file is readable");
}else {
b1=false;
}
}
} |
Суть проблемы в том, что булеан не меняется. Если я определяю его в мейне как тру, то он и будет тру, если ложь - то ложью и останется, несмотря ни на какие результаты выполнения checkCorrect, есть файл или нет его.
Понимаю, что архитектурная ошибка. Подскажите как правильно решать данные вопросы.
Хочу вот что: если во время проверки обнаруживается что файла такого нет, или что-то с ним не так, чтоб передавался аргумент correct как ложь. Это реально? |
|
|
|
 |
time2die : 49 Новичок
|
Янв 30, 2012 23:45 |
|
|
1) если мне не изменяет память примитивы передаются по значению
2) почему функция не может возвращать boolen ? |
|
|
|
 |
pozitiv : 6 Новичок
|
Янв 30, 2012 23:50 |
|
|
такс. немного почитал. переписал, но есть проблема. смотрим:
| Код: |
public boolean isCorrect(String fileName) {
File fl = new File(fileName);
if (fl.canRead()) {
System.out.println("it is all ok, file is readable");
return true;
}else return false;
} |
теперь ошибка в мейне:
| Код: |
public void main(String[] args) {
String fileName="H:\\Java\\test\\filewhere2find.txt";
if(FileWork.isCorrect(fileName)) {
FileWork.getINFO(fileName);
}else FileWork.print("Файл не найден. Oшибка чтения");
} |
if(FileWork.isCorrect(fileName))
компил пишет:
non-static method isCorrect(java.lang.String) cannot be referenced from a static context |
|
|
|
 |
мсье клоц : 563 Постоянный посетитель
|
Янв 30, 2012 23:57 |
|
|
Ну так забыли же static.
| time2die писал(а): |
| 1) если мне не изменяет память примитивы передаются по значению |
Вообще, всегда передаётся копия переменной. |
|
|
|
 |
Skipy : 4805 Я тут живу! Откуда: Москва, Россия
|
Янв 31, 2012 11:28 |
|
|
| мсье клоц писал(а): |
Ну так забыли же static.
| time2die писал(а): |
| 1) если мне не изменяет память примитивы передаются по значению |
Вообще, всегда передаётся копия переменной. |
Это можно неправильно понять - если переменная объект, то передается копия объекта. А на самом деле передается копия ссылки на объект, а переменная - объект! - передается по ссылке.
Так что исходное утверждение было правильным. В методы примитивы передаются по значению, объекты по ссылке. При вызове удаленных методов через RMI объекты также передаются по значению (для этого они должны быть сериализуемыми), кроме Remote, которые передаются по ссылке. _________________ С уважением,
Евгений aka Skipy
www.skipy.ru
P.S. Я НЕ решаю задачи ЗА других! |
|
|
|
 |
мсье клоц : 563 Постоянный посетитель
|
Янв 31, 2012 13:40 |
|
|
| Skipy писал(а): |
Это можно неправильно понять - если переменная объект, то передается копия объекта. А на самом деле передается копия ссылки на объект, а переменная - объект! - передается по ссылке. |
Простите, что? Вы хотите сказать, что reference variables содержат и объект, и ссылку на него, но передаётся только ссылка?
Вообще, на сколько мне известно, java работает с двумя типами данных: reference type и primitive type.
Если переменная не примитивного типа, то передаётся копия этой переменной (хотя тут действительно впору уличить меня в неточной формулировке и заметить, что переменная тут вообще не при чем, а передаётся копия значения, что в ней содержится). Сама же переменная содержит не объект, а ссылку на него. Что тут можно неправильно понять? |
|
|
|
 |
aleksandy : 1077 Завсегдатай
|
Фев 01, 2012 5:35 |
|
|
| мсье клоц писал(а): |
| Сама же переменная содержит не объект, а ссылку на него. Что тут можно неправильно понять? |
Вот это оно самое и есть.
Для большинства выражение
| Код: |
| Object x = new Object(); |
означает, что в x находится объект типа Object, а не ссылка на него. |
|
|
|
 |
|
|
Страница 1 из 1
|
Список форумов
-> Основы языка Java |
|
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах
|
|